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

时间:2015-11-29 17:44:24

标签: c++ c ubuntu ncurses

我已经读过ncurses最多可以支持256种颜色和最多32k种颜色对。虽然我自己设置了256种颜色,但我无法找到有关如何设置32k颜色对的任何信息。

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

256 - 256

虽然2种颜色和2种颜色对可能足以让核心终端爱好者使用,但我想知道如何从图书馆中获取最多的颜色。

2 个答案:

答案 0 :(得分:2)

ncurses中的颜色对实际上是前景色和背景色的组合。您可以使用color_pair(手册页here)对其进行操作。有32,768种组合,因为前景有256种组合,背景相同,但红+蓝(例如)为蓝+红,有256x256 / 2 = 32,768种组合。

然后,您可以使用带有棋盘图案的前景+背景对(例如░░░░░░░░░░░░)来生成更多颜色。参见例如here

我认为你的问题可能存在一种误解。从手册页:

  

[linux] 实现将在尝试使用ERR0范围之外的颜色值时返回COLORS-1(默认颜色扩展名除外) ,或使用0COLOR_PAIR-1.

范围之外的颜色对

这就是说你一次只能使用COLOR_PAIR颜色对(即可以通过init_pair()使用) - 在你的实现上是256.但是有仍然有32,768种颜色可用 - 只是不是一次通过init_pair()。无论如何,这就是我理解的方式。

答案 1 :(得分:2)

默认情况下,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 {{3} } 也适用于xterm-256color)。

以下屏幕截图显示xterm运行ncurses测试程序(来自Why not just use TERM set to "xterm"?)的广泛颜色:

ncurses-examples