Список цветовых escape-последовательностей ANSI - PullRequest
155 голосов
/ 30 января 2011

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

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

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

Ответы [ 6 ]

326 голосов
/ 19 октября 2015

Требуемые 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).

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

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

╔══════════╦════════════════════════════════╦═════════════════════════════════════════════════════════════════════════╗
║  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 цветов (интерлюдия)

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

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

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

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

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

Chinese vs English colour names. Image adapted from

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

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 ".

49 голосов
/ 30 января 2011

Эта страница содержит большое резюме:

ANSI Escape-последовательности

12 голосов
/ 30 января 2011

Как насчет:

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

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

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

8 голосов
/ 11 декабря 2013
4 голосов
/ 16 марта 2016

Это относится абсолютно к вашему терминалу.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,
0 голосов
/ 23 мая 2019

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

...