web-dev-qa-db-fra.com

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

Sur la plupart des terminaux, il est possible de coloriser la sortie à l'aide de la séquence d'échappement \033 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 des terminaux compatibles xterm.

162
ThiefMaster

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 paramètres séparés par des points-virgules.

Pour dire, faites le texte en 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), en 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 gras, police, soulignement, etc. (N'est-ce pas stupide que StackOverflow ne vous permet pas de mettre des tableaux appropriés dans les réponses?)

Effets de polices

╔══════════╦════════════════════════════════╦═════════════════════════════════════════════════════════════════════════╗
║  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 avez déjà cela!

Couleurs 4 bits

Les normes mettant en œuvre les couleurs de terminal 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:

Table of ANSI colours implemented by various terminal emulators

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 (un interlude)

Dans leur livre "Termes de couleur de base: universalité et évolution", Brent Berlin et Paul Kay ont utilisé des données recueillies dans vingt langues différentes appartenant à différentes familles de langues afin d'identifier onze catégories de couleurs de base possibles: blanc, noir, rouge, vert, jaune, etc. 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 modèle est comme suit:

  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 vert et 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 le brun.
  7. Si une langue contient huit termes ou plus, elle contient les termes violet, rose, orange ou gris.

C'est peut-être pourquoi l'histoire Beowulf ne contient que les couleurs noir, blanc et rouge. Cela peut aussi expliquer 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, alors 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 par rapport au chinois. Cependant, approfondir ces langues montre que chacune utilise la couleur de manière distincte. ( Plus d'informations )

Chinese vs English colour names. Image adapted from "muyueh.com"

De manière générale, la dénomination, l'utilisation et le regroupement des couleurs dans les langages humains sont fascinants. Revenons maintenant au spectacle.

8 bits (256) couleurs

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

256-bit colour mode for ANSI escape sequences

En utilisant ces éléments, vous pouvez créer du texte rose comme suit:

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

Et faire 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 combiner ces éléments:

\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 avec:

\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 rose sur un fond brun en utilisant

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

Le support pour les terminaux "true color" est listé ici .

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

Un script utile pour se rappeler

Comme je suis souvent en position d'essayer de me rappeler 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"

Cela imprime

Simple ANSI colours

347
Richard

Cette page a un bon résumé:

séquences d'échappement ANSI

49
Moo-Juice

Que diriez-vous:

ECMA-48 - Fonctions de contrôle 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 prise en charge par xterm.

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

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

12
sinelaw
8
Palec

C'est absolument lié à votre terminal. La VTE ne prend pas en charge le clignotement. Si vous utilisez gnome-terminal, tilda, guake, terminator, xfce4-terminal et ainsi de suite selon VTE, vous ne le ferez pas. ont 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,
4
PersianGulf

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), remplacez "\ 033" par "\x1b ". En Visual Basic, ce serait Chrw (27).

0
HolyRandom