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

7

我了解到ncurses可以支持256种颜色和32000个颜色对。虽然我已经成功地设置了256种颜色,但我找不到任何关于如何设置32000个颜色对的信息。

结果:

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

256 - 256

虽然对于喜欢使用终端的用户来说,两种颜色和两种颜色组合已经足够了,但我想知道如何从库中获取最多的颜色。

2个回答

7
默认情况下,ncurses6 配置时启用了 --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 为什么不能只使用设置为“xterm”的TERM? 也适用于“xterm-256color”)。
下面是一个屏幕截图,显示了xterm运行ncurses测试程序(来自ncurses-examples),用于宽颜色:

enter image description here


3
ncurses中的颜色对实际上是前景色和背景色的组合。您可以使用color_pair(手册页面here)来操作它们。由于前景色和背景色各有256种组合,但如果将红+蓝(例如)视为蓝+红,则有256×256/2 = 32,768种组合。
然后,您可以使用带有棋盘格图案(例如░░░░░░░░░░░░)的前景+背景对生成更多颜色。请参见here
不过,我认为您的问题可能存在误解。来自手册页面的引用如下:

This [linux] implementation will return ERR on attempts to use color values outside the range 0 to COLORS-1 (except for the default colors extension), or use color pairs outside the range 0 to COLOR_PAIR-1.

这意味着您只能同时使用COLOR_PAIR颜色对(即通过init_pair()可用的颜色对数)-在您的实现中为256。但仍有32,768个颜色对可用,只是不能通过init_pair()一次性使用所有这些颜色对。那就是我的理解方式。

@LightnessRacesinOrbit 让我再尝试解释一下自己的意思。这不是关于可能的颜色配对本身的问题,而是关于增加保存使用init_pair()定义的配对的缓冲区的大小。现在,它设置为256,这意味着在任何给定时间只能定义256个颜色对,虽然您可以重新定义它们,但最多也只能获得256个对。我正在寻找一种方法来更改缓冲区的大小,以便可以同时定义32k个不同的配对。 - redspah
你的修改很到位。我正在寻找一种将COLOR_PAIRS的值更改为32k的方法。我应该编辑我的问题吗? - redspah
@redspah 我不相信你可以直接更改COLOR_PAIRS的值。你需要重新编译库。 - abligh
@abligh 好的,那我需要用什么标志重新编译ncurses呢? - redspah
@redspah,由于你使用的是Ubuntu系统,我建议你按照http://askubuntu.com/questions/28372/how-do-i-get-and-modify-the-source-code-of-packages-installed-through-apt-get中的方法使用`apt-get source`命令,并使用带有“-”标志的编译选项。但请注意,你构建的库可能与其他共享库用户不兼容,因此我建议你只进行静态链接。 - abligh
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接