Liste des séquences d'échappement de couleur ANSI

225

Sur la plupart des terminaux, il est possible de coloriser la sortie à l'aide de la \033séquence d'échappement ANSI.

Je recherche une liste de toutes les couleurs et options prises en charge (comme les couleurs vives et clignotantes).

Comme il existe probablement des différences entre les terminaux qui les prennent en charge, je m'intéresse principalement aux séquences prises en charge par les terminaux compatibles xterm.

ThiefMaster
la source
En fait, vous pouvez utiliser des couleurs dans les fenêtres cmd. stackoverflow.com/questions/41207496/…
Joel
Et de MSDN
Joel

Réponses:

510

Les séquences d'échappement ANSI que vous recherchez sont le sous-ensemble Select Graphic Rendition. Tous ces éléments ont la forme

\033[XXXm

XXXest une série de paramètres séparés par des points-virgules.

Pour dire, faites du texte rouge, gras et souligné (nous discuterons de nombreuses autres options ci-dessous) en C, vous pourriez écrire:

printf("\033[31;1;4mHello\033[0m");

En C ++, vous utiliseriez

std::cout<<"\033[31;1;4mHello\033[0m";

En Python3, vous utiliseriez

print("\033[31;1;4mHello\033[0m")

et dans Bash vous utiliseriez

echo -e "\033[31;1;4mHello\033[0m"

où la première partie rend le texte rouge ( 31), gras ( 1), souligné ( 4) et la dernière partie efface tout cela ( 0).

Comme décrit dans le tableau ci-dessous, vous pouvez définir un grand nombre de propriétés de texte, telles que l'audace, la police, le soulignement, etc. (N'est-ce pas stupide que StackOverflow ne vous permette pas de mettre des tableaux appropriés dans les réponses?)

Effets de police

╔══════════╦════════════════════════════════╦═════════════════════════════════════════════════════════════════════════╗
║  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)                                              ║
╚══════════╩════════════════════════════════╩═════════════════════════════════════════════════════════════════════════╝

Couleurs 2 bits

Vous l'avez déjà!

Couleurs 4 bits

Les normes mettant en œuvre les couleurs des terminaux ont commencé avec des options limitées (4 bits). Le tableau ci-dessous répertorie les valeurs RVB des couleurs d'arrière-plan et de premier plan utilisées pour celles-ci par divers émulateurs de terminal:

Tableau des couleurs ANSI implémentées par différents émulateurs de terminaux

En utilisant ce qui précède, vous pouvez faire du texte rouge sur fond vert (mais pourquoi?) En utilisant:

\033[31;42m

11 couleurs (un interlude)

Dans leur livre "Termes de couleur de base: leur universalité et évolution", Brent Berlin et Paul Kay ont utilisé des données collectées dans vingt langues différentes dans une gamme de familles de langues pour identifier onze catégories de couleurs de base possibles: blanc, noir, rouge, vert, jaune, bleu, marron, violet, rose, orange et gris.

Berlin et Kay ont constaté que, dans les langues avec moins de onze catégories de couleurs maximum, les couleurs suivaient un modèle évolutif spécifique. Ce schéma est le suivant:

  1. Toutes les langues contiennent des termes pour noir (couleurs froides) et blanc (couleurs vives).
  2. Si une langue contient trois termes, elle contient un terme pour le rouge.
  3. Si une langue contient quatre termes, elle contient un terme pour vert ou jaune (mais pas les deux).
  4. Si une langue contient cinq termes, elle contient des termes pour le vert et le jaune.
  5. Si une langue contient six termes, elle contient un terme pour le bleu.
  6. Si une langue contient sept termes, elle contient un terme pour brun.
  7. Si une langue contient huit termes ou plus, elle contient des termes pourpre, rose, orange ou gris.

C'est peut-être pourquoi l'histoire Beowulf ne contient que les couleurs noir, blanc et rouge. C'est peut-être aussi pourquoi la Bible ne contient pas la couleur bleue. L' Odyssée d' Homère contient du noir près de 200 fois et du blanc environ 100 fois. Le rouge apparaît 15 fois, tandis que le jaune et le vert n'apparaissent que 10 fois. ( Plus d'informations ici )

Les différences entre les langues sont également intéressantes: notez la profusion de mots de couleurs distinctes utilisés par l'anglais par rapport au chinois. Cependant, approfondir ces langues montre que chacune utilise la couleur de manière distincte. ( Plus d'informations )

Noms de couleurs chinois vs anglais.  Image adaptée de "muyueh.com"

D'une manière générale, la dénomination, l'utilisation et le regroupement des couleurs dans les langues humaines sont fascinants. Maintenant, revenons au spectacle.

Couleurs 8 bits (256)

La technologie a avancé et des tableaux de 256 couleurs présélectionnées sont devenus disponibles, comme indiqué ci-dessous.

Mode couleur 256 bits pour les séquences d'échappement ANSI

En utilisant ceux-ci ci-dessus, vous pouvez créer un texte rose comme suit:

\033[38;5;206m     #That is, \033[38;5;<FG COLOR>m

Et faites un fond bleu tôt le matin en utilisant

\033[48;5;57m      #That is, \033[48;5;<BG COLOR>m

Et, bien sûr, vous pouvez les combiner:

\033[38;5;206;48;5;57m

Les couleurs 8 bits sont disposées comme suit:

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

TOUTES LES COULEURS

Maintenant, nous vivons dans le futur, et le spectre RVB complet est disponible en utilisant:

\033[38;2;<r>;<g>;<b>m     #Select RGB foreground color
\033[48;2;<r>;<g>;<b>m     #Select RGB background color

Vous pouvez donc mettre du texte rosé sur un fond brunâtre en utilisant

\033[38;2;255;82;197;48;2;155;106;0mHello

La prise en charge des terminaux "true color" est répertoriée ici .

Une grande partie de ce qui précède est tirée de la page Wikipedia " Code d'échappement ANSI ".

Un script pratique pour vous rappeler

Comme je suis souvent dans la position d'essayer de me souvenir de quelles couleurs sont quoi, j'ai un script pratique appelé ~/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"

Ceci imprime

Couleurs ANSI simples

Richard
la source
4
L'ensemble complet des codes d'échappement ANSI: ascii-table.com/ansi-escape-sequences-vt-100.php
formixian
3
@giusti: Les deux echo -e "\033[38;05;34;1mHi"et ont echo -e "\033[38;05;34m\033[1mHi"fonctionné pour moi, bien que les effets de police anti-aliasing aient fait changer légèrement l'apparence de la couleur sous les caractères gras dans le terminal sur lequel je testais cela.
Richard
4
Les \033[codes SGR ( ) commençant par 38 et 48 doivent être séparés avec le reste réservé :comme sous-séparateur bien que cela ne soit pas tout à fait clair à partir des sources primaires sur: ecma-international.org/publications/files/ECMA-ST/Ecma -048.pdf et itu.int/rec/… . De plus, certaines interprétations oublient l'identifiant de l'espace colorimétrique sous les formes 2(16M-color RGB) / 3(16M-color CMY) / 4(??? CMYK) - par exemple, cela devrait être \033[38:2::255:255:255mpour un premier plan blanc 16M et non \033[38:2:255:255:255m!
SlySven
2
La raison pour laquelle je continue à ce sujet est qu'un projet Mudlet que je code doit gérer les deux formulaires et j'ai récemment levé les coudes pour que cela fonctionne mieux ...
SlySven
4
Je voulais juste trouver une liste de couleurs ANSI et j'ai passé beaucoup trop de temps à lire des articles sur les "termes de couleur de base". Merci pour la grande distraction! :)
mzuther
14

Que diriez-vous:

ECMA-48 - Fonctions de contrôle pour les jeux de caractères codés, 5e édition (juin 1991) - Norme définissant les codes de contrôle des couleurs, qui est apparemment également prise en charge par xterm.

Les SGR 38 et 48 étaient à l'origine réservés par l'ECMA-48, mais ont été étoffés quelques années plus tard dans une norme conjointe UIT, CEI et ISO, qui comprend plusieurs parties et qui (parmi beaucoup d'autres choses) documente le SGR 38/48 séquences de contrôle pour la couleur directe et la couleur indexée :

Il y a une colonne pour xterm dans ce tableau sur la page Wikipedia pour les codes d'échappement ANSI

sinelaw
la source
4

C'est absolument lié à votre terminal. TEV ne supporte pas cligner des yeux, si vous utilisez gnome-terminal, tilda, guake, terminator, xfce4-terminalet ainsi de suite selon TEV, vous n'aurez pas cligner des yeux.
Si vous utilisez ou souhaitez utiliser le clignotement sur VTE, vous devez utiliser xterm.
Vous pouvez utiliser la commande infocmp avec le nom du terminal:

#infocmp vt100 
#infocmp xterm 
#infocmp vte 

Par exemple :

# 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,
Golfe Persique
la source
VTE 0.52 / gnome-terminal 3.28 ajoute la prise en charge du texte clignotant (et il fonctionnera donc également dans d'autres émulateurs basés sur VTE).
egmont
1

Pour ceux qui n'obtiennent pas de résultats corrects autres que les langues mentionnées, si vous utilisez C # pour imprimer un texte dans la fenêtre de la console (terminal), vous devez remplacer "\ 033" par "\ x1b ". En Visual Basic, ce serait Chrw (27) .

HolyRandom
la source