Список цветовых escape-последовательностей ANSI

225

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

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

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

ThiefMaster
источник
На самом деле, вы можете использовать цвета в Windows CMD. stackoverflow.com/questions/41207496/…
Джоэл
И из MSDN
Джоэл

Ответы:

512

Требуемые 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 цветов фона и переднего плана, используемые для них различными эмуляторами терминала:

Таблица цветов ANSI, реализованных различными эмуляторами терминала

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

\033[31;42m

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

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

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

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

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

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

Китайские и английские названия цветов.  Изображение адаптировано из "muyueh.com"

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

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

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

256-битный цветовой режим для escape-последовательностей ANSI

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

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

Это печатает

Простые цвета ANSI

Ричард
источник
4
Полный набор управляющих кодов ANSI: ascii-table.com/ansi-escape-sequence-vt-100.php
formixian
3
@giusti: echo -e "\033[38;05;34;1mHi"и то, и другое echo -e "\033[38;05;34m\033[1mHi"работало для меня, хотя эффекты сглаживания шрифтов действительно приводили к тому, что появление цвета немного изменилось под жирным шрифтом в терминале, на котором я тестировал это.
Ричард
4
\033[Коды SGR ( ), начинающиеся с 38 и 48, должны быть отделены от других, зарезервированных :в качестве суб-разделителя, хотя это не совсем понятно из первоисточников: ecma-international.org/publications/files/ECMA-ST/Ecma -048.pdf и itu.int/rec/… . Также некоторые интерпретации забывают Id цветового пространства в формах 2(16M-цвет RGB) / 3(16M-цвет CMY) / 4(??? CMYK) - например, это должно быть \033[38:2::255:255:255mдля белого 16M переднего плана, а не \033[38:2:255:255:255m!
SlySven
2
Причина, по которой я продолжаю в этом, заключается в том, что проект Mudlet, для которого я пишу код, должен обрабатывать обе формы, и недавно я поднялся в этом
вопросе,
4
Я просто хотел найти список цветов ANSI и потратил слишком много времени на чтение статей об «основных цветовых терминах». Спасибо за большое отвлечение! :)
mzuther
14

Как насчет:

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

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

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

sinelaw
источник
4

Это связано абсолютно с вашим терминалом. ВТЭ не поддерживает мигать, если вы используете gnome-terminal, tilda, guake, terminator, xfce4-terminalи так далее в соответствии с ВТЭ, Вы не моргнуть.
Если вы используете или хотите использовать мигание на 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,
Персидский залив
источник
В VTE 0.52 / gnome-терминал 3.28 добавлена ​​поддержка мерцания текста (поэтому он будет работать и в других эмуляторах на основе VTE).
egmont
1

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

HolyRandom
источник