Список послідовностей виділення кольорів ANSI


225

На більшості терміналів можна розфарбувати вихід, використовуючи \033послідовність аварійної передачі ANSI.

Я шукаю список усіх підтримуваних кольорів та параметрів (наприклад, яскравих та мерехтливих).

Оскільки, ймовірно, є відмінності між терміналами, що їх підтримують, мене в основному цікавлять послідовності, підтримувані xterm-сумісними терміналами.


Насправді ви можете використовувати кольори у вікнах cmd. stackoverflow.com/questions/41207496/…
Joel

А від MSDN
Джоел

Відповіді:


510

Послідовності виходу 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).

Як описано в таблиці нижче, існує велика кількість властивостей тексту, які ви можете встановити, такі як сміливість, шрифт, підкреслення та c. (Хіба не дурно, що 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

Підтримка «True Color» терміналів вказана тут .

Значна частина вищезазначеного виведена зі сторінки Вікіпедії " АНСІ код виходу ".

Зручний сценарій, щоб нагадати про себе

Оскільки мені часто вдається спробувати запам’ятати, які кольори - що таке, у мене є зручний сценарій під назвою ~/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-sequences-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для переднього плану White 16M, а не \033[38:2:255:255:255m!
SlySven

2
Причина, з якою я продовжую це, полягає в тому, що проект Mudlet, який я кодую , повинен обробляти обидві форми, і я нещодавно встав в лікті, щоб змусити його працювати краще ...
SlySven

4
Я просто хотів знайти список кольорів ANSI і витратив занадто багато часу на читання статей на "основні кольорові терміни". Дякую за велике відволікання! :)
mzuther

14

Як щодо:

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

СРГ 38 і 48 спочатку були зарезервовані ECMA-48, але були розроблені через кілька років у спільному стандарті МСЕ, МЕК та ISO, який випускається в декількох частинах і який (серед багатьох інших речей) документує СГР 38/48 контрольних послідовностей для прямого кольору та індексованого кольору :

У цій таблиці на сторінці Вікіпедії розміщено стовпчик для xterm для кодів втечі ANSI



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-terminal 3.28 додає підтримку миготливого тексту (і тому він буде працювати і в інших емуляторах на основі VTE).
Егмонт

1

Для тих, хто не отримує належних результатів, окрім згаданих мов, якщо ви використовуєте C # для друку тексту у вікні консолі (терміналу), слід замінити "\ 033" на "\ x1b ". У Visual Basic це був би Chrw (27) .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.