Вышла новая версия библиотеки 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» от автора
Источник: linux.org.ru

