它是:一个库,促进现代终端模拟器上的复合物TUIS,以最大程度地支持生动的色彩,多媒体,线和Unicode。可以用Ncurses无法完成的NotCurs来完成事情。此外,这是狗屎的速度。不是:与源兼容的X/Open Curss实现,也不是对现有系统上的Ncurses的替换。
有关更多信息,请参见Dankwiki和The Man Pages。另外,还有doxygen输出。要订阅邮件列表,请发送电子邮件至[email protected](电子邮件内容无关紧要)。我写了一本连贯的指南,可以免费下载(或平装购买)。
我还没有添加许多记录的示例,但是SRC/ POC/和SRC/ POCPP/分别包含许多小型C和C ++程序。 notcurses-demo涵盖了NotCurses的大多数功能。
如果您在Docker中运行NotCurs,请咨询下面的“环境笔记”。



NotCurses放弃了X/OPEN的curss API捆绑为单个Unix规范的一部分。有关某些必要的背景,请咨询Thomas E. Dickey的出色和权威的Ncurses常见问题。因此,NotCurses并不是临时诅咒的替代品。
尽可能地,NotCurses利用了带有Ncurses的终端库,从其可移植性和彻底性中受益匪浅。
NotCurses在工作站,电话,笔记本电脑和平板电脑上为交互式用户打开了高级功能,可能是以工业和零售终端为代价的。从根本上讲,诅咒假设最低限度,并允许您(努力)加强,而NotCurses则在必要时(本身)假设最大和逐步下降。后一种方法可能会破坏一些较旧的硬件,但前者的方法使新软件看起来像旧硬件。
为什么要使用这个非标准库?
从一开始,线程安全性且在并行程序中有效使用。
比X/Open编码的更有序的表面:将导出的标识符置于前缀,以避免常用名称空间碰撞。在合理的情况下,使用static inline标准代码。这有助于编译器的优化,并减少加载时间。可以在没有其多媒体功能的情况下构建NotCurses,这需要明显较小的依赖项。
所有API本地支持通用字符集(UNICODE)。 nccell API基于Unicode的扩展石墨群概念。
视觉功能,包括图像,字体,视频,高对比度文本,精灵和透明区域。所有API本地支持的24位颜色,根据端子的必要性进行量化。
使用Sixel,Kitty甚至Linux Framebuffer控制台对位图图形的便携式支持。
支持明确的键盘协议。
“ TUI模式”有助于高性能,非滚动,全屏应用。 “ CLI模式”支持Shell实用程序的滚动输出,但具有NotCurses的全部功能。
它的全部许可是APACHE2的全部许可,而不是在几个ACT中的戏剧(即Ncurses许可证)(后者总结为“ MIT-X11的重述”)。
以上大部分可以使用Ncurses,但它们不是Ncurses设计的目的。另一方面,如果您是针对工业或关键应用程序,或者希望从经过时间考验的可靠性和可移植性中受益,则应一定要使用该精美的库。
最低版本通常表示我测试过的最古老的版本;很可能可以使用较旧的版本。让我知道任何成功!
有关构建和安装的更多信息,请提供install.md中的信息。
If you wish to use a language other than C to work with Notcurses, numerous wrappers are available.该存储库中包括一些,而其他则包括外部。
| 语言 | 铅 | 存储库 |
|---|---|---|
| 艾达 | 杰里米·格罗斯(Jeremy Grosser) | JeremyGrosser/NotCursesada |
| C ++ | Marek Habersack,尼克·布莱克 | 内部的 |
| 镖 | 纳尔逊·费尔南德斯(Nelson Fernandez) | kascote/dart_notcurses |
| 朱莉娅 | Dheepak Krishnamurthy | kdheepak/notcurses.jl |
| 尼姆 | 小迈克尔·布拉德利(Michael S. Bradley) | Michaelsbradleyjr/Nim-Notcurses |
| Python | 尼克·布莱克 | 内部的 |
| Python | IGO95862 | 内部的 |
| 锈 | 何塞·路易斯·克鲁兹(JoséLuisCruz) | dankamongmen/libnotcurses-sys |
| ZIG | Jakub Dundalek | Dundalek/notcurses-Zig-example |
将九个可执行文件安装为NotCurses的一部分:
ncls :在终端中显示多媒体的lsncneofetch :neofetch Ripoffncplayer :渲染视觉媒体(图像/视频)nctetris :俄罗斯俄罗斯克隆notcurses-demo :一些演示代码notcurses-info :检测和打印终端功能/诊断notcurses-input :解码和打印关键notcurses-tester :单位测试tfman :弯曲的手动浏览器要从结帐中运行notcurses-demo ,请通过-p参数提供data目录。需要数据文件的演示将中止。可以使用-d更改notcurses-demo中使用的基本延迟,接受浮点乘数。小于1的值将加快演示,而大于1的值将减慢其速度。
同样notcurses-tester要求使用-p指定带有必要数据文件的data 。它可以单独运行,也可以通过make test 。
使用-DUSE_PANDOC=on (默认),将通过doc/man构建完整的人页和XHTML。以下降价文档直接包括:
TERM环境变量和各种终端模拟器。如果您(可以理解的是)想避免使用大型pandoc堆栈,但仍然喜欢手动页面,我将发布带有生成的男人/xhtml的tarball以及每个发行版。下载它,并按照您认为合适的方式安装内容。
如果您的TERM变量是错误的,或者该终端定义是过时的,那么您的时间将非常糟糕。仅使用适合终端的TERM值。如果此变量未定义,或者NotCurses无法加载指定的终点站条目,则它将拒绝启动,并且您今天不会去太空。
NotCurses在启动时查询终端,从而基于确定的终端(甚至版本)启用一些高级功能。但是,基本功能取自Terminfo。因此,如果您有小猫,但是TERM=vt100 ,您将能够绘制RGBA位图图形(尽管这些东西对VT100来说只是一个梦想),但无法使用替代屏幕(尽管每个小猫版本都支持它)。因此, TERM和最新的终端数据库仍然很重要。
确保将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的技术术语)的默认解释,请确保将其设置为宽而不是狭窄(如果不起作用,请确保将其设置为狭窄,heh)。
如果您的终端通过setaf和setbf (大多数现代终端)支持3x8bit RGB颜色,但是既不导出RGB和Tc终端功能,则可以将COLORTERM Environment变量导出为truecolor或24bit 。请注意,有些终端接受24位规范,但将其映射到更少的颜色。每当确定大多数现代终端时,RGB都是无条件启用的。
字形宽度,以及是否完全可以显示字形,部分取决于字体配置。理想情况下,您的字体配置具有每个Unicode EGC的字形,并且每个字形的宽度与POSIX函数的wcswidth()结果匹配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,包括后者的六元图。NCBLIT_PIXEL 。同样,如果没有Unicode 13支持等,则六月( NCBLIT_3x2 )将不会使用。NCVISUAL_BLIT ncvisual_blit()将使用可用的最佳空白,除非提供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() 。main()返回时,如何确保运行NotCurses destructor?NotCurses示意为main() )。ncplane_move_yx()将其移开屏幕,将其移动到带有ncplane_move_below()的不透明平面下方,或使用ncplane_reparent()将其移动。ncplane_box_yx() ?你讨厌正交,你呆板吗?ncplane_box()和朋友已经有太多论点,你是怪物。graphics/qr-code-generator ,但我并没有在BSD上找到QRCodegen。cmake -DCMAKE_REQUIRED_INCLUDES=/usr/local/include 。这是由bsd.port.mk通过的。LANG环境变量未定义或错误地定义,或者您的机器上不存在必要的位置(您也可能明确提供NCOPTION_INHIBIT_SETLOCALE ,但从未称为setlocale(3) ,在这种情况下不这样做)。nccell时,我几乎总是需要ncplane 。后者为什么不为前者提供指针?nccell还需要保持尽可能小,如果您无论如何都需要提及有效的ncplane nccell则几乎总是便利的。valgrind /asan下运行了我的NotCurses程序,它显示了libtinfo.so的内存泄漏。因此,这是怎么回事?notcurses-demo ,但是我的表号码与charlatan的notcurs横幅号码不符。notcurses-demo呈现出实际演示以外的几个框架。notcurses_stop() / ncdirect_stop() (默认情况下,默认情况下,notCurses安装处理程序以使大多数致命信号完全执行此操作)。ncdirect_readline()仍然存在,现在即使没有库,现在实际上也可以工作,尽管它当然不是库。无论如何,使用ncreader使用CLI模式可能会更好。pkg-config --static --libs notcurses (或--libs notcurses-core )来发现它们。-P on启动mintty在参数上,或在启动它之前导出MSYS=enable_pcon 。COLORTERM=24bit吗?SendEnv COLORTERM添加到.ssh/config ,然后在远程服务器上的sshd_config AcceptEnv COLORTERM 。是的,这可能需要在远程服务器上root。不要怪我,伙计;我没有这样做。ncvisual_from_rgba()从RGBA内存中加载ncvisual 。NCSTYLE_REVERSE ?ncchannels_reverse()正确地倒转前后颜色。ncsubproc小部件的平面上。notcurses_refresh() notcurses_init() 。“我们的美术是开发的,它们的类型和用途在与当前的时机大不相同的人中,他们的行动力量与我们的行动力量无关紧要。但是,我们的技术的惊人成长,他们所获得的适应性和精度,他们创造的思想和习惯,可以肯定的是,深刻的变化在美丽的古老工艺中即将来临。” - PaulValéry