如何使用terminfo在终端中设置颜色

时间:2017-03-11 11:05:59

标签: c colors terminal terminfo

我正在尝试使用terminfo数据库打印颜色,并成功解析了每个终端的终端数据库文件。在我的情况下,我的gnome终端肯定支持颜色。

现在terminfo数据库中有几个命令,如 -

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_版本以及如何使用它们打印任何颜色。

1 个答案:

答案 0 :(得分:1)

set_foregroundset_a_foreground之间的区别(以及后台功能)位于terminfo(5)Color Handling section手册页中。请注意,长名称很少使用,您应该寻找setfsetaf

   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(而不是curses)的应用程序使用tparm函数来格式化字符串,替换(numeric)参数,然后在结果字符串上使用tputs来实际写入它。这两个用于填充和延迟(通常不会在颜色功能中找到,但通常在terminfo中找到)。

ncurses-examples程序dots使用这些功能在屏幕上随机绘制彩色单元格。 (在示例中,tparm2tparm3是提供tparm原型所需的额外参数的宏。