在我的平台上:
从自制软件中获取:
$ brew info ncurses
ncurses: stable 6.1 (bottled) [keg-only]
通过以下makefile配置进行构建:
pkgenv=PKG_CONFIG_PATH=/usr/local/opt/ncurses/lib/pkgconfig pkg-config ncursesw
flags=-Wall -std=c17 -ggdb
cflags=$(flags) $(shell $(pkgenv) --cflags)
ldflags=$(flags) $(shell $(pkgenv) --libs)
此最小可复制示例失败:
#include <assert.h>
#include <ncursesw/ncurses.h>
int main() {
assert(NULL != initscr());
assert(has_colors());
assert(can_change_color());
assert(ERR != start_color());
assert(COLOR_PAIRS == 0x10000);
assert(COLORS == 256);
assert(ERR != init_pair(1, 9, 10));
assert(ERR != init_pair(0x7FFE, 9, 10));
// OK up to here
// Fails
assert(ERR != init_pair(0x7FFF, 9, 10));
endwin();
puts("OK");
return 0;
}
但是为什么呢? COLOR_PAIRS
报告(65536)和init_pair
接受(1-32766)似乎是两件事。值得一看的是,浏览头文件,
#define NCURSES_PAIRS_T short
奇怪的是,他们为此选择了签名数量。
答案 0 :(得分:2)
颜色对的standard type是带符号的 short
,在大多数计算机上是16位。原因是它可以追溯到1980年代,当时空间(和颜色的可用性)更加有限。
ncurses 6.1的扩展名允许使用32位值(例如,使用init_extended_pair
),虽然没有人使用,但 brew 的formula似乎允许到目前为止对此发表了评论。
如init_pair
手册页的Portability部分所述
X /开放式光标 未指定颜色和颜色的限制 终端可以支持的颜色对。但是,在使用上短 对于参数,它将保留 SVr4 的实现详细信息 已编译的terminfo数据库,该数据库使用带符号的16位数字。这个 实现提供了使用这些功能的扩展版本 短参数,允许应用程序使用更大的颜色和成对 数字。
为了娱乐,here屏幕截图使用了ncurses 6.1的扩展号码功能