C++ 如何在ncurses中启用32k颜色对?
我已经了解到ncurses可以支持多达256种颜色和多达32k种颜色对。虽然我自己设置了256种颜色,但我找不到有关如何设置32k颜色对的任何信息 结果C++ 如何在ncurses中启用32k颜色对?,c++,c,ubuntu,ncurses,C++,C,Ubuntu,Ncurses,我已经了解到ncurses可以支持多达256种颜色和多达32k种颜色对。虽然我自己设置了256种颜色,但我找不到有关如何设置32k颜色对的任何信息 结果 printf("%d - %d\n", COLORS, COLOR_PAIRS); 是 虽然2种颜色和2种颜色对铁杆终端迷来说已经足够了,但我想知道如何从库中获得最多的颜色。课程中的颜色对实际上是前景色和背景色的组合。您可以使用color\u pair(手册页)对其进行操作。有32768种组合,因为前景有256种组合,背景也有相同的组合,但将
printf("%d - %d\n", COLORS, COLOR_PAIRS);
是
虽然2种颜色和2种颜色对铁杆终端迷来说已经足够了,但我想知道如何从库中获得最多的颜色。课程中的颜色对实际上是前景色和背景色的组合。您可以使用
color\u pair
(手册页)对其进行操作。有32768种组合,因为前景有256种组合,背景也有相同的组合,但将红色+蓝色(例如)计算为蓝色+红色,则有256x256/2=32768种组合
然后,您可以使用具有棋盘格图案的前景+背景对(例如░░░░░░░░░░░░代码>)以产生更多颜色。见例
不过,我认为你的问题中可能存在固有的误解。从手册页面:
此[linux]实现将在尝试使用范围0
到COLORS-1
(默认颜色扩展除外)之外的颜色值时返回ERR
,或使用范围0
到color\u-1之外的颜色对。
这意味着您只能一次使用COLOR\u-PAIR
颜色对(即可通过init\u-PAIR()
使用)-在您的实现上,这是256。但是仍然有32768种颜色对可用-只是不能通过init\u pair()
一次全部可用。这就是我对它的理解。默认情况下,ncurses6配置为启用了--enable ext colors
。您还需要--启用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窗口中运行的大多数终端模拟器可以显示256色。在X之外,还不清楚是否有多数票
ncurses对每一种都有相当准确的终端描述(不,使用TERM=xterm-256color
不是每一种的答案,因为特殊键和其他特征通常与xterm不同:常见问题解答也适用于xterm-256color
)
这是一个屏幕截图,显示运行宽颜色的ncurses
测试程序(从)的xterm
:
这不是我问的问题。我知道有32k种颜色组合,这不是问题所在。这是一个关于COLOR_PAIRS变量的问题,该变量指定支持多少种不同的颜色对。默认值仅为256,我在某个地方读到它可以设置为32k,但我不知道如何设置。@redspah:请再读一遍这个答案。@LightnessRacesinOrbit让我再解释一遍。这不是关于可能的颜色对本身的问题,而是关于增加缓冲区的大小,该缓冲区容纳使用init_pair()定义的颜色对。现在,它被设置为256,这意味着在任何给定的时间只能定义256个颜色对,尽管您可以自由地重新定义它们,但最多只能定义256个颜色对。我正在寻找一种方法来改变缓冲区的大小,这样就可以同时定义32k个不同的对。无需。这个答案告诉你你需要知道什么。你只需要保持一个开放的心态,在吸收之前扔掉你的错误假设@我猜你的误解是什么&试图改进答案。
checking if you want to use extended colors... yes
configure: WARNING: This option applies only to wide-character library