Codici di escape ANSI

metodo che utilizza dei caratteri di controllo per gestire la formattazione, il colore e altre opzioni di output sui terminali di testo video
(Reindirizzamento da Sequenza 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.

Testo con diversi caratteri formattati in standard ANSI visualizzato su GNOME Terminal

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

modifica

Codici di controllo

modifica

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)

modifica

I Select Graphic Rendition (SGR) imposta gli attributi di visualizzazione. È possibile impostare più attributi nella stessa sequenza, separati da punto e virgola.[1] Ciascun attributo di visualizzazione rimane attivo fino a quando una successiva occorrenza di SGR non lo ripristina.[2] 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]
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.[4][5]
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[6]
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,[7] mentre disabilita l'intensità in grassetto su diversi terminali, come nella console del kernal Linux prima della versione 4.17.[8]
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.[9]
52 Circondato
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[10]
100–107 Imposta un colore di sfondo più chiaro

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[N 1] Windows XP
Console
[N 2]
Windows
PowerShell
[N 3]
Visual Studio Code[N 4] Windows 10
Console
[N 5]
Terminal.app PuTTY mIRC xterm Ubuntu[N 6] Terminale di Eclipse
30 40 Nero 0, 0, 0 12, 12, 12 0, 0, 0 1, 1, 1 0, 0, 0
31 41 Rosso 170, 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 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[N 7] 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 36, 114, 200 0, 55, 218 73, 46, 225 0, 0, 187 0, 0, 127 0, 0, 238[11] 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 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 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 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 241, 76, 76 231, 72, 86 252, 57, 31 255, 85, 85 255, 0, 0
92 102 Verde chiaro 85, 255, 85 0, 255, 0 35, 209, 139 22, 198, 12 49, 231, 34 85, 255, 85 0, 252, 0 0, 255, 0
93 103 Giallo chiaro 255, 255, 85 255, 255, 0 245, 245, 67 249, 241, 165 234, 236, 35 255, 255, 85 255, 255, 0
94 104 Blu chiaro 85, 85, 255 0, 0, 255 59, 142, 234 59, 120, 255 88, 51, 255 85, 85, 255 0, 0, 252 92, 92, 255[11] 0, 0, 255 92, 92, 255
95 105 Magenta chiaro 255, 85, 255 255, 0, 255 214, 112, 214 180, 0, 158 249, 53, 248 255, 85, 255 255, 0, 255
96 106 Ciano chiaro 85, 255, 255 0, 255, 255 41, 184, 219 97, 214, 214 20, 240, 240 85, 255, 255 0, 255, 255
97 107 Bianco chiaro 255, 255, 255 229, 229, 229 242, 242, 242 233, 235, 235 255, 255, 255
Note
  1. ^ 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.
  2. ^ Presente da Windows XP a Windows 8.1
  3. ^ Fino a PowerShell 6
  4. ^ Console di debug, tema "Dark+"
  5. ^ Tema Campbell, utilizzato a partire da Windows 10 versione 1709. Utilizzato anche da PowerShell 6.
  6. ^ Per terminali virtuali, da /etc/vtrgb.
  7. ^ 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.
  1. ^ (EN) console_codes(4) - Linux manual page, su man7.org. URL consultato il 23 marzo 2018.
  2. ^ ECMA-48.
  3. ^ Bug 791596 – Thoughts about faint (SGR 2), su bugzilla.gnome.org.
  4. ^ (EN) Curly and colored underlines (#6382) · Issues · George Nachman / iterm2, su GitLab.
  5. ^ (EN) Extensions to the xterm protocol, su kitty documentation. URL consultato il 1º luglio 2020.
  6. ^ (EN) console-termio-realizer (XML), su jdebp.uk.
  7. ^ ECMA-48, 8.3.117.
  8. ^ (EN) console_codes(4), in Linux Programmer's Manual 5.10, Linux man-pages project.
  9. ^ (EN) mintty/mintty: Text attributes and rendering, su GitHub.
  10. ^ (EN) Edward Moy, StephenGildea e Thomas Dickey, XTerm Control Sequences (ctlseqs), su Invisible Island, 2019.
  11. ^ a b Cambiato da 0, 0, 205 a giugno 2004 (EN) Patch #192 – 2004/7/12 – XFree86 4.4.99.9, su invisible-island.net.

Bibliografia

modifica

Collegamenti esterni

modifica
  • (EN) screen(HW), in SCO OpenServer Release 5.0.7. URL consultato il 7 febbraio 2022.
  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica
  NODES