Ответ 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 цветов фона и переднего плана, используемые для них различными эмуляторами терминала:
Используя вышесказанное, вы можете сделать красный текст на зеленом фоне (но почему?), Используя:
\033[31;42m
11 цветов (интерлюдия)
В своей книге "Основные цветовые термины: их универсальность и эволюция" Брент Берлин и Пол Кей использовали данные, собранные на двадцати разных языках из разных языковых семейств, для определения одиннадцати возможных основных цветовых категорий: белый, черный, красный, зеленый, желтый, синий, коричневый, фиолетовый, розовый, оранжевый и серый.
Берлин и Кей обнаружили, что в языках с числом, не превышающим максимум одиннадцати цветовых категорий, цвета следовали определенной эволюционной схеме. Этот шаблон выглядит следующим образом:
- Все языки содержат термины для черного (холодные цвета) и белого (яркие цвета).
- Если язык содержит три термина, он содержит термин для красного цвета.
- Если язык содержит четыре термина, то он содержит термин для зеленого или желтого (но не для обоих).
- Если язык содержит пять терминов, то он содержит термины как для зеленого, так и для желтого.
- Если язык содержит шесть терминов, то он содержит термин для синего цвета.
- Если язык содержит семь терминов, он содержит термин для коричневого цвета.
- Если язык содержит восемь или более терминов, то он содержит термины для фиолетового, розового, оранжевого или серого.
Возможно, поэтому история Беовульфа содержит только черный, белый и красный цвета. Возможно также, что в Библии нет синего цвета. Гомер Одиссея содержит черный почти 200 раз, а белый около 100 раз. Красный появляется 15 раз, а желтый и зеленый появляются только 10 раз. (Подробнее здесь)
Различия между языками также интересны: обратите внимание на обилие разных цветных слов, используемых в английском и китайском языках. Однако углубление в эти языки показывает, что каждый использует цвет по-разному. (Дополнительная информация)
Вообще говоря, наименование, использование и группировка цветов на человеческих языках - это увлекательно. Теперь вернемся к шоу.
8 бит (256) цветов
Технология продвинулась, и стали доступны таблицы из 256 предварительно выбранных цветов, как показано ниже.
Используя это выше, вы можете сделать розовый текст следующим образом:
\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"
Это печатает