|
|
Graphics
By Gimp |
|
||||||
Home |
Software | Gchemist' s |
Gtklin |
Farmacia |
Porting |
Links |
Howto |
Giocare con i colori in bash |
Giocare
con i colori in bash
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. |