Codici di escape ANSI
# Codici di escape ANSI

I codici o sequenze di escape ANSI sono uno standard di segnalazione per controllare la posizione del cursore, il colore, lo stile dei caratteri e altre opzioni sui terminali di testo video e sugli emulatori di terminale. Alcune sequenze di byte, la maggior parte delle quali iniziano con un carattere di escape ASCII e un carattere parentesi, sono incorporate nel testo. Il terminale interpreta queste sequenze come comandi, anziché come testo da visualizzare alla lettera.

Le sequenze ANSI sono state introdotte negli anni 70 per sostituire le sequenze specifiche del fornitore e si sono diffuse nel mercato delle apparecchiature informatiche all'inizio degli anni 80. Sono utilizzati in applicazioni di sviluppo, scientifiche e commerciali basate su testo, nonché in sistemi di bulletin board system per offrire funzionalità standardizzate.

Sebbene i terminali hardware siano diventati sempre più rari nel 21º secolo, l'importanza dello standard ANSI persiste perché la grande maggioranza degli emulatori di terminale e delle console di comando interpreta almeno una parte dello standard ANSI.

Questa codifica di escape è standardizzata come ECMA-48, ISO/IEC 6429, FIPS 86, ANSI X3.64 e JIS X 0211.

## Descrizione

### Codici di controllo

Sebbene non facciano tecnicamente parte dello standard, quasi tutti gli utenti assumono alcune funzioni di alcuni caratteri a byte singolo. Viene utilizzato per ridurre la quantità di dati trasmessi o per eseguire alcune funzioni che non sono disponibili dalle sequenze di escape:

Codici di controllo più popolari (elenco non esaustivo) :

| ^ | C0 | Abbr | Nome | Effetto |
| - | - | - | - | - |
| ^G | 7 | BEL | Bell | Genera un segnale acustico |
| ^H | 8 | BS | Backspace | Muove il cursore a sinistra (ma può "avvolgere all'indietro" se il cursore si trova all'inizio della riga). |
| ^I | 9 | HT | Tab | Muove il cursore a destra sul multiplo successivo di 8. |
| ^J | 0x0A | LF | Line Feed | Passa alla riga successiva, scorre il display verso l'alto se si trova nella parte inferiore dello schermo. Di solito non si sposta orizzontalmente, anche se i programmi non dovrebbero fare affidamento su questo. |
| ^L | 0x0C | FF | Form Feed | Sposta una stampante all'inizio della pagina successiva. Di solito non si sposta orizzontalmente, anche se i programmi non dovrebbero fare affidamento su questo. L'effetto sui terminali video è variabile. |
| ^M | 0x0D | CR | Carriage Return | Muove il cursore alla colonna zero |
| ^[ | 0x1B | ESC | Escape | Inizia tutte le sequenze di escape |

### Parametri SGR (Select Graphic Rendition)

I Select Graphic Rendition (SGR) imposta gli attributi di visualizzazione. È possibile impostare più attributi nella stessa sequenza, separati da punto e virgola. Ciascun attributo di visualizzazione rimane attivo fino a quando una successiva occorrenza di SGR non lo ripristina. Se nessun codice viene usato, CSI m è considerato come CSI 0 m (reset / normale).

| n | Nome | Note |
| - | - | - |
| 0 | Reset o normale | Tutti gli attributi sono disattivi |
| 1 | Grassetto o maggiore intensità | |
| 2 | Debole, intensità ridotta, o attenuato | Può essere implementato come un carattere fine. |
| 3 | Corsivo | Non ampiamente supportato. A volte trattato come inverso o lampeggiante. |
| 4 | Sottolineato | Esistono estensioni per questo stile per Kitty, VTE, mintty e iTerm2. |
| 5 | Lampeggiamento lento | Imposta il lampeggiamento a meno di 150 volte al minuto |
| 6 | Lampeggiamento veloce | MS-DOS ANSI.SYS, 150+ al minuto. Non ampiamente supportato. |
| 7 | Invertito | Scambia i colori di primo piano e di sfondo; emulazione incoerente |
| 8 | Occulta o nascondi | Non ampiamente supportato. |
| 9 | Barrato | Caratteri leggibili ma contrassegnati come per la cancellazione. Non supportato in Terminal.app |
| 10 | Font (predefinito) primario | |
| 11–19 | Font alternativo | Imposta un font alternativo |
| 20 | Fraktur (Gothic) | Raramente supportato |
| 21 | Doppiamente sottolineato; oppure: non in grassetto | Doppiamente sottolineato per ECMA-48, mentre disabilita l'intensità in grassetto su diversi terminali, come nella console del kernal Linux prima della versione 4.17. |
| 22 | Intensità normale | Né grassetto né tenue; il colore cambia dove l'intensità è implementata come tale. |
| 23 | Né corsivo, né stile gotico | |
| 24 | Non sottolineato | Né singolarmente né doppiamente sottolineato |
| 25 | Non lampeggiante | Disattiva il lampeggiamento |
| 26 | Spaziatura proporzionale | ITU T.61 e T.416, non noto per essere utilizzato sui terminali |
| 27 | Non invertito | |
| 28 | Rivela | Non nascosto |
| 29 | Non barrato | |
| 30–37 | Imposta il colore di primo piano | |
| 38 | Imposta il colore di primo piano a 8 bit | Gli argomenti successivi sono 5;n o 2;r;g;b |
| 39 | Colore di primo piano predefinito | Implementazione definita (secondo standard) |
| 40–47 | Imposta il colore di sfondo | |
| 48 | Imposta il colore di sfondo a 8 bit | Gli argomenti successivi sono 5;n o 2;r;g;b |
| 49 | Colore di sfondo predefinito | Implementazione definita (secondo standard) |
| 50 | Disabilita la spaziatura proporzionale | T.61 e T.416 |
| 51 | Incorniciato | Implementato come selettore di variazione delle emoji in mintty. |
| 52 | Circondato | Implementato come selettore di variazione delle emoji in mintty. |
| 53 | Sovralineato | Non supportato da Terminal.app |
| 54 | Né incorniciato o circondato |
| 55 | Non sovralineato |
| 90–97 | Imposta il colore di primo piano più chiaro | Non standard; originariamente implementato da aixterm |
| 100–107 | Imposta un colore di sfondo più chiaro | Non standard; originariamente implementato da aixterm |

### Colori

La specifica originale aveva solo 8 colori e dava loro solo dei nomi. I parametri SGR 30–37 selezionavano il colore di primo piano, mentre 40–47 selezionavano lo sfondo. Molti terminali hanno implementato il "grassetto" (codice SGR 1) come un colore più luminoso piuttosto che un carattere diverso, fornendo così 8 colori di primo piano aggiuntivi. Di solito non è possibile ottenerli come colori di sfondo, anche se a volte il video inverso (codice SGR 7) lo consente. Esempi: per ottenere lettere nere su sfondo bianco utilizzare ESC[30;47m, per ottenere il rosso utilizzare ESC[31m, per ottenere un rosso brillante utilizzare ESC[1;31m. Per ripristinare i colori ai valori predefiniti, utilizzare ESC[39;49m (non supportato su alcuni terminali) o ripristinare tutti gli attributi con ESC[0m. I terminali più moderno hanno aggiunto la possibilità di specificare direttamente i colori "brillanti" con 90–97 e 100–107.

Quando l'hardware ha iniziato a utilizzare convertitori digitale-analogico (DAC) a 8 bit, diversi software hanno assegnato numeri di colore a 24 bit a questi nomi. La tabella seguente mostra i valori predefiniti inviati al DAC per alcuni hardware e software comuni

| FG | BG | Nome | VGA | Windows XP Console | Windows PowerShell | Visual Studio Code | Windows 10 Console | Terminal.app | PuTTY | mIRC | xterm | Ubuntu | Terminale di Eclipse |
| - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| 30 | 40 | Nero | 0, 0, 0 | 0, 0, 0 | 0, 0, 0 | 0, 0, 0 | 12, 12, 12 | 0, 0, 0 | 0, 0, 0 | 0, 0, 0 | 0, 0, 0 | 1, 1, 1 | 0, 0, 0 |
| 31 | 41 | Rosso | 170, 0, 0 | 128, 0, 0 | 128, 0, 0 | 205, 49, 49 | 197, 15, 31 | 194, 54, 33 | 187, 0, 0 | 127, 0, 0 | 205, 0, 0 | 222, 56, 43 | 205, 0, 0 |
| 32 | 42 | Verde | 0, 170, 0 | 0, 128, 0 | 0, 128, 0 | 13, 188, 121 | 19, 161, 14 | 37, 188, 36 | 0, 187, 0 | 0, 147, 0 | 0, 205, 0 | 57, 181, 74 | 0, 205, 0 |
| 33 | 43 | Giallo | 170, 85, 0 | 128, 128, 0 | 238, 237, 240 | 229, 229, 16 | 193, 156, 0 | 173, 173, 39 | 187, 187, 0 | 252, 127, 0 | 205, 205, 0 | 255, 199, 6 | 205, 205, 0 |
| 34 | 44 | Blu | 0, 0, 170 | 0, 0, 128 | 0, 0, 128 | 36, 114, 200 | 0, 55, 218 | 73, 46, 225 | 0, 0, 187 | 0, 0, 127 | 0, 0, 238 | 0, 111, 184 | 0, 0, 238 |
| 35 | 45 | Magenta | 170, 0, 170 | 128, 0, 128 | 1, 36, 86 | 188, 63, 188 | 136, 23, 152 | 211, 56, 211 | 187, 0, 187 | 156, 0, 156 | 205, 0, 205 | 118, 38, 113 | 205, 0, 205 |
| 36 | 46 | Ciano | 0, 170, 170 | 0, 128, 128 | 0, 128, 128 | 17, 168, 205 | 58, 150, 221 | 51, 187, 200 | 0, 187, 187 | 0, 147, 147 | 0, 205, 205 | 44, 181, 233 | 205, 0, 205 |
| 37 | 47 | Bianco | 170, 170, 170 | 192, 192, 192 | 192, 192, 192 | 229, 229, 229 | 204, 204, 204 | 203, 204, 205 | 187, 187, 187 | 210, 210, 210 | 229, 229, 229 | 204, 204, 204 | 229, 229, 229 |
| 90 | 100 | Nero chiaro (grigio) | 85, 85, 85 | 128, 128, 128 | 128, 128, 128 | 102, 102, 102 | 118, 118, 118 | 129, 131, 131 | 85, 85, 85 | 127, 127, 127 | 127, 127, 127 | 128, 128, 128 | 0, 0, 0 |
| 91 | 101 | Rosso chiaro | 255, 85, 85 | 255, 0, 0 | 255, 0, 0 | 241, 76, 76 | 231, 72, 86 | 252, 57, 31 | 255, 85, 85 | 255, 0, 0 | 255, 0, 0 | 255, 0, 0 | 255, 0, 0 |
| 92 | 102 | Verde chiaro | 85, 255, 85 | 0, 255, 0 | 0, 255, 0 | 35, 209, 139 | 22, 198, 12 | 49, 231, 34 | 85, 255, 85 | 0, 252, 0 | 0, 255, 0 | 0, 255, 0 | 0, 255, 0 |
| 93 | 103 | Giallo chiaro | 255, 255, 85 | 255, 255, 0 | 255, 255, 0 | 245, 245, 67 | 249, 241, 165 | 234, 236, 35 | 255, 255, 85 | 255, 255, 0 | 255, 255, 0 | 255, 255, 0 | 255, 255, 0 |
| 94 | 104 | Blu chiaro | 85, 85, 255 | 0, 0, 255 | 0, 0, 255 | 59, 142, 234 | 59, 120, 255 | 88, 51, 255 | 85, 85, 255 | 0, 0, 252 | 92, 92, 255 | 0, 0, 255 | 92, 92, 255 |
| 95 | 105 | Magenta chiaro | 255, 85, 255 | 255, 0, 255 | 255, 0, 255 | 214, 112, 214 | 180, 0, 158 | 249, 53, 248 | 255, 85, 255 | 255, 0, 255 | 255, 0, 255 | 255, 0, 255 | 255, 0, 255 |
| 96 | 106 | Ciano chiaro | 85, 255, 255 | 0, 255, 255 | 0, 255, 255 | 41, 184, 219 | 97, 214, 214 | 20, 240, 240 | 85, 255, 255 | 0, 255, 255 | 0, 255, 255 | 0, 255, 255 | 0, 255, 255 |
| 97 | 107 | Bianco chiaro | 255, 255, 255 | 255, 255, 255 | 255, 255, 255 | 229, 229, 229 | 242, 242, 242 | 233, 235, 235 | 255, 255, 255 | 255, 255, 255 | 255, 255, 255 | 255, 255, 255 | 255, 255, 255 |

**Note**

* ↑ Colori tipici utilizzati all'avvio dei PC e lasciati in modalità testo, che utilizzava una tabella di colori a 16 voci. I colori sono diversi nelle modalità grafiche EGA/VGA.
* ↑ Presente da Windows XP a Windows 8.1
* ↑ Fino a PowerShell 6
* ↑ Console di debug, tema "Dark+"
* ↑ Tema Campbell, utilizzato a partire da Windows 10 versione 1709. Utilizzato anche da PowerShell 6.
* ↑ Per terminali virtuali, da /etc/vtrgb.
* ↑ Nei terminali basati su hardware compatibilie con CGA, come anche ANSI.SYS su DOS, questo colore di primo piano di intensità normale viene visualizzato come arancione. I monitor CGA RGBI contengono dei circuiti per modificare il colore giallo scuro in un colore arancione/marrone riducendo la componente verde. Vedi (EN) ansi art, su sixteencolors.net (archiviato dall'url originale il 25 luglio 2011). come esempio.
