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

Sur la plupart des terminaux (à l’exception de Windows cmd.exe, bien sûr), il est possible de colorer les sorties à l’aide de la séquence d’échappement ANSI \033 .

Maintenant, je cherche une liste de toutes les couleurs et options sockets en charge (comme shiny et clignotant).

Comme il existe probablement des différences entre les terminaux qui les supportent: je suis principalement intéressé par les séquences sockets en charge par les terminaux compatibles xterm.

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

 \033[XXXm 

XXX est une série de parameters séparés par des points-virgules.

Pour dire, mettez le texte en rouge, en gras et souligné (nous discuterons de nombreuses autres options ci-dessous) dans 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 ( 0 ).

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

Effets de police

 ╔══════════╦════════════════════════════════╦═════════════════════════════════════════════════════════════════════════╗ ║ Code ║ Effect ║ Note ║ ╠══════════╬════════════════════════════════╬═════════════════════════════════════════════════════════════════════════╣ ║ 0 ║ Reset / Normal ║ all atsortingbutes 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 atsortingbutes 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 avez déjà ça!

Couleurs 4 bits

Les normes implémentant 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 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 créer du texte rouge sur un fond vert (mais pourquoi?) En utilisant:

 \033[31;42m 

11 couleurs (une interlude)

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

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

  1. Toutes les langues contiennent des termes pour le noir (couleurs froides) et le 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 le vert ou le jaune (mais pas les deux).
  4. Si une langue contient cinq termes, elle contient des termes à la fois verts et jaunes.
  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 pour violet, rose, orange ou gris.

C'est peut-être pourquoi l'histoire Beowulf ne contient que les couleurs noir, blanc et rouge. Il se peut aussi que la Bible ne contienne pas la couleur bleue. L' Odyssée d' Homère contient du noir presque 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 couleur distincts utilisés par l'anglais contre le chinois. Cependant, approfondir ces langues montre que chacun utilise la couleur de manière distincte. ( Plus d'informations )

Noms de couleur chinois vs anglais. Image adaptée de

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

8 bits (256) couleurs

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

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

En utilisant ces éléments, vous pouvez créer un texte rose comme ceci:

 \033[38;5;206m #That is, \033[38;5;m 

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

 \033[48;5;57m #That is, \033[48;5;m 

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

 \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

Nous vivons maintenant dans le futur et le spectre RVB complet est disponible en utilisant:

 \033[38;2;;;m #Select RGB foreground color \033[48;2;;;m #Select RGB background color 

Donc, vous pouvez mettre du texte rosâtre sur un fond brun 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 ".

Cette page a un bon résumé:

ANSI Escape séquences

Que diriez-vous:

ECMA-48 – Fonctions de commande pour les jeux de caractères codés, 5ème édition (juin 1991) – Norme définissant les codes de contrôle des couleurs, apparemment également supscope par xterm.

Les SGR 38 et 48 ont été à l’origine réservés par l’ECMA-48, mais ont été étoffés quelques années plus tard dans une norme commune ITU, IEC et ISO, qui se décline en plusieurs parties et qui (parmi beaucoup d’autres choses) 38/48 séquences de contrôle pour la couleur directe et la couleur indexée :

  • Technologies de l’information – Architecture de document ouverte (ODA) et format d’échange: structures de document . T.412. Union internationale des télécommunications.
  • Technologies de l’information – Architecture de document ouverte (ODA) et format d’échange: architectures de contenu de caractères . T.416. Union internationale des télécommunications.
  • Technologies de l’information – Architecture de document ouverte (ODA) et format d’échange: architectures de contenu de caractères . ISO / IEC 8613-6: 1994. Organisation internationale de normalisation.

Il y a une colonne pour xterm dans cette table sur la page Wikipedia pour les codes d’échappement ANSI

C’est absolument lié à votre terminal. VTE ne supporte pas le clignotement, Si vous utilisez gnome-terminal , tilda , guake , terminator , xfce4-terminal , etc.
Si vous souhaitez utiliser le clignotement sur VTE, vous devez utiliser la commande 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,