我正在编写一个C++类,允许在终端中使用颜色。我要它在每个终端都能工作:
我曾经用termcap编写过C函数,并且在本例中我想使用它。然而,手册页说:
术语数据库是描述字符单元终端和打印机功能的过时工具.它只保留用于旧程序的功能;新程序应该使用terminfo数据库和相关库。
所以我试着使用terminfo,但是我找不到如何做到这一点。我的系统中没有终端(我运行在Debian上)。
我的问题是:
如何使用最新的工具(而不是根据手册)获得当前C/C++终端的颜色可能性?
发布于 2016-03-22 19:39:46
简单的回答是,在2018年1月发布ncures6.1之前,您无法从终端获取信息。
较长的答案是:
查看终止(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
screenANSI颜色和方案兼容这些(如16-,88-和256-颜色)假设你是着色前景和背景成对。原因是很久以前,硬件终端就是这样工作的。initialize_color功能用于不同的方案(Tektronix),这似乎很有用。
但是,将编译terminfo,生成的二进制文件只存储有符号的16位整数.无法使用终端描述来存储24位颜色的合适的max_pairs或max_colors。(termcap将所有内容存储为字符串,但如上所述,它不适合此应用程序)。
在这个问题和答案第一次写出来几年后,我们更新了一种使用32位整数的新文件格式,这足以表示24位RGB颜色的颜色数。
在ncurses 6.1和手册页的发布公告中可以找到更多的细节,后者指出,一些直接访问终端数据的应用程序在旧的API中仍然存在限制。
进一步读:
https://stackoverflow.com/questions/36158093
复制相似问题