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

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

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

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


person ThiefMaster    schedule 30.01.2011    source источник
comment
На самом деле вы можете использовать цвета в cmd Windows. stackoverflow .com / questions / 41207496 /   -  person Joel    schedule 03.04.2019
comment
И из MSDN   -  person Joel    schedule 03.04.2019


Ответы (5)


Вам нужны 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-битный цветовой режим для управляющих последовательностей 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

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

Большая часть вышеперечисленного заимствована из escape-кода 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

person Richard    schedule 19.10.2015
comment
Можно ли сочетать 8-битный и полужирный? Я использую последовательность \033[38;05;34m, чтобы получить зеленый тон, но я не могу найти способ совместить это с жирным шрифтом. - person giusti; 05.04.2018
comment
@giusti: У меня работали и echo -e "\033[38;05;34;1mHi", и echo -e "\033[38;05;34m\033[1mHi", хотя эффекты шрифта сглаживания вызывали небольшое изменение цвета при выделении жирным шрифтом в терминале, на котором я это тестировал. - person Richard; 12.04.2018
comment
@ Ричард Да, это работает. Спасибо! Хитрость заключалась в том, чтобы просто поставить жирный флаг после цвета. - person giusti; 12.04.2018
comment
Коды SGR (\033[), начинающиеся с 38 и 48 должны быть разделены зарезервированным : в качестве вспомогательного разделителя, хотя это не совсем ясно из первичных источников по адресу: ecma-international.org/publications/files/ECMA-ST/Ecma-048. pdf и itu.int/rec/. Также некоторые интерпретации забывают идентификатор цветового пространства в формах 2 (16M-цветов RGB) / _ 4_ (16M-цветов CMY) / 4 (??? CMYK) - например, он должен быть \033[38:2::255:255:255m для белого переднего плана 16M, а не \033[38:2:255:255:255m! - person SlySven; 20.12.2018
comment
@SlySven правильный. \033[38;2;<r>;<g>;<b>m является стандартом де-факто, потому что xterm и kconsole были первыми, кто реализовал это таким образом, но \033[38:2::<r>:<g>:<b>m является добросовестным стандартом. Многие эмуляторы терминала поддерживают обе формы (или переходят на поддержку обеих), но не все из них поддерживают /буду. Также стоит отметить, что некоторые эмуляторы (включая xterm) используют только приблизительный (s?) Цвет RGB). старая 256-цветная палитра, поэтому полный спектр не всегда доступен. YMMV. - person Mark G.; 02.05.2019
comment
Вы вкратце упоминаете о плохих сочетаниях цветов переднего плана и фона. Я только что завершил интересное исследование цветов текста терминала, посвященное именно этой теме: cubicspot.blogspot.com/2019/05/ - person CubicleSoft; 02.05.2019
comment
Причина, по которой я говорю об этом, заключается в том, что проект Mudlet, для которого я кодирую, должен обрабатывать обе формы, и я недавно получил по локоть в этом, чтобы заставить его работать лучше ... - person SlySven; 06.05.2019
comment
@SlySven: Я бы приветствовал изменение ответа, если вы чувствуете, что можете его улучшить. - person Richard; 06.05.2019
comment
Не по теме (и спустя 4 года), но ваша интерлюдия напомнила мне об этом ответе (pfoley.public. iastate.edu/Decleapyear.htm) к ошибке в VMS некоторое время назад. Надеюсь, вам понравится чтение. - person user3742898; 16.05.2019
comment
@ user3742898 Я сделал. - person Sebastian Stark; 28.05.2019
comment
Я просто хотел найти список цветов ANSI и потратил слишком много времени на чтение статей об основных цветовых терминах. Спасибо, что отвлеклись! :) - person mzuther; 03.01.2020
comment
Вау, какой красивый и полный обзор. Спасибо, что нашли время записать это! Очень понравилось. - person Hoov; 22.02.2020
comment
@AnchithAcharya: Если вы проверите таблицу Font Effects, вы увидите, что \033[38; имеет форму \033[38;5;<n>m, а также форму «\ 033 [38; ‹r›; ‹g›; ‹b› m`. 5 не является командой. - person Richard; 10.04.2020
comment
@ Ричард Ой! Извините, я не увидел третью колонку, так как разговариваю по телефону. - person Anchith Acharya; 11.04.2020
comment
Большое вам спасибо за этот ответ; Я проголосовал за него и добавил его в закладки. - person Static; 13.08.2020

Как насчет:

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

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

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

person sinelaw    schedule 30.01.2011

Есть еще несколько интересных, а также сопутствующая информация.

person Palec    schedule 11.12.2013
comment
Гм, я отредактировал, чтобы восстановить мертвую ссылку, но я забыл, что в то время я не входил в систему, и я немного испортил форматирование (я пытался оставить старую ссылку, но вычеркнул ее) - к сожалению, я не могу получить доступ к редактированию, чтобы отредактировать его, хотя сейчас я вошел в систему ... 8-P - person SlySven; 15.07.2020
comment
Спасибо за правку, исправил. К сожалению, ссылки умирают, а ответы на основе ссылок, подобные этому, обязательно гниют. Больше не будет создавать подобных ответов, но сохранит этот, поскольку он по-прежнему в основном работает так, как ожидалось. :-) - person Palec; 20.07.2020

Это абсолютно связано с вашим терминалом. 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,
person PersianGulf    schedule 16.03.2016
comment
VTE 0.52 / gnome-terminal 3.28 добавляет поддержку мигающего текста (и поэтому он будет работать и в других эмуляторах на основе VTE). - person egmont; 12.03.2018

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

person HolyRandom    schedule 23.05.2019