Vai al contenuto

Codici di escape ANSI

Un codice di escape ANSI è una breve sequenza di caratteri che un programma stampa per dire al terminale di fare qualcosa di diverso da mostrarli — rendere le prossime parole rosse, spostare il cursore su due righe, cancellare lo schermo. Il terminale inghiotte la sequenza e agisce, per questo un file di log pieno di questi codici sembra rumore quando lo apri in un editor.

Ogni codice sotto inizia con il byte di escape e, con un'eccezione, una parentesi quadra di apertura. La colonna del parametro fornisce la parte tra la parentesi e la lettera finale, il pezzo che assembli nel codice; la prima colonna mostra l'intera sequenza come la scriveresti in una shell.

Il supporto varia tra i terminali e questa pagina lo dice dove importa. Gli otto colori di base e il grassetto funzionano ovunque; il lampeggiamento, il doppio sottolineatura e il colore vero no.

Anatomia di una sequenza

6

Ogni codice su questa pagina ha la stessa forma: il byte di escape, una parentesi quadra di apertura, alcuni parametri e una lettera che dice cosa farne.

SequenzaParametroEffetto
\e0x1BIl byte di escape che inizia ogni sequenzaScritto \e in una shell, \033 in C, \x1b nella maggior parte dei linguaggi e \u001b in JSON e Java.
\e[CSIControl Sequence Introducer — apre un comando parametrizzato
\e[<n>mmSelect Graphic Rendition: tutto ciò che riguarda il colore e lo stile termina con m
\e[1;4;31m1;4;31Diversi parametri alla volta, separati da punti e virgolaGrassetto, sottolineato e rosso in una sequenza — più breve di tre separate e identico nell'effetto.
\e[0m0Cancella ogni attributo torna al valore predefinito del terminaleEmetti questo alla fine dell'output colorato. Un programma che esce senza di esso lascia il prompt dell'utente colorato.
\e]8;;URL\e\\text\e]8;;\e\\OSC 8Un collegamento ipertestuale cliccabile, nei terminali che lo supportanoUna sequenza OSC piuttosto che una CSI e terminata da ESC \ invece di una lettera.

Attributi di testo

14

Il supporto è irregolare al di sotto dei primi cinque. Il lampeggiamento è ignorato quasi ovunque e alcuni terminali rendono il dim e l'italico identicamente.

SequenzaParametroEffetto
\e[1m1Grassetto o brillante
\e[2m2Attenuato
\e[3m3Italico
\e[4m4Sottolineato
\e[5m5LampeggiamentoAmpiamente ignorato; i terminali moderni lo rendono come testo semplice.
\e[7m7Inverso: scambia primo piano e sfondo
\e[8m8Nascosto: il testo c'è ma non è disegnato
\e[9m9Barrato
\e[21m21Doppio sottolineaturaAlcuni terminali leggono 21 come "disattiva grassetto".
\e[22m22Intensità normale: cancella grassetto e attenuato
\e[23m23Cancella italico
\e[24m24Cancella sottolineatura
\e[27m27Cancella inverso
\e[29m29Cancella barrato

Colore del testo

17

Gli otto colori standard e i loro equivalenti brillanti. Quello che il lettore vede effettivamente è l'interpretazione del suo tema terminale — il "rosso" è uno slot in una tavolozza, non un valore esadecimale.

SequenzaParametroEffetto
\e[30m30Testo nero
\e[31m31Testo rosso
\e[32m32Testo verde
\e[33m33Testo giallo
\e[34m34Testo blu
\e[35m35Testo magenta
\e[36m36Testo ciano
\e[37m37Testo bianco
\e[39m39Torna al colore di testo predefinito
\e[90m90Testo nero brillante
\e[91m91Testo rosso brillante
\e[92m92Testo verde brillante
\e[93m93Testo giallo brillante
\e[94m94Testo blu brillante
\e[95m95Testo magenta brillante
\e[96m96Testo ciano brillante
\e[97m97Testo bianco brillante

Colore dello sfondo

17

La stessa tavolozza spostata di dieci. Un codice di sfondo imposta la cella dietro il testo e rimane in vigore finché non viene ripristinato.

SequenzaParametroEffetto
\e[40m40Sfondo nero
\e[41m41Sfondo rosso
\e[42m42Sfondo verde
\e[43m43Sfondo giallo
\e[44m44Sfondo blu
\e[45m45Sfondo magenta
\e[46m46Sfondo ciano
\e[47m47Sfondo bianco
\e[49m49Torna allo sfondo predefinito
\e[100m100Sfondo nero brillante
\e[101m101Sfondo rosso brillante
\e[102m102Sfondo verde brillante
\e[103m103Sfondo giallo brillante
\e[104m104Sfondo blu brillante
\e[105m105Sfondo magenta brillante
\e[106m106Sfondo ciano brillante
\e[107m107Sfondo bianco brillante

256 colori e colore vero

4

Due estensioni dello stesso meccanismo SGR. Entrambe sono ampiamente ma non universalmente supportate; un terminale che non le capisce di solito ignora la sequenza piuttosto che stamparla.

SequenzaParametroEffetto
\e[38;5;<n>m38;5;nTesto nel colore della tavolozza n, 0–2550–15 sono i sedici sopra, 16–231 un cubo di colore 6×6×6, 232–255 una rampa in scala di grigi.
\e[48;5;<n>m48;5;nSfondo nel colore della tavolozza n, 0–255
\e[38;2;<r>;<g>;<b>m38;2;r;g;bTesto in un colore preciso a 24 bit
\e[48;2;<r>;<g>;<b>m48;2;r;g;bSfondo in un colore preciso a 24 bit

Movimento del cursore

11

Gli spostamenti non scorrono e non vanno a capo: un cursore già in cima allo schermo ignora una richiesta di andare verso l'alto.

SequenzaParametroEffetto
\e[<n>AASu n righe
\e[<n>BBGiù n righe
\e[<n>CCDestra n colonne
\e[<n>DDSinistra n colonne
\e[<n>EEGiù n righe, all'inizio della riga
\e[<n>FFSu n righe, all'inizio della riga
\e[<n>GGAlla colonna n della riga corrente
\e[<row>;<col>HHA una riga e colonna assoluta, contando da 1
\e[ssRicorda la posizione del cursore
\e[uuTorna alla posizione ricordata
\e[6n6nChiedi al terminale dove sia il cursoreIl terminale risponde sull'input standard come \e[<riga>;<colonna>R — l'unica sequenza qui che produce una risposta.

Cancellazione

7

La cancellazione scrive spazi con il colore di sfondo corrente; non sposta il cursore.

SequenzaParametroEffetto
\e[0J0JCancella dal cursore alla fine dello schermo
\e[1J1JCancella dall'inizio dello schermo al cursore
\e[2J2JCancella l'intero schermoIl cursore rimane dove era, per questo di solito si abbina a \e[H.
\e[3J3JCancella anche lo storico di scorrimento
\e[0K0KCancella dal cursore alla fine della riga
\e[1K1KCancella dall'inizio della riga al cursore
\e[2K2KCancella l'intera riga\r\e[2K è il modo usuale per ridisegnare una riga di progresso in posizione.

Modalità terminale

8

Modalità private, contrassegnate dal punto interrogativo. Cambiano il comportamento del terminale piuttosto che l'aspetto di un pezzo di testo, e ognuna deve essere disattivata prima che il programma termini.

SequenzaParametroEffetto
\e[?25l?25lNascondi il cursore
\e[?25h?25hMostra il cursore
\e[?1049h?1049hPassa allo schermo alternativoQuello che usa un programma a schermo intero per far sopravvivere lo storico della shell sotto di esso.
\e[?1049l?1049lTorna allo schermo principale
\e[?7h?7hAvvolgi le righe lunghe al bordo destro
\e[?7l?7lLascia che le righe lunghe fuoriescono dal bordo destro
\e[?2004h?2004hAbilita incolla tra parentesiIl testo incollato arriva avvolto in \e[200~ e \e[201~, così una shell può distinguere la digitazione dall'incollaggio.
\e[?2004l?2004lDisabilita incolla tra parentesi

FAQ

Perché l'output rimane colorato dopo la fine del programma?
Perché nulla lo ha ripristinato. Un codice di colore rimane in vigore finché un altro non lo sostituisce, quindi un programma che esce a metà colore lascia la shell con un prompt colorato. Stampa \e[0m prima di uscire — anche sul percorso dell'errore, che è quello che le persone dimenticano.
Qual è la differenza tra \e, \033 e \x1b?
Nessuna. Tutti e tre sono lo stesso byte, 0x1B, scritto nel modo in cui un linguaggio particolare lo scrive: \e in bash e zsh, \033 in C e in echo -e, \x1b in Python, Go, Rust e JavaScript, \u001b dove è consentito solo un escape Unicode, come JSON e Java.
Come le rimuovo da un file di log?
Incollalo nello strumento di rimozione ANSI su questo sito. Rimuove i codici di colore, cursore e modalità e può anche convertire i colori in HTML o Markdown invece di eliminarli, che è quello che vuoi se il punto del log era l'evidenziazione.
Devo codificare i colori in modo permanente o usare una libreria?
Per qualcosa di più di poche righe, usa una libreria — controlla se l'output è un terminale. I codici di colore scritti in una pipe o un file finiscono nel file, e così i log di build acquisiscono il loro rumore.
Il grassetto è lo stesso del brillante?
Storicamente sì, e su alcuni terminali ancora. Il codice 1 era definito come grassetto, ma molti terminali lo implementavano passando alla metà brillante della tavolozza, quindi il grassetto rosso e il rosso brillante possono apparire identici. L'intervallo 90–97 esiste proprio per chiedere brillante senza chiedere grassetto.