Вышла новая версия библиотеки notcurses v1.4.x «the saga continues! wu-tang! wu-tang!»
Notcurses это библиотека TUI для современных терминальных эмуляторов. Буквально переводя – не проклятия (not curses). Она написана на С, с использованием C++-safe headers. Доступны обёртки для Rust, C++ и Python.
Что это такое: библиотека, упрощающая сложные TUI на современных терминальных эмуляторах, максимально поддерживающая яркие цвета и Unicode. Многие задачи, делегированные curses, могут быть выполнены с помощью notcurses (и наоборот).
Чем это не является: совместимой реализацией X/Open curses или заменой ncurses на существующих системах.
Notcurses отказывается от API X/Open Curses, поставляемого как часть Single UNIX Specification. Эта спецификация давно устарела и, например, не поддерживает такую функциональность терминала, как неиндексированный 24-битный цвет. Как таковая, notcurses не является заменой curses. Она менее портативна, и определенно протестирована на меньшем количестве оборудования. Когда это возможно, notcurses использует библиотеку terminfo, поставляемую вместе с ncurses, извлекая большую пользу из ее переносимости. Notcurses открывает расширенные функциональные возможности для взаимодействия с пользователями на рабочих станциях, телефонах, ноутбуках и планшетах.
Зачем использовать эту нестандартную библиотеку?
-
Потокобезопасность и эффективное использование в многопоточных программах с самого начала было проектным соображением.
-
Более правильно оформленное API по сравнению с X/Open:
-
Экспортируемые идентификаторы имеют префикс, чтобы избежать коллизий в пространствах имен.
-
Объектный файл библиотеки экспортирует минимальный набор символов. Там, где это целесообразно, используется статический код только для строчных заголовков. Это облегчает оптимизацию компилятора и сокращает время загрузки.
-
-
Все API изначально поддерживают универсальный набор символов (Unicode). API для ячеек основан на концепции Unicode’s Extended Grapheme Cluster.
-
Визуальные возможности, включая изображения, шрифты, видео, высококонтрастный текст, спрайты и прозрачные области. Все API нативно поддерживают 24-битный цвет, квантованный по мере необходимости для терминала.
-
Лицензия Apache2, в отличие от драмы в нескольких актах, которая является лицензией ncurses (последняя резюмируется как «переформулирование MIT-X11»).
С момента предыдущего значимого релиза 1.1.0 было добавлено огромное количество функций. Основные изменения:
-
Виджет для чтения для ввода строк произвольной формы с привязкой к строкам для чтения
-
Виджет subprocess для порождения подпроцесса, управления им и потоковой передачи его результатов обратно.
-
В Linux 5.3+ используется новый механизм clone3+pidfd для управления процессами без race condition.
-
Виджет Fdplane для потоковой передачи произвольного файлового дескриптора на плоскость (на которой построен подпроцесс). Оба позволяют обратным вызовам стилизовать или иным образом обрабатывать текст.
-
Вращение плоскостей и визуальных эффектов. Загрузка визуализаций из памяти. Произвольное блитирование RGBA/BGRx.
-
Меню можно размещать на любой (или на обеих) из верхних и нижних плоскостей.
-
Большие улучшения в режиме Direct.
-
Polyfills, градиенты и высококонтрастный текст.
-
Добавлен тетрис в качестве примера.
-
Обертки C++ от Marek Habersack получили возможность бросать исключения (если нужно).
-
Python и Rust FFI обновлены и протестированы.
Видео демо с комментариями автора Книга «Hacking The Planet! with Notcurses» от автора
>>> Подробности