Список управляющих последовательностей ANSI

На большинстве терминалов можно раскрасить вывод, используя escape-последовательность \033 ANSI.

Я ищу список всех поддерживаемых цветов и параметров (например, яркие и мигающие).

Поскольку, вероятно, существуют различия между поддерживающими их терминалами, меня в основном интересуют последовательности, поддерживаемые терминалами, совместимыми с xterm.

Ответ 1

Требуемые escape-последовательности ANSI являются подмножеством Select Graphic Rendition. Все они имеют форму

\033[XXXm

где XXX - набор параметров, разделенных точкой с запятой.

Скажем, выделите текст красным, жирным и подчеркнутым (мы обсудим много других вариантов ниже) в C, который вы можете написать:

printf("\033[31;1;4mHello\033[0m");

В C++ вы бы использовали

std::cout<<"\033[31;1;4mHello\033[0m";

В Python3 вы бы использовали

print("\033[31;1;4mHello\033[0m")

и в Bash вы бы использовали

echo -e "\033[31;1;4mHello\033[0m"

где первая часть делает текст красным (31), полужирным (1), подчеркнутым (4), а последняя часть очищает все это (0).

Как описано в таблице ниже, вы можете установить большое количество текстовых свойств, таких как жирный шрифт, шрифт, подчеркивание и т.д. (Разве не глупо, что Qaru не позволяет вам ставить правильные таблицы в ответах?)

Эффекты шрифта

╔══════════╦════════════════════════════════╦═════════════════════════════════════════════════════════════════════════╗
║  Code    ║             Effect             ║                                   Note                                  ║
╠══════════╬════════════════════════════════╬═════════════════════════════════════════════════════════════════════════╣
║ 0        ║  Reset / Normal                ║  all attributes off                                                     ║
║ 1        ║  Bold or increased intensity   ║                                                                         ║
║ 2        ║  Faint (decreased intensity)   ║  Not widely supported.                                                  ║
║ 3        ║  Italic                        ║  Not widely supported. Sometimes treated as inverse.                    ║
║ 4        ║  Underline                     ║                                                                         ║
║ 5        ║  Slow Blink                    ║  less than 150 per minute                                               ║
║ 6        ║  Rapid Blink                   ║  MS-DOS ANSI.SYS; 150+ per minute; not widely supported                 ║
║ 7        ║  [[reverse video]]             ║  swap foreground and background colors                                  ║
║ 8        ║  Conceal                       ║  Not widely supported.                                                  ║
║ 9        ║  Crossed-out                   ║  Characters legible, but marked for deletion.  Not widely supported.    ║
║ 10       ║  Primary(default) font         ║                                                                         ║
║ 11–19    ║  Alternate font                ║  Select alternate font 'n-10'                                           ║
║ 20       ║  Fraktur                       ║  hardly ever supported                                                  ║
║ 21       ║  Bold off or Double Underline  ║  Bold off not widely supported; double underline hardly ever supported. ║
║ 22       ║  Normal color or intensity     ║  Neither bold nor faint                                                 ║
║ 23       ║  Not italic, not Fraktur       ║                                                                         ║
║ 24       ║  Underline off                 ║  Not singly or doubly underlined                                        ║
║ 25       ║  Blink off                     ║                                                                         ║
║ 27       ║  Inverse off                   ║                                                                         ║
║ 28       ║  Reveal                        ║  conceal off                                                            ║
║ 29       ║  Not crossed out               ║                                                                         ║
║ 30–37    ║  Set foreground color          ║  See color table below                                                  ║
║ 38       ║  Set foreground color          ║  Next arguments are '5;n' or '2;r;g;b', see below                       ║
║ 39       ║  Default foreground color      ║  implementation defined (according to standard)                         ║
║ 40–47    ║  Set background color          ║  See color table below                                                  ║
║ 48       ║  Set background color          ║  Next arguments are '5;n' or '2;r;g;b', see below                       ║
║ 49       ║  Default background color      ║  implementation defined (according to standard)                         ║
║ 51       ║  Framed                        ║                                                                         ║
║ 52       ║  Encircled                     ║                                                                         ║
║ 53       ║  Overlined                     ║                                                                         ║
║ 54       ║  Not framed or encircled       ║                                                                         ║
║ 55       ║  Not overlined                 ║                                                                         ║
║ 60       ║  ideogram underline            ║  hardly ever supported                                                  ║
║ 61       ║  ideogram double underline     ║  hardly ever supported                                                  ║
║ 62       ║  ideogram overline             ║  hardly ever supported                                                  ║
║ 63       ║  ideogram double overline      ║  hardly ever supported                                                  ║
║ 64       ║  ideogram stress marking       ║  hardly ever supported                                                  ║
║ 65       ║  ideogram attributes off       ║  reset the effects of all of 60-64                                      ║
║ 90–97    ║  Set bright foreground color   ║  aixterm (not in standard)                                              ║
║ 100–107  ║  Set bright background color   ║  aixterm (not in standard)                                              ║
╚══════════╩════════════════════════════════╩═════════════════════════════════════════════════════════════════════════╝

2-битные цвета

Вы уже получили это!

4-битные цвета

Стандарты, реализующие цвета терминала, начинались с ограниченных (4-битных) опций. В приведенной ниже таблице перечислены значения RGB цветов фона и переднего плана, используемые для них различными эмуляторами терминала:

Table of ANSI colours implemented by various terminal emulators

Используя вышесказанное, вы можете сделать красный текст на зеленом фоне (но почему?), Используя:

\033[31;42m

11 цветов (интерлюдия)

В своей книге "Основные цветовые термины: их универсальность и эволюция" Брент Берлин и Пол Кей использовали данные, собранные на двадцати разных языках из разных языковых семейств, для определения одиннадцати возможных основных цветовых категорий: белый, черный, красный, зеленый, желтый, синий, коричневый, фиолетовый, розовый, оранжевый и серый.

Берлин и Кей обнаружили, что в языках с числом, не превышающим максимум одиннадцати цветовых категорий, цвета следовали определенной эволюционной схеме. Этот шаблон выглядит следующим образом:

  1. Все языки содержат термины для черного (холодные цвета) и белого (яркие цвета).
  2. Если язык содержит три термина, он содержит термин для красного цвета.
  3. Если язык содержит четыре термина, то он содержит термин для зеленого или желтого (но не для обоих).
  4. Если язык содержит пять терминов, то он содержит термины как для зеленого, так и для желтого.
  5. Если язык содержит шесть терминов, то он содержит термин для синего цвета.
  6. Если язык содержит семь терминов, он содержит термин для коричневого цвета.
  7. Если язык содержит восемь или более терминов, то он содержит термины для фиолетового, розового, оранжевого или серого.

Возможно, поэтому история Беовульфа содержит только черный, белый и красный цвета. Возможно также, что в Библии нет синего цвета. Гомер Одиссея содержит черный почти 200 раз, а белый около 100 раз. Красный появляется 15 раз, а желтый и зеленый появляются только 10 раз. (Подробнее здесь)

Различия между языками также интересны: обратите внимание на обилие разных цветных слов, используемых в английском и китайском языках. Однако углубление в эти языки показывает, что каждый использует цвет по-разному. (Дополнительная информация)

Chinese vs English colour names. Image adapted from "muyueh.com"

Вообще говоря, наименование, использование и группировка цветов на человеческих языках - это увлекательно. Теперь вернемся к шоу.

8 бит (256) цветов

Технология продвинулась, и стали доступны таблицы из 256 предварительно выбранных цветов, как показано ниже.

256-bit colour mode for ANSI escape sequences

Используя это выше, вы можете сделать розовый текст следующим образом:

\033[38;5;206m     #That is, \033[38;5;<FG COLOR>m

И сделайте ранний утренний синий фон, используя

\033[48;5;57m      #That is, \033[48;5;<BG COLOR>m

И, конечно, вы можете комбинировать это:

\033[38;5;206;48;5;57m

8-битные цвета расположены так:

0x00-0x07:  standard colors (same as the 4-bit colours)
0x08-0x0F:  high intensity colors
0x10-0xE7:  6 × 6 × 6 cube (216 colors): 16 + 36 × r + 6 × g + b (0 ≤ r, g, b ≤ 5)
0xE8-0xFF:  grayscale from black to white in 24 steps

ВСЕ ЦВЕТА

Теперь мы живем в будущем, и полный спектр RGB доступен с помощью:

\033[38;2;<r>;<g>;<b>m     #Select RGB foreground color
\033[48;2;<r>;<g>;<b>m     #Select RGB background color

Таким образом, вы можете поместить розоватый текст на коричневатый фон, используя

\033[38;2;255;82;197;48;2;155;106;0mHello

Поддержка терминалов "истинного цвета" указана здесь.

Многое из вышеперечисленного взято со страницы Википедии "Экранирующий код ANSI".

Удобный скрипт для напоминания о себе

Поскольку я часто пытаюсь вспомнить, что это за цвета, у меня есть удобный скрипт под названием: ~/bin/ansi_colours:

#!/usr/bin/python

print "\\033[XXm"

for i in range(30,37+1):
    print "\033[%dm%d\t\t\033[%dm%d" % (i,i,i+60,i+60);

print "\033[39m\\033[39m - Reset colour"
print "\\033[2K - Clear Line"
print "\\033[<L>;<C>H OR \\033[<L>;<C>f puts the cursor at line L and column C."
print "\\033[<N>A Move the cursor up N lines"
print "\\033[<N>B Move the cursor down N lines"
print "\\033[<N>C Move the cursor forward N columns"
print "\\033[<N>D Move the cursor backward N columns"
print "\\033[2J Clear the screen, move to (0,0)"
print "\\033[K Erase to end of line"
print "\\033[s Save cursor position"
print "\\033[u Restore cursor position"
print " "
print "\\033[4m  Underline on"
print "\\033[24m Underline off"
print "\\033[1m  Bold on"
print "\\033[21m Bold off"

Это печатает

Simple ANSI colours

Ответ 3

Как насчет:

ECMA-48 - Функции управления для наборов кодированных символов, 5-е издание (июнь 1991 г.) - Стандарт, определяющий коды управления цветом, который, очевидно, также поддерживается xterm.

SGR 38 и 48 были первоначально зарезервированы ECMA-48, но были уточнены через несколько лет в совместном стандарте ITU, IEC и ISO, который состоит из нескольких частей и который (среди всего прочего) документирует SGR 38/48 контрольных последовательностей для прямого цвета и индексированного цвета:

В этой таблице на странице Википедии есть столбец для xterm для кодов выхода ANSI.

Ответ 5

Это относится абсолютно к вашему терминалу. VTE не поддерживает мигание. Если вы используете gnome-terminal, tilda, guake, terminator, xfce4-terminal и т.д. В соответствии с VTE, у вас не будет мигать.
Если вы используете или хотите использовать мигание на VTE, вы должны использовать xterm.
Вы можете использовать команду infocmp с именем терминала:

#infocmp vt100 
#infocmp xterm 
#infocmp vte 

Например:

# infocmp vte
#   Reconstructed via infocmp from file: /usr/share/terminfo/v/vte
vte|VTE aka GNOME Terminal,
    am, bce, mir, msgr, xenl,
    colors#8, cols#80, it#8, lines#24, ncv#16, pairs#64,
    acsc=''aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
    bel=^G, bold=\E[1m, civis=\E[?25l, clear=\E[H\E[2J,
    cnorm=\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr,
    cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J,
    cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
    cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P,
    dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J,
    el=\E[K, enacs=\E)0, home=\E[H, hpa=\E[%i%p1%dG, ht=^I,
    hts=\EH, il=\E[%p1%dL, il1=\E[L, ind=^J, invis=\E[8m,
    is2=\E[m\E[?7h\E[4l\E>\E7\E[r\E[?1;3;4;6l\E8,
    kDC=\E[3;2~, kEND=\E[1;2F, kHOM=\E[1;2H, kIC=\E[2;2~,
    kLFT=\E[1;2D, kNXT=\E[6;2~, kPRV=\E[5;2~, kRIT=\E[1;2C,
    kb2=\E[E, kbs=\177, kcbt=\E[Z, kcub1=\EOD, kcud1=\EOB,
    kcuf1=\EOC, kcuu1=\EOA, kdch1=\E[3~, kend=\EOF, kf1=\EOP,
    kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[1;2P,
    kf14=\E[1;2Q, kf15=\E[1;2R, kf16=\E[1;2S, kf17=\E[15;2~,
    kf18=\E[17;2~, kf19=\E[18;2~, kf2=\EOQ, kf20=\E[19;2~,
    kf21=\E[20;2~, kf22=\E[21;2~, kf23=\E[23;2~,
    kf24=\E[24;2~, kf25=\E[1;5P, kf26=\E[1;5Q, kf27=\E[1;5R,
    kf28=\E[1;5S, kf29=\E[15;5~, kf3=\EOR, kf30=\E[17;5~,
    kf31=\E[18;5~, kf32=\E[19;5~, kf33=\E[20;5~,
    kf34=\E[21;5~, kf35=\E[23;5~, kf36=\E[24;5~,
    kf37=\E[1;6P, kf38=\E[1;6Q, kf39=\E[1;6R, kf4=\EOS,
    kf40=\E[1;6S, kf41=\E[15;6~, kf42=\E[17;6~,
    kf43=\E[18;6~, kf44=\E[19;6~, kf45=\E[20;6~,
    kf46=\E[21;6~, kf47=\E[23;6~, kf48=\E[24;6~,
    kf49=\E[1;3P, kf5=\E[15~, kf50=\E[1;3Q, kf51=\E[1;3R,
    kf52=\E[1;3S, kf53=\E[15;3~, kf54=\E[17;3~,
    kf55=\E[18;3~, kf56=\E[19;3~, kf57=\E[20;3~,
    kf58=\E[21;3~, kf59=\E[23;3~, kf6=\E[17~, kf60=\E[24;3~,
    kf61=\E[1;4P, kf62=\E[1;4Q, kf63=\E[1;4R, kf7=\E[18~,
    kf8=\E[19~, kf9=\E[20~, kfnd=\E[1~, khome=\EOH,
    kich1=\E[2~, kind=\E[1;2B, kmous=\E[M, knp=\E[6~,
    kpp=\E[5~, kri=\E[1;2A, kslt=\E[4~, meml=\El, memu=\Em,
    op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM, ritm=\E[23m,
    rmacs=^O, rmam=\E[?7l, rmcup=\E[2J\E[?47l\E8, rmir=\E[4l,
    rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m, rs1=\Ec,
    rs2=\E7\E[r\E8\E[m\E[?7h\E[!p\E[?1;3;4;6l\E[4l\E>\E[?1000l\E[?25h,
    sc=\E7, setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
    sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p5%t;2%;%?%p7%t;8%;%?%p1%p3%|%t;7%;m%?%p9%t\016%e\017%;,
    sgr0=\E[0m\017, sitm=\E[3m, smacs=^N, smam=\E[?7h,
    smcup=\E7\E[?47h, smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m,
    smul=\E[4m, tbc=\E[3g, u6=\E[%i%d;%dR, u7=\E[6n,
    u8=\E[?%[;0123456789]c, u9=\E[c, vpa=\E[%i%p1%dd,

Ответ 6

Для тех, кто не получает правильных результатов, кроме упомянутых языков, если вы используете С# для печати текста в окне консоли (терминала), вам следует заменить "\ 033" на "\ x1b". В Visual Basic это будет Chrw (27).