我正在尝试使用terminfo数据库打印颜色,并成功地解析了每个终端中存在的终端数据库文件。就我而言,我的gnome终端绝对支持颜色。
现在,终端数据库中有几个命令,例如 -
set_foreground
set_background
set_a_foreground
set_a_background
由于我想设置前景颜色,因此我选择了set_a_foreground
,它说它与ANSI SEQ兼容。但是我仍然不知道如何与其中任何一个真正打印颜色。
他们俩都说了这样的话-Set foreground color #1
在他们的描述中,其实际字符串在我的终端-ESC[3%p1%dm
上看起来像这样。
所以我的问题是,我应该使用哪个set_a_
或set_
版本以及如何用它们打印任何颜色。
set_foreground
和 set_a_foreground
(以及背景功能)之间的区别在 color color处理部分的terminfo(5)
手动页面中。请记住,长名的使用很少,您应该寻找setf
与setaf
:
The setaf/setab and setf/setb capabilities take a single
numeric argument each. Argument values 0-7 of setaf/setab
are portably defined as follows (the middle column is the
symbolic #define available in the header for the curses or
ncurses libraries). The terminal hardware is free to map
these as it likes, but the RGB values indicate normal
locations in color space.
Color #define Value RGB
black COLOR_BLACK 0 0, 0, 0
red COLOR_RED 1 max,0,0
green COLOR_GREEN 2 0,max,0
yellow COLOR_YELLOW 3 max,max,0
blue COLOR_BLUE 4 0,0,max
magenta COLOR_MAGENTA 5 max,0,max
cyan COLOR_CYAN 6 0,max,max
white COLOR_WHITE 7 max,max,max
The argument values of setf/setb historically correspond
to a different mapping, i.e.,
Color #define Value RGB
black COLOR_BLACK 0 0, 0, 0
blue COLOR_BLUE 1 0,0,max
green COLOR_GREEN 2 0,max,0
cyan COLOR_CYAN 3 0,max,max
red COLOR_RED 4 max,0,0
magenta COLOR_MAGENTA 5 max,0,max
yellow COLOR_YELLOW 6 max,max,0
white COLOR_WHITE 7 max,max,max
It is important to not confuse the two sets of color capa-
bilities; otherwise red/blue will be interchanged on the
display.
大多数使用terminfo(而不是诅咒)的应用程序使用tparm
函数来格式化字符串,替换(数字)参数,然后在结果字符串上使用tputs
实际编写。这两个帐户的填充和延迟(通常在 color 功能中都没有,但通常在终端中)。
ncurses-escamples程序 dots 使用这些功能在屏幕上随机绘制有色单元格。(在示例中,tparm2
,tparm3
是宏,它提供了tparm
原型所需的额外参数)。