Что это такое : библиотека, облегчающая комплексные TUIS на современных терминальных эмуляторах, поддерживая яркие цвета, мультимедиа, нити и Unicode до максимальной степени. Вещи можно сделать с помощью NOTCURSES, которые просто не могут быть сделаны с помощью NCURSES. Кроме того, это быстро, как дерьмо. Что это не так : совместимая с источником x/open Cricses, а также замена NCURSES в существующих системах.
Для получения дополнительной информации см. Dankwiki и The Man Pages. Кроме того, существует выход доксигена. Чтобы подписаться на список рассылки, отправьте электронное письмо на [email protected] (содержимое электронной почты не имеет значения). Я написал последовательный путеводитель, который доступен для бесплатной загрузки (или покупки в мягкой обложке).
Я еще не добавил много задокументированных примеров, но SRC/ POC/ и SRC/ POCPP/ содержит много небольших программ C и C ++ соответственно. notcurses-demo охватывает большую часть функциональности NOTCURSES.
Если вы запускаете приложения Notcurses в Docker, пожалуйста, проконсультируйтесь с «заметками среды» ниже.



Несмотря на то, что API откидывает x/open crses, в комплекте как часть отдельной спецификации Unix. Для некоторого необходимого опыта обратитесь к превосходному и авторитетному FAQ Томаса Э. Дики Дики. Таким образом, Notcurses не является заменой проклятий.
Везде, где это возможно, Notcurses использует библиотеку TermInfo, поставляемую с NCURSES, которая значительно выиграла от его переносимости и тщательности.
Notcurses открывает расширенную функциональность для интерактивного пользователя на рабочих станциях, телефонах, ноутбуках и планшетах, возможно, за счет, например, некоторые промышленные и розничные терминалы. По сути, CRSESS предполагает минимум и позволяет вам (с усилием) активизировать, тогда как NOTCURSES предполагает максимум и уходит вниз (само по себе), когда это необходимо. Последний подход, вероятно, нарушает какое -то старое оборудование, но первый подход приводит к тому, что новое программное обеспечение выглядит как старое оборудование.
Зачем использовать эту нестандартную библиотеку?
Безопасность потоков и эффективное использование в параллельных программах было дизайнерским соображением с самого начала.
Более упорядоченная поверхность, чем кодифицированная x/open: экспортируемые идентификаторы префиксируются, чтобы избежать общих столкновений пространства имен. Где используется разумный static inline код только заголовка. Это облегчает оптимизацию компилятора и сокращает время погрузчика. NOTCURSE могут быть построены без его мультимедийных функций, требуя значительно меньшего набора зависимостей.
Все API и изначально поддерживают универсальный набор символов (Unicode). API nccell основан на расширенной концепции графем Unicode.
Визуальные функции, включая изображения, шрифты, видео, высокий текст, спрайты и прозрачные области. Все API и насыщенные 24-разрядные цвета, квантовые по мере необходимости для терминала.
Портативная поддержка расированной графики, используя Sixel, Kitty и даже консоль Framebuffer Linux.
Поддержка однозначных протоколов клавиатуры.
«Mode Tui» облегчает высокопроизводительные, не прокручивающиеся, полноэкранные приложения. «CLI Mode» поддерживает вывод прокрутки для утилиты Shell, но с полной мощностью NOTCURSES.
Он полностью лицензирован Apache2, в отличие от драмы в нескольких действиях, которые являются лицензией Ncurses (последнее обобщено как «перестройка MIT-X11»).
Многое из вышеперечисленного можно получить с помощью Ncurses, но они не были разработаны Ncurses. С другой стороны, если вы нацелены на промышленные или критические приложения или хотите получить выгоду от проверенной по времени надежности и мобильности, вы должны использовать эту прекрасную библиотеку.
Минимальные версии обычно указывают на самую старую версию, с которой я тестировал; Вполне может быть возможно использовать еще более старые версии. Дайте мне знать о любых успехах!
Более подробная информация о строительстве и установке доступна в install.md.
Если вы хотите использовать язык, отличный от C для работы с Notcurses, доступны многочисленные обертки. Некоторые из них включены в этот репозиторий, в то время как другие являются внешними.
| Язык | Ведущий (S) | Репозиторий |
|---|---|---|
| Ада | Джереми Гроссер | Джеремироссер/Notcursesada |
| C ++ | Марек Хаберсак, Ник Блэк | внутренний |
| Дрэк | Нельсон Фернандес | Kascote/dart_notcurses |
| Джулия | Dheepak Krishnamurthy | kdheepak/notcurses.jl |
| Ним | Майкл С. Брэдли -младший. | Michaelsbradleyjr/nim-notcurses |
| Питон | Ник Блэк | внутренний |
| Питон | IGO95862 | внутренний |
| Ржавчина | Хосе Луис Круз | Dankamongmen/libnotcurses-sys |
| Zig | Якуб Данндалек | dundalek/notcurses-zig-example |
Девять исполняемых файлов установлены как часть Notcurses:
ncls : ls , который отображает мультимедиа в терминалеncneofetch : неофетчncplayer : Renders Visual Media (изображения/видео)nctetris : клон тетрисаnotcurses-demo : какой-то демонстрационный кодnotcurses-info : обнаружение и печатные возможности терминала/диагностикаnotcurses-input : декодировать и печатать клавишnotcurses-tester : модульное тестированиеtfman : Swank Manual Browser Чтобы запустить notcurses-demo от оформления заказа, предоставьте каталог data через аргумент -p . Демо, требующие, чтобы файлы данных в противном случае будут прервать. Базовая задержка, используемая в notcurses-demo может быть изменена с -d , принимая множитель с плавающей точкой. Значения менее 1 будут ускорить демонстрацию, в то время как значения, превышающие 1, замедлят его.
notcurses-tester также требует, чтобы data , заполненные необходимыми файлами данных, были указаны с -p . Он может быть запускается сам по себе или через make test .
С -DUSE_PANDOC=on (по умолчанию) полный набор лишних страниц и xhtml будет построен из doc/man . Следующая документация на отметки включена напрямую:
TERM переменная среды и различные терминальные эмуляторы.Если вы (понятно) хотите избежать большого стека Pandoc, но все равно наслаждаетесь ручными страницами, я публикую Tarball с генерируемым человеком/XHTML вместе с каждым выпуском. Загрузите его и установите содержимое, как вы считаете подходящим.
Если ваша переменная TERM неверна, или что определение Terminfo устарело, у вас будет очень плохое время. Используйте только значения TERM , подходящие для вашего терминала. Если эта переменная не определена, или не могут загрузить указанную запись TermInfo, она откажется начинать, и вы не пойдете сегодня в пространство.
Несмотря на запросы на терминал на запуск, позволяя некоторым расширенным функциям на основе определенного терминала (и даже версии). Основные возможности, однако, взяты из Terminfo. Так что, если у вас есть, скажем, Kitty, но TERM=vt100 , вы сможете рисовать графику растровой карты RGBA (несмотря на такие вещи, только мечта для VT100), но неспособность использовать альтернативный экран (несмотря на то, что он поддерживается каждой версией Kitty). Таким образом, TERM и обновленная база данных Terminfo остаются важными.
Убедитесь, что ваша переменная среды LANG установлена на локаль, кодируемый UTF8, и что этот локаль был сгенерирован. Обычно это означает "[language]_[Countrycode].UTF-8" , то есть en_US.UTF-8 . Первая часть ( en_US ) должна существовать в качестве каталога или символического изделия в /usr/share/locales . Обычно это требует редактирования /etc/locale.gen и бегущего locale-gen . В Debian Systems это может быть достигнуто с помощью dpkg-reconfigure locales и обеспечения желаемой локали. Локаль по умолчанию хранится где -то вроде /etc/default/locale .
Если у вашего терминала есть опция о интерпретации по умолчанию «неоднозначных символов ширины» (на самом деле это технический термин из Unicode), убедитесь, что он установлен на широкий уровень , а не узкий (если это не работает, убедитесь, что он настроен на сужение , хех).
Если ваш терминал поддерживает 3x8bit RGB Color через setaf и setbf (большинство современных терминалов), но экспортирует ни возможности RGB , ни Tc TERMINFO, вы можете экспортировать переменную среды COLORTERM как truecolor или 24bit . Обратите внимание, что некоторые терминалы принимают 24-разрядную спецификацию, но сопоставляйте ее до меньшего количества цветов. RGB обеспечивается безоговорочно всякий раз, когда идентифицируются большинство современных терминалов.
Ширина глифа, и, действительно, может ли вообще отображаться глиф, частично зависит от конфигурации шрифта. В идеале, ваша конфигурация шрифта имеет глиф для каждого EGC Unicode, и ширина каждого глифа соответствует результату wcswidth() функции POSIX для EGC. Если это не так, вы, скорее всего, получите пробелы или � (U+FFFD, заменяющий символ) для отсутствующих символов, и последующие символы на линии могут быть неуместны.
Стоит знать, что несколько терминалов рисуют символы блоков напрямую, а не загружают их из шрифта. Это вообще желательно. Квадранты и секстанты не являются местом для демонстрации виртуозности вашей дизайна. Чтобы проверить рендеринг вашей среды рисования персонажей, запустите notcurses-info . Желаемый выход должен выглядеть примерно так:
Если что -то сломается или кажутся в противном случае тусклым, пожалуйста, обратитесь в раздел «Заметки об окружающей среде»! Вам нужен правильный TERM и определения LANG , и вы можете захотеть COLORTERM .
NCOPTION_CLI_MODE (псевдоним для нескольких реальных флагов; см. notcurses_init(1) для получения дополнительной информации). Вы все еще должны явно отображать.-DUSE_MULTIMEDIA=none .notcurses_core_init() или ncdirect_core_init() вместо notcurses_init() / ncdirect_init() и свяжите с -lnotcurses-core . Ваше заявление, вероятно, начнется на несколько миллисекунд быстрее; Что еще более важно, он будет связан с минимальными установками NOTCURSES.notcurses-demo (и, возможно, несколько других программ). Использовать -DUSE_CXX=off .TERM поддерживаются многие аппаратные терминалы. В общем, если запись базы данных TermInFO указывает на обязательные задержки, NOTCURSES в настоящее время не будет подтверждать этот терминал должным образом. Известно, что NOTCURSES может управлять VT320 и VT340, включая графику Sixel на последнем.NCBLIT_PIXEL был запрошен. Аналогичным образом, Sextants ( NCBLIT_3x2 ) не будут использоваться без поддержки Unicode 13 и т. Д. ncvisual_blit() будут использовать лучший доступный Blitter, если не будет предоставлен NCVISUAL_OPTION_NODEGRADE (в этом случае он потерпит неудачу).screen .screen не поддерживает цвета RGB (по крайней мере, на 4.08.00); Если у вас определен COLORTERM , у вас будет плохое время. Если у вас есть screen , который был скомпилирован с --enable-colors256 , попробуйте экспортировать TERM=screen-256color в отличие от TERM=screen .mosh .NC_ENTER NCTYPE_RELEASE , и каждый ключ -бреск обычно приводит как минимум к двум входам.NCKEY_RESIZE , пока я не нажму другую клавишу.SIGWINCH в некотором потоке, и этот поток получает сигнал вместо потока, который называется notcurses_getc_blocking() . В результате poll() не прерывается. Вызовите pthread_sigmask() прежде чем появляться любые потоки.NotCurses Destructor работает при возвращении из main() ?NotCurses подходят к main() ).ncplane_move_yx() , переместите его под непрозрачную плоскость с ncplane_move_below() или перенесите его с пели с ncplane_reparent() .ncplane_box_yx() ? Ты ненавидишь ортогональность, ты тупо?ncplane_box() и у друзей уже есть слишком много аргументов, у вас монстр.graphics/qr-code-generator .cmake -DCMAKE_REQUIRED_INCLUDES=/usr/local/include . Это передается bsd.port.mkLANG недостаточно определена или неправильно определена, или необходимая локаль не присутствует на вашей машине (также возможно, что вы явно поставляете NCOPTION_INHIBIT_SETLOCALE , но никогда не называется setlocale(3) , в этом случае этого не делает).ncplane при использовании nccell . Почему последнее не держит указатель на первое?nccell должен оставаться максимально маленьким, и у вас почти всегда есть ncplane HANDY, если у вас есть ссылка на действительный nccell .valgrind /Asan, и она показывает утечки памяти от libtinfo.so , что с этим?notcurses-demo , но мои номера таблиц не соответствуют номерам баннеров Notcurses, вы шарлатан.notcurses-demo отдает несколько кадров за пределами фактических демонстраций.notcurses_stop() / ncdirect_stop() на всех путях выхода, включая фатальные сигналы (обратите внимание, что по умолчанию Notcurses устанавливает обработчики для большинства фатальных сигналов, чтобы сделать именно это).ncdirect_readline() все еще существует, и теперь на самом деле работает даже без Libreadline, хотя, конечно, это не совсем либерист. В любом случае, вам, вероятно, было бы лучше, используя режим CLI с ncreader .pkg-config --static --libs notcurses (или --libs notcurses-core ), чтобы обнаружить их.mintty с -P on аргументах или экспортируйте MSYS=enable_pcon прежде чем запустить его.COLORTERM=24bit везде?SendEnv COLORTERM в .ssh/config и AcceptEnv COLORTERM в sshd_config на удаленном сервере. Да, это, вероятно, потребует root на удаленном сервере. Не вини меня, чувак; Я этого не делал.ncvisual из памяти RGBA, используя ncvisual_from_rgba() .NCSTYLE_REVERSE ?ncchannels_reverse() чтобы правильно инвертировать цвета переднего и фона.ncsubproc .notcurses_refresh() после notcurses_init() успешно возвращается.«Наше изобразительное искусство было разработано, их типы и использование были установлены, в то время, отличающиеся от настоящего, людьми, чья сила действий над вещами была незначительной по сравнению с нашим. Но удивительный рост наших методов, адаптивность и точность, которые они достигли, идеи и привычки, которые они создают, делают уверенность в том, что глубокие изменения в древнем ремесле прекрасного ». –Paul Valéry