Creare CD - Copertina - Joe |
Articoli
Una delle domande che probabilmente ci si pone quando si installa Linux è come fare per cambiare i colori di default della console.
I vari aspetti della questione sono esposti in un documento che tutti co noscono (almeno credo) e che prende il nome di Colours-ls.
Considerato che questo mostra in maniera un po' frammentaria come costruire ed utilizzare una sequenza di escape, ho ritenuto utile illustrare alcune possibilità di impiego, anche avvalendomi di esempi pratici.
ESC [
Nr.Colore_primo_piano;
Nr.Colore_fondo;
NUMEROm
Il ``NUMERO'' che precede la ``m
'' alla fine del
comando consente svariate combinazioni, vediamo le principali:
0 = Default 1 = Colore Evidente 2 = Sottotraccia 3 = Colore Normale 4 = Sottotraccia 5 = Colore In Primo Piano Lampeggiante 7 = Reverse (Il colore in primo piano diventa di fondo e viceversa.
Numeri dei colori In Primo Piano:
l = Luminoso Nero=30 Grigio=30;1m Rosso=31 Rosso_l=31;1m Verde=32 Verde_l=32;1m Marrone=33 Giallo=33;1m Blu=34 Blu_l=34;1m Viola=35 Viola_l=35;1m Celeste=36 Celeste_l=36;1m Bianco=37 Bianco_l=371m
Numeri dei colori di fondo:
Nero=40 Rosso=41 Verde=42 Marrone=43 Blu=44 Viola=45 Celeste=46 Grigio=47
Per esempio:
echo -e "\033[33;44;1m Linux \033[0m"
# Giallo su fondo Blu
echo -e "\033[33;44;3m Linux \033[0m"
# Marrone su fondo Blu
Nel primo caso, il colore in primo piano è Giallo ed il fondo Blu, nel secondo invece abbiamo Marrone su Blu.
L'opzione ``-e
'' consente al comando ``echo
di
interpretare correttamente i codici di escape, tuttavia considerato che
questo non avviene in tutte le shell si può decidere di usare
``printf
'':
printf "\033[31;44;1m Rosso Luminoso Su Blu \033[0m"
In questo altro esempio troviamo la scrittura in primo piano colorata in
Giallo lampeggiante sul fondo Nero, mentre il codice di escape finale
riporta tutto al default:
echo -e "\033[33;40;5m\033[1m Linux \033[0m"
Proviamo l' inversione dei colori (così ho il colore in primo piano Rosso
ed il fondo Nero):
echo -e "\033[40;31;1m Linux \033[0m"
Mentre in questo altro modo ho Nero su Rosso:
echo -e "\033[40;31;7m Linux \033[0m"
Sempre sfruttando il reverse possiamo scrivere un ciclo while che ci disegni una banda rossa crescente in senso orizzontale:
clear VAL=0 echo -e "\n" while [ $VAL -lt 30 ] do echo -e "\033[31;7m \c" VAL=`expr $VAL + 1` done echo -e "\033[0m"
Ovviamente attraverso i codici di escape si possono fare altre cose,
disegnare angoli, linee... e perfino posizionare il cursore dove
vogliamo:
ESC [
Riga ;
Colonna H
Volendo sfruttare questo sistema, il ciclo precedente diventerebbe:
clear VAL=0 COL=1 while [ $VAL -lt 30 ] do echo -e "\033[01;"$COL"H ";echo -e "\033[31;7m" VAL=`expr $VAL + 1` COL=`expr $COL + 1` done echo -e "\033[0m"
Di fatto esiste un'equivalenza fra il colore visualizzato attraverso i
codici di escape e quello ottenibile attraverso il comando
``setterm
'':
setterm -bold on -foreground white -background blue -store
Setta il colore in primo piano come ``Bianco evidente'' (opzione
``-bold on
'' == 1m
; ``-bold off
'' ==
0m
) ed il colore di background in blu.
Ho lasciato volutamente alla fine i codici "2" e "4" che ho chiamato
``sottotraccia'' perché corrispondono ai colori settati
rispettivamente con le opzioni ``hbcolor
'' e
``ulcolor
'' di ``setterm
'':
2m == hbcolor 4m == ulcolor
Esempio:
setterm -hbcolor red -ulcolor green -foreground cyan -background black -store echo -e "\033[40;1m Linux \033[0m" # Colore im Primo Piano == Ciano echo -e "\033[40;2m Linux \033[0m" # Colore im Primo Piano == Rosso echo -e "\033[40;4m Linux \033[0m" # Colore im Primo Piano == Verde
Il Colours-ls riporta un ciclo ``for
'' che
visualizza tutti i colori ANSI, ho provato a fare un po' meglio scrivendo
una shell grafica ed interattiva nella quale hanno trovato applicazione i
concetti esposti.
Il programmino, setcolor.sh, disegnando
diverse cartelline colorate, consente di provare svariati accostamenti
cromatici ed a richiesta di renderli definitivi aggiungendo un
``setterm
'' appropriato o cambiando quello esistente in
.bash_profile
.
Per una corretta visualizzazione occorre un giusto spostamento al modo
grafico, almeno un ``setfont lat1u-16.psf
'' ed un
``mapscrn iso01.uni
'' o in alternativa un semplice
``setfont
'' che carichi anche il sottoinsieme
``Unicode'' dei caratteri grafici.
Creare CD - Copertina - Joe |