Elenco delle sequenze di escape colore ANSI


225

Sulla maggior parte dei terminali è possibile colorare l'output usando la \033sequenza di escape ANSI.

Sto cercando un elenco di tutti i colori e le opzioni supportate (come luminose e lampeggianti).

Dato che probabilmente ci sono differenze tra i terminali che li supportano, sono principalmente interessato alle sequenze supportate da terminali compatibili con xterm.


In realtà, puoi usare i colori in windows cmd. stackoverflow.com/questions/41207496/…
Joel

E da MSDN
Joel

Risposte:


510

Le sequenze di escape ANSI che stai cercando sono il sottoinsieme Seleziona rendering grafico. Tutti questi hanno la forma

\033[XXXm

dove XXXè una serie di parametri separati da punto e virgola.

Per dire, rendi il testo rosso, grassetto e sottolineato (discuteremo molte altre opzioni di seguito) in C che potresti scrivere:

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

In C ++ useresti

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

In Python3 useresti

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

e in Bash useresti

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

dove la prima parte rende il testo rosso ( 31), grassetto ( 1), sottolineato ( 4) e l'ultima parte cancella tutto questo ( 0).

Come descritto nella tabella seguente, è possibile impostare un gran numero di proprietà di testo, quali grassetto, carattere, sottolineatura e così via. (Non è sciocco che StackOverflow non ti permetta di mettere le tabelle corrette nelle risposte?)

Effetti carattere

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

Colori a 2 bit

Lo hai già!

Colori a 4 bit

Gli standard che implementano i colori dei terminali sono iniziati con opzioni limitate (a 4 bit). La tabella seguente elenca i valori RGB dei colori di sfondo e di primo piano utilizzati per questi da una varietà di emulatori di terminali:

Tabella dei colori ANSI implementata da vari emulatori di terminali

Usando quanto sopra, puoi creare del testo rosso su uno sfondo verde (ma perché?) Usando:

\033[31;42m

11 colori (un interludio)

Nel loro libro "Termini di base del colore: la loro universalità ed evoluzione", Brent Berlin e Paul Kay hanno utilizzato i dati raccolti da venti lingue diverse da una gamma di famiglie linguistiche per identificare undici possibili categorie di colori di base: bianco, nero, rosso, verde, giallo, blu, marrone, viola, rosa, arancione e grigio.

Berlin e Kay hanno scoperto che, in lingue con meno di un massimo di undici categorie di colori, i colori hanno seguito un modello evolutivo specifico. Questo modello è il seguente:

  1. Tutte le lingue contengono termini per nero (colori freddi) e bianco (colori brillanti).
  2. Se una lingua contiene tre termini, allora contiene un termine per il rosso.
  3. Se una lingua contiene quattro termini, allora contiene un termine per verde o giallo (ma non entrambi).
  4. Se una lingua contiene cinque termini, allora contiene termini sia per il verde che per il giallo.
  5. Se una lingua contiene sei termini, allora contiene un termine per blu.
  6. Se una lingua contiene sette termini, allora contiene un termine per marrone.
  7. Se una lingua contiene otto o più termini, allora contiene termini per viola, rosa, arancione o grigio.

Questo potrebbe essere il motivo per cui la storia di Beowulf contiene solo i colori nero, bianco e rosso. Potrebbe anche essere il motivo per cui la Bibbia non contiene il colore blu. L' odissea di Omero contiene il nero quasi 200 volte e il bianco circa 100 volte. Il rosso appare 15 volte, mentre il giallo e il verde appaiono solo 10 volte. ( Maggiori informazioni qui )

Anche le differenze tra le lingue sono interessanti: nota la profusione di parole di colore distinte usate dall'inglese contro il cinese. Tuttavia, scavare più a fondo in queste lingue mostra che ognuna usa il colore in modi distinti. ( Ulteriori informazioni )

Nomi di colore cinese vs inglese.  Immagine adattata da "muyueh.com"

In generale, la denominazione, l'uso e il raggruppamento dei colori nei linguaggi umani è affascinante. Ora, torniamo allo spettacolo.

8 bit (256) colori

Tecnologia avanzata e disponibili tabelle di 256 colori preselezionati, come mostrato di seguito.

Modalità colore a 256 bit per sequenze di escape ANSI

Usando questi sopra, puoi creare un testo rosa in questo modo:

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

E crea uno sfondo blu di primo mattino usando

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

E, naturalmente, puoi combinare questi:

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

I colori a 8 bit sono disposti in questo modo:

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

TUTTI I COLORI

Ora viviamo in futuro e l'intero spettro RGB è disponibile utilizzando:

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

Quindi puoi mettere il testo rosato su uno sfondo marrone usando

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

Il supporto per terminali "true color" è elencato qui .

Gran parte di quanto sopra è tratto dalla pagina di Wikipedia " Codice di escape ANSI ".

Un pratico script per ricordare te stesso

Dato che sono spesso nella posizione di cercare di ricordare quali colori sono cosa, ho una comoda sceneggiatura chiamata ~/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"

Questo stampa

Colori ANSI semplici


4
Il set completo di codici di escape ANSI: ascii-table.com/ansi-escape-sequences-vt-100.php
formixian

3
@giusti: Sia echo -e "\033[38;05;34;1mHi"e echo -e "\033[38;05;34m\033[1mHi"lavorato per me, anche se anti-aliasing dei font effetti ha causato l'aspetto del colore per cambiare leggermente sotto grassetto nel I terminale è stato prove su.
Richard,

4
I \033[codici SGR ( ) che iniziano con 38 e 48 dovrebbero essere separati da quelli altrimenti riservati :come sotto-separatore, sebbene ciò non sia del tutto chiaro dalle fonti primarie su: ecma-international.org/publications/files/ECMA-ST/Ecma -048.pdf e itu.int/rec/… . Inoltre, alcune interpretazioni dimenticano l'ID dello spazio colore nelle forme 2(16M colori RGB) / 3(16M colori CMY) / 4(??? CMYK) - ad esempio, dovrebbe essere \033[38:2::255:255:255mper un primo piano bianco 16M e non \033[38:2:255:255:255m!
SlySven,

2
La ragione per cui proseguo su questo è che un codice di Mudlet I per il progetto deve gestire entrambi i moduli e di recente mi sono alzato ai gomiti per farlo funzionare meglio ...
SlySven

4
Volevo solo trovare un elenco di colori ANSI e ho trascorso troppo tempo a leggere articoli su "termini di colore di base". Grazie per la grande distrazione! :)
mzuther

14

Che ne dite di:

ECMA-48 - Funzioni di controllo per set di caratteri codificati, 5a edizione (giugno 1991) - Uno standard che definisce i codici di controllo del colore, apparentemente supportato anche da xterm.

SGR 38 e 48 erano originariamente riservati da ECMA-48, ma alcuni anni più tardi furono messi a punto in uno standard congiunto ITU, IEC e ISO, che viene fornito in più parti e che (tra un sacco di altre cose) documenta la SGR Sequenze di controllo 38/48 per colore diretto e colore indicizzato :

C'è una colonna per xterm in questa tabella nella pagina Wikipedia per i codici di escape ANSI



4

È assolutamente correlato al tuo terminale. VTE non supporta batter, se si utilizza gnome-terminal, tilda, guake, terminator, xfce4-terminale così via secondo VTE, Avrai si dispone di lampeggio.
Se si utilizza o si desidera utilizzare il lampeggiamento su VTE, è necessario utilizzare xterm.
È possibile utilizzare il comando infocmp con il nome del terminale:

#infocmp vt100 
#infocmp xterm 
#infocmp vte 

Per esempio :

# 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 aggiunge il supporto per il lampeggiamento del testo (e quindi funzionerà anche con altri emulatori basati su VTE).
egmont,

1

Per coloro che non ottengono risultati corretti diversi dalle lingue menzionate, se si utilizza C # per stampare un testo nella finestra della console (terminale) è necessario sostituire "\ 033" con "\ x1b ". In Visual Basic sarebbe Chrw (27) .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.