как установить цвета в терминале с помощью terminfo

Я пытаюсь распечатать цвета, используя базу данных terminfo, и успешно проанализировал файлы базы данных терминала, присутствующие для каждого терминала. В моем случае у меня есть терминал gnome, который определенно поддерживает цвета.

Теперь в базе данных terminfo есть несколько команд, например:

set_foreground
set_background
set_a_foreground
set_a_background

Поскольку я хочу установить цвет переднего плана, я выбрал set_a_foreground, что говорит о том, что он совместим с последовательностью ANSI. Но все же я не знаю, как на самом деле печатать цвета с помощью любого из них.

Оба они говорят что-то вроде этого - Set foreground color #1 в своем описании, а их реальная строка выглядит так на моем терминале - ESC[3%p1%dm.

Итак, мой вопрос в том, какую из версий set_a_ или set_ мне следует использовать и как печатать с ними любой цвет.


person gw0    schedule 11.03.2017    source источник


Ответы (1)


Различие между set_foreground и set_a_foreground (а также фоновыми возможностями) находится в 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 (а не curses), используют tparm для форматирования строки, заменив (числовой) параметр, а затем используйте tputs для результирующей строки, чтобы фактически записать ее. Два из них учитывают отступы и задержки (обычно не встречаются в возможностях color, но в целом в terminfo).

Программа ncurses-examples dots использует эти функции для произвольного рисования цветных ячеек на экране. (В примере tparm2, tparm3 — это макросы, предоставляющие дополнительные параметры, которые требуются прототипу tparm).

person Thomas Dickey    schedule 11.03.2017