如何在ncurses中启用32k颜色对?

mwyxok5s  于 9个月前  发布在  其他
关注(0)|答案(3)|浏览(79)

我读到ncurses可以支持多达256种颜色和多达32k的颜色对。虽然我设法自己设置了256种颜色,但我找不到任何关于如何设置32k颜色对的信息。
的结果

printf("%d - %d\n", COLORS, COLOR_PAIRS);

字符串

256 - 256


虽然2种颜色和2种颜色对可能足够的铁杆终端球迷,我想知道如何获得最多的颜色了图书馆。

ne5o7dgx

ne5o7dgx1#

默认情况下,ncurses6配置为启用--enable-ext-colors。您还需要--enable-widec(否则,不使用存储扩展颜色的cchar_t类型)。configure脚本警告:

checking if you want to use extended colors... yes
configure: WARNING: This option applies only to wide-character library

字符串
假设您使用扩展颜色构建了库(和宽字符),它 * 能够 * 显示多达256种颜色和多达32767个颜色对(有符号16位数中的最大值)。之后,这取决于您使用的终端描述(和终端模拟器)。大多数运行在X Windows中的终端模拟器可以显示256种颜色。在X之外,不清楚是否有大多数。
ncurses对每一个都有相当准确的终端描述(不,使用TERM=xterm-256color不是每一个的答案,因为特殊的键和其他特征通常与xterm不同:FAQ * 为什么不只是使用TERM设置为“xterm”?* 也适用于xterm-256color)。
下面是一个屏幕截图,显示xterm运行ncurses测试程序(来自ncurses-examples)的宽颜色:


的数据

cyvaqqii

cyvaqqii2#

ncurses中的颜色对实际上是前景色和背景色的组合。(手册页here)。有32,768种组合,因为前景有256种组合,背景也有256种组合,但计算红色+蓝色例如,蓝色+红色,有256 × 256/2 = 32,768种组合。
然后,您可以使用具有棋盘图案的前景+背景对(例如░░░░░░░░░░░░)来产生更多颜色。参见例如here
我认为您的问题可能存在误解。从手册页面:
[Linux] 实现将在尝试使用0COLORS-1范围之外的颜色值(默认颜色扩展除外)或使用0COLOR_PAIR-1.范围之外的颜色对时返回ERR
也就是说,你只能一次使用COLOR_PAIR颜色对 *(即通过init_pair()可用)-在你的实现中是256个。但仍然有32,768个颜色对可用-只是不是通过init_pair()一次全部使用。这就是我理解的方式。

qoefvg9y

qoefvg9y3#

使用init_extended(ncurses 6.1及以上版本提供):

如果你今天在这里,别担心,我有解决办法。
您可以使用自制软件安装ncurses库(确保你安装的是最新的6.4).这节省了你自己编译的负担,因为现在你可以只调用init_extended_color(...)init_extended_pair(...)确保你使用的是你的ncurses安装,而不是系统默认值,这意味着指定路径与-L和名称与-l,如果你不能同时使用这两个选项,你就不能正确地链接它!
g++ -I/opt/homebrew/Cellar/ncurses/6.4/include -I./include ./src/*.cpp -o app --std=c++20 -L/opt/homebrew/Cellar/ncurses/6.4/lib -lncurses -lform -lpanel -lmenu -o app
-lform-lpanel-lmenu只是因为我的项目需要而存在:-lncurses是必需的
请注意,我在-l(库名称)之前指定了-L(库路径)。如果您不知道,-l会首先在-L路径中查找文件:)
如果你没有或不能使用自制的任何原因,只是跳过整个自制的一部分。
init_extended函数是在curses 6.1中添加的,它利用了SHORT变量的全部32 K范围。我希望它能帮助任何需要了解这一点的人!

相关问题