简短的回答是,在 2018 年 1 月发布ncurses 6.1之前,您无法从 terminfo 获取信息。
更长的答案:
- 要有效地使用 TrueColor,您需要一个处理 3 个参数(红色、绿色、蓝色)的接口。Termcap 无法做到这一点。Terminfo 可以处理多个参数,但是...
- 没有标准的终端功能(可能是布尔值、数字或字符串的功能名称)处理 TrueColor 本身。
- 您可以调整现有功能,但它们有局限性
查看terminfo(5)手册,您可能会看到这些(字符串):
initialize_color initc Ic initialize color #1
to (#2,#3,#4)
initialize_pair initp Ip Initialize color
pair #1 to
fg=(#2,#3,#4),
bg=(#5,#6,#7)
与这些(数字)有关:
max_colors colors Co maximum number of
colors on screen
max_pairs pairs pa maximum number of
color-pairs on the
screen
与那些(例如 16、88 和 256 色)兼容的 ANSI 颜色和方案假定您正在成对地为前景和背景着色。原因是很久以前,硬件终端就是这样工作的。该initialize_color
功能适用于不同的方案(泰克),这似乎很有用。
但是,terminfo 已编译,生成的二进制文件仅存储有符号的 16 位整数。您不能使用终端描述来存储合适的max_pairs
或 max_colors
24 位颜色。(termcap 将所有内容存储为字符串,但如上所述不适合此应用程序)。
在首次编写此问题和答案的几年后,terminfo 被更新为使用一种新的文件格式,该格式使用带符号的 32 位整数,这足以表示 24 位 RGB 颜色中的颜色数量。
更多细节可以在ncurses 6.1的发布公告和更新的term(5)
手册页中找到,后者指出,一些直接访问 terminfo 数据的应用程序使用的旧 API 仍然存在限制。
进一步阅读: