<Precedenti | Contenuti | Succ.>
Aggiungere colore
La maggior parte dei programmi di emulazione di terminale risponde a determinate sequenze di caratteri non stampabili per controllare aspetti come gli attributi dei caratteri (come il colore, il grassetto e il temuto testo lampeggiante) e la posizione del cursore. Tratteremo la posizione del cursore tra poco, ma prima diamo un'occhiata al colore.
Confusione terminale
Nell'antichità, quando i terminali venivano collegati a computer remoti, esistevano molte marche di terminali concorrenti e funzionavano tutti in modo diverso. Avevano tastiere diverse e avevano tutti modi diversi di interpretare le informazioni di controllo. I sistemi Unix e simili a Unix hanno due sottosistemi piuttosto complessi per gestire la babele del controllo dei terminali (chiamati termcap e terminfo). Se guardi nei recessi più profondi delle impostazioni del tuo emulatore di terminale potresti trovare un'impostazione per il tipo di emulazione di terminale.
Nel tentativo di far parlare i terminali in un linguaggio comune, l'American National Standards Institute (ANSI) ha sviluppato un set standard di sequenze di caratteri per controllare i terminali video. I vecchi utenti DOS ricorderanno il AN-SI.SYS file utilizzato per consentire l'interpretazione di questi codici.
Il colore del carattere è controllato inviando all'emulatore di terminale un Codice di escape ANSI incorporato nel flusso di caratteri da visualizzare. Il codice di controllo non viene "stampato" sul display, ma viene interpretato dal terminale come un'istruzione. Come abbiamo visto nella tabella sopra, il \[ e \] Le sequenze vengono utilizzate per incapsulare caratteri non stampabili. Un codice di escape ANSI inizia con un ottale 033 (il codice generato dal tasto Esc), seguito da un attributo carattere opzionale, seguito da un'istruzione. Ad esempio, il codice per impostare il colore del testo su normale (attributo = 0), testo nero è:
\033[0;30m
Ecco una tabella dei colori di testo disponibili. Si noti che i colori sono divisi in due gruppi, differenziati dall'applicazione dell'attributo grassetto (1) che crea l'aspetto di colori "chiari":
Tabella 13-2: Sequenze di escape utilizzate per impostare i colori del testo
Sequenza | Colore del testo | Sequenza | Colore del testo |
\033[0;30m | Nero | \033[1;30m | Crepe Petrolio |
\033[0;31m | Rosso | \033[1;31m | Luce rossa |
\033[0;32m | Verde | \033[1;32m | Green Light |
\033[0;33m | Marrone | \033[1;33m | Giallo |
\033[0;34m | Blu | \033[1;34m | Azzurro |
\033[0;35m | Viola | \033[1;35m | Viola chiaro |
Aggiungere colore
\033[0;36m | Ciano | \033[1;36m | Ciano chiaro |
\033[0;37m | Grigio Chiaro | \033[1;37m | Bianco |
Proviamo a creare un prompt rosso. Inseriremo il codice di escape all'inizio:
$ PS1="\[\033[0;31m\]<\u@\h \W>\$ "
$
$ PS1="\[\033[0;31m\]<\u@\h \W>\$ "
$
Funziona, ma nota che tutto il testo che digitiamo dopo il prompt è anch'esso rosso. Per risolvere questo problema, aggiungeremo un altro codice di escape alla fine del prompt che indica all'emulatore di terminale di tornare al colore precedente:
$ PS1="\[\033[0;31m\]<\u@\h \W>\$\[\033[0m\] "
$
$ PS1="\[\033[0;31m\]<\u@\h \W>\$\[\033[0m\] "
$
Meglio così!
È anche possibile impostare il colore di sfondo del testo utilizzando i codici elencati di seguito. I colori di sfondo non supportano l'attributo grassetto.
Tabella 13-3: Sequenze di escape utilizzate per impostare il colore di sfondo
Sequenza | Colore di sfondo | Sequenza | Colore di sfondo |
\033[0;40m | Nero | \033[0;44m | Blu |
\033[0;41m | Rosso | \033[0;45m | Viola |
\033[0;42m | Verde | \033[0;46m | Ciano |
\033[0;43m | Marrone | \033[0;47m | Grigio Chiaro |
Possiamo creare un prompt con uno sfondo rosso applicando una semplice modifica al primo codice di escape:
$ PS1="\[\033[0;41m\]<\u@\h \W>\$\[\033[0m\] "
<me@linuxbox ~>$
$ PS1="\[\033[0;41m\]<\u@\h \W>\$\[\033[0m\] "
<me@linuxbox ~>$
Prova i codici colore e scopri cosa riesci a creare!
Nota: oltre agli attributi di carattere normale (0) e grassetto (1), al testo possono essere assegnati anche gli attributi di sottolineatura (4), lampeggiante (5) e inverso (7). Tuttavia, per motivi di buon gusto, molti emulatori di terminale si rifiutano di rispettare l'attributo lampeggiante.