我读到ncurses可以支持多达256种颜色和多达32k的颜色对。虽然我设法自己设置了256种颜色,但我找不到任何关于如何设置32k颜色对的信息。的结果
printf("%d - %d\n", COLORS, COLOR_PAIRS);
字符串是
256 - 256
型虽然2种颜色和2种颜色对可能足够的铁杆终端球迷,我想知道如何获得最多的颜色了图书馆。
ne5o7dgx1#
默认情况下,ncurses6配置为启用--enable-ext-colors。您还需要--enable-widec(否则,不使用存储扩展颜色的cchar_t类型)。configure脚本警告:
--enable-ext-colors
--enable-widec
cchar_t
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)的宽颜色:
TERM=xterm-256color
xterm-256color
xterm
ncurses
的数据
cyvaqqii2#
ncurses中的颜色对实际上是前景色和背景色的组合。(手册页here)。有32,768种组合,因为前景有256种组合,背景也有256种组合,但计算红色+蓝色例如,蓝色+红色,有256 × 256/2 = 32,768种组合。然后,您可以使用具有棋盘图案的前景+背景对(例如░░░░░░░░░░░░)来产生更多颜色。参见例如here。我认为您的问题可能存在误解。从手册页面:此 [Linux] 实现将在尝试使用0到COLORS-1范围之外的颜色值(默认颜色扩展除外)或使用0到COLOR_PAIR-1.范围之外的颜色对时返回ERR也就是说,你只能一次使用COLOR_PAIR颜色对 *(即通过init_pair()可用)-在你的实现中是256个。但仍然有32,768个颜色对可用-只是不是通过init_pair()一次全部使用。这就是我理解的方式。
░░░░░░░░░░░░
0
COLORS-1
COLOR_PAIR-1.
ERR
COLOR_PAIR
init_pair()
qoefvg9y3#
如果你今天在这里,别担心,我有解决办法。您可以使用自制软件安装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范围。我希望它能帮助任何需要了解这一点的人!
init_extended_color(...)
init_extended_pair(...)
-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
init_extended
3条答案
按热度按时间ne5o7dgx1#
默认情况下,ncurses6配置为启用
--enable-ext-colors
。您还需要--enable-widec
(否则,不使用存储扩展颜色的cchar_t
类型)。configure脚本警告:字符串
假设您使用扩展颜色构建了库(和宽字符),它 * 能够 * 显示多达256种颜色和多达32767个颜色对(有符号16位数中的最大值)。之后,这取决于您使用的终端描述(和终端模拟器)。大多数运行在X Windows中的终端模拟器可以显示256种颜色。在X之外,不清楚是否有大多数。
ncurses对每一个都有相当准确的终端描述(不,使用
TERM=xterm-256color
不是每一个的答案,因为特殊的键和其他特征通常与xterm不同:FAQ * 为什么不只是使用TERM设置为“xterm”?* 也适用于xterm-256color
)。下面是一个屏幕截图,显示
xterm
运行ncurses
测试程序(来自ncurses-examples)的宽颜色:的数据
cyvaqqii2#
ncurses
中的颜色对实际上是前景色和背景色的组合。(手册页here)。有32,768种组合,因为前景有256种组合,背景也有256种组合,但计算红色+蓝色例如,蓝色+红色,有256 × 256/2 = 32,768种组合。然后,您可以使用具有棋盘图案的前景+背景对(例如
░░░░░░░░░░░░
)来产生更多颜色。参见例如here。我认为您的问题可能存在误解。从手册页面:
此 [Linux] 实现将在尝试使用
0
到COLORS-1
范围之外的颜色值(默认颜色扩展除外)或使用0
到COLOR_PAIR-1.
范围之外的颜色对时返回ERR
也就是说,你只能一次使用
COLOR_PAIR
颜色对 *(即通过init_pair()
可用)-在你的实现中是256个。但仍然有32,768个颜色对可用-只是不是通过init_pair()
一次全部使用。这就是我理解的方式。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范围。我希望它能帮助任何需要了解这一点的人!