Differenze tra le versioni di "Colorare testo e sfondo in Console o Terminale"
(12 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 1: | Riga 1: | ||
Come è noto, il testo stampato all'interno della console dell'IDE di Gambas è di colore nero, mentre quello stampato in Terminale è bianco. | Come è noto, il testo stampato all'interno della console dell'IDE di Gambas è di colore nero, mentre quello stampato in Terminale è bianco. | ||
− | Per poter cambiare il colore del testo oppure dello sfondo al testo, | + | Per poter cambiare il colore del testo oppure dello sfondo al testo, possiamo adottare almeno un paio di modalità. |
− | La prima parte della sequenza ''escape'' è formata da "\E". Va immediatamente precisato che in Gambas la lettera "E" dovrà essere sostituita con la corrispondente sua minuscola | + | |
− | \e | + | ==Uso di speciali sequenze ''escape''== |
+ | Questa modalità prevede l'uso di speciali sequenze di codice ''[https://en.wikipedia.org/wiki/ANSI_escape_code escape]''. Tale sequenze ''escape'' vanno poste prima del carattere o dei caratteri da colorare. | ||
+ | |||
+ | |||
+ | ===Uso di sequenze "escape" con 8 numeri di colori=== | ||
+ | La prima parte della sequenza ''escape'' è formata da "\E". Va immediatamente precisato che in Gambas la lettera "E" dovrà essere sostituita con la corrispondente sua <SPAN Style="text-decoration:underline">minuscola</span>: | ||
+ | <BR>Pertanto questa parte della sequenza sarà: | ||
+ | '''\e''' | ||
A seguire vi sarà il carattere "[" seguito da un numero di codice che specifica quale proprietà sarà interessata dalla modifica. In particolare il numero "3" è afferente al colore di un carattere testuale, mentre il numero "4" è afferente allo sfondo di un carattere testuale. | A seguire vi sarà il carattere "[" seguito da un numero di codice che specifica quale proprietà sarà interessata dalla modifica. In particolare il numero "3" è afferente al colore di un carattere testuale, mentre il numero "4" è afferente allo sfondo di un carattere testuale. | ||
− | Bisognerà, poi, specificare il colore. I colori assegnabili sono 8: | + | Bisognerà, poi, specificare il colore. |
+ | <BR>I colori assegnabili sono 8: | ||
<BR>0 -> Nero | <BR>0 -> Nero | ||
<BR>1 -> Rosso | <BR>1 -> Rosso | ||
Riga 19: | Riga 27: | ||
L'intera sequenza, infine, dovrà essere chiusa con il carattere corrispondente alla lettera "m". | L'intera sequenza, infine, dovrà essere chiusa con il carattere corrispondente alla lettera "m". | ||
− | Così, se per esempio vogliamo colorare il testo di rosso, imposteremo il seguente codice: | + | Così, se per esempio vogliamo colorare il testo di rosso, imposteremo il seguente codice: <SUP>[[[#Note|Nota 1]]]</sup> |
Print "<FONT Color=#B22222>\e[31m</font>Testo qualsiasi" | Print "<FONT Color=#B22222>\e[31m</font>Testo qualsiasi" | ||
Per annullare le modifiche, si imposterà la sequenza: | Per annullare le modifiche, si imposterà la sequenza: | ||
\e[0m | \e[0m | ||
Nel seguente esempio pratico si scriveranno tre gruppi di caratteri: il primo sarà colorato di rosso; poi si annullerà la modifica portando così il secondo gruppo alla colorazione predefinita; il terzo gruppo sarà colorato di giallo con sfondo di color magenta. | Nel seguente esempio pratico si scriveranno tre gruppi di caratteri: il primo sarà colorato di rosso; poi si annullerà la modifica portando così il secondo gruppo alla colorazione predefinita; il terzo gruppo sarà colorato di giallo con sfondo di color magenta. | ||
− | + | Public Sub Main() | |
− | Print "<FONT Color= | + | Print "<FONT Color=red>\e[31m</font>aaaa <FONT Color=red>\e[0m</font>bbbb <FONT Color=red>\e[33m\e[45m</font>cccc<FONT Color=red>\e[0m</font>" |
− | ''' | + | End |
+ | |||
+ | |||
+ | ====Sostituendo il carattere ''escape'' "\e" con quello "\x"==== | ||
+ | Invece di utilizzare il carattere ''escape'' "\e", si potrà utilizzare il carattere escape "\x", avendo l'accortezza farlo seguire dal valore esadecimale "1b". | ||
+ | <BR>Si avrà quindi: | ||
+ | '''\x1b'''[.... | ||
+ | Esempio pratico: | ||
+ | Public Sub Main() | ||
+ | |||
+ | <FONT Color=gray>' ''Stampa in console il testo "abcde" in colore rosso:''</font> | ||
+ | Print "'''\x1b'''[31mabcde'''\x1b'''[0m" | ||
+ | |||
+ | End | ||
Riga 35: | Riga 56: | ||
La prima parte della sequenza è simile alla precedente: | La prima parte della sequenza è simile alla precedente: | ||
− | \e[ | + | \e |
− | + | immediatamente segue il carattere " [ ". | |
+ | <BR>Poi va impostato il numero "38" per il colore del testo, mentre va usato il numero "48" per lo sfondo del testo. Si porrà appresso il simbolo del "punto e virgola" (;). | ||
<BR>Quindi si porrà il numero "5" seguito dal "punto e virgola" (;). | <BR>Quindi si porrà il numero "5" seguito dal "punto e virgola" (;). | ||
<BR>Segue il numero del colore da impostare da 0 a 255. <SUP>[[[#Note|Nota 2]]]</sup> | <BR>Segue il numero del colore da impostare da 0 a 255. <SUP>[[[#Note|Nota 2]]]</sup> | ||
<BR>Chiude la sequenza la solita lettera "m". | <BR>Chiude la sequenza la solita lettera "m". | ||
+ | |||
+ | Se, dunque, ad esempio vogliamo colorare il testo di arancione, utilizzando il colore numero 208, possiamo scrivere così: | ||
+ | Print "<FONT Color=#B22222>\e[38;5;'''208'''m</font> Testo qualsiasi" | ||
Per annullare la sequenza ''escape'' impostata, si utilizzerà ancora una volta la sequenza: | Per annullare la sequenza ''escape'' impostata, si utilizzerà ancora una volta la sequenza: | ||
\e[0m | \e[0m | ||
− | |||
− | |||
− | Nel seguente esempio pratico si scriveranno tre gruppi di caratteri: il primo sarà colorato con il colore numero | + | Nel seguente esempio pratico si scriveranno tre gruppi di caratteri: il primo sarà colorato con il colore numero 208; poi si annullerà la modifica portando così il secondo gruppo alla colorazione predefinita; il terzo gruppo sarà colorato con il colore numero 160 con sfondo del colore numero 49. |
− | + | Public Sub Main() | |
− | Print "<FONT Color= | + | Print "<FONT Color=red>\e[38;5;'''208'''m</font> aaaa <FONT Color=red>\e[0m</font>bbbb <FONT Color=red>\e[38;5;'''160'''m\e[48;5;'''49'''m</font>cccc<FONT Color=red>\e[0m</font>" |
− | ''' | + | End |
+ | |||
+ | |||
+ | ==Uso della funzione esterna "system()" e del comando ''tput''== | ||
+ | Questa modalità prevede l'uso della funzione esterna "system()" in combinazione con il comando ''[http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x405.html tput]''. | ||
+ | Mostriamo un esempio pratico: | ||
+ | <FONT Color=gray>' ''int system(const char *__command)'' | ||
+ | ' ''Execute the given line as a shell command.''</font> | ||
+ | Private Extern system_C(__command As String) As Integer In "libc:6" Exec "system" | ||
+ | |||
+ | |||
+ | Public Sub Main() | ||
+ | |||
+ | <FONT Color=gray>' ''Si imposta il colore del testo (da 0 a 7):''</font> | ||
+ | system_C("tput setaf 3") | ||
+ | <FONT Color=gray>' ''Si imposta il colore dello sfondo del testo (da 0 a 7):''</font> | ||
+ | system_C("tput setab 1") | ||
+ | <FONT Color=gray>' ''Si imposta la modalità "grassetto" del testo):''</font> | ||
+ | system_C("tput bold") | ||
+ | <FONT Color=gray>' ''Si imposta la modalità "sottolineato" del testo):''</font> | ||
+ | system_C("tput smul") | ||
+ | |||
+ | Print "Testo qualsiasi"; | ||
+ | |||
+ | End | ||
=Note= | =Note= | ||
− | [1] | + | [1] La sequenza ''escape'', adottando gli opportuni codici, consente di attribuire al testo, scritto in Console o in Terminale, anche altre caratteristiche. |
− | <BR> | + | <BR>Mostriamo di seguito un codice per verificare tutte le opzioni offerte modificando i valori dell'<I>escape</i>: |
− | + | Public Sub Main() | |
− | < | + | |
+ | Dim i, j, n As Integer | ||
+ | |||
+ | For i = 0 To 10 | ||
+ | For j = 0 To 9 | ||
+ | n = 10 * i + j | ||
+ | If n > 108 Then Break | ||
+ | Print "\e["; <FONT Color=red>n</font>; "m"; Format(n, "###"); "\e[0m"; " "; | ||
+ | Next | ||
+ | Print | ||
+ | Next | ||
+ | |||
+ | End | ||
[2] Per i numeri corrispondenti ai 256 colori, vedi la seguente tabella: | [2] Per i numeri corrispondenti ai 256 colori, vedi la seguente tabella: | ||
<table class="collapsible" style="text-align:center;font-size:80%;width:100%;background:#f6f6f6;cursor:default;" cellpadding="0" cellspacing="1"> | <table class="collapsible" style="text-align:center;font-size:80%;width:100%;background:#f6f6f6;cursor:default;" cellpadding="0" cellspacing="1"> | ||
<tr> | <tr> | ||
− | <th colspan="36">256- | + | <th colspan="36">Modalità 256-colori — primo piano (foreground): ESC[38;5;#m   sfondo (background): ESC[48;5;#m</th> |
</tr> | </tr> | ||
<tr> | <tr> | ||
− | <td colspan="18"> | + | <td colspan="18">Colori standard</td> |
− | <td colspan="18"> | + | <td colspan="18">Colori ad alta-intensità</td> |
</tr> | </tr> | ||
<tr> | <tr> | ||
Riga 98: | Riga 157: | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
− | <td colspan="36">216 | + | <td colspan="36">216 colori</td> |
</tr> | </tr> | ||
<tr> | <tr> | ||
Riga 329: | Riga 388: | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
− | <td colspan="36"> | + | <td colspan="36">Colori in scala di grigi</td> |
</tr> | </tr> | ||
− | + | <td colspan="36"></td> | |
− | <td colspan="36"> | ||
<table style="width:100%;text-align:center;font-weight:bold;"> | <table style="width:100%;text-align:center;font-weight:bold;"> | ||
<tr> | <tr> | ||
Riga 361: | Riga 419: | ||
</tr> | </tr> | ||
</table> | </table> | ||
+ | </table> | ||
+ | La suddetta tabella dei colori può essere riprodotta in Console/Terminale mediante il seguente codice: | ||
+ | Public Sub Main() | ||
+ | |||
+ | Dim i, j, n As Integer | ||
+ | |||
+ | Print " Colori standard Colori ad alta intensità" | ||
+ | For n = 0 To 15 | ||
+ | Print "\e[48;5;"; n; "m"; Format(n, "####"); | ||
+ | If n == 7 Then Write "\e[0m " | ||
+ | Next | ||
+ | Print "\n" | ||
+ | Write String(50, " ") & "216 colori\n" | ||
+ | For i = 0 To 5 | ||
+ | For j = 0 To 35 | ||
+ | n = (36 * i) + (16 + j) | ||
+ | Print "\e[48;5;"; n; "m"; "\e[38;5;240;m"; Format(n, "###"); | ||
+ | Next | ||
+ | Print | ||
+ | Next | ||
+ | Print "\n" | ||
+ | Write String(44, " ") & "Colori in scala di grigi\n" | ||
+ | For n = 232 To 255 | ||
+ | Print "\e[48;5;"; n; "m"; "\e[38;5;230;m"; Format(n, "####"); | ||
+ | Next | ||
+ | Print | ||
+ | |||
+ | End | ||
+ | |||
+ | |||
+ | |||
+ | =Riferimenti= | ||
+ | * https://wiki.archlinux.org/index.php/Bash/Prompt_customization#Colors | ||
+ | * https://en.wikipedia.org/wiki/ANSI_escape_code#Colors | ||
+ | * http://www.faqs.org/docs/Linux-HOWTO/Bash-Prompt-HOWTO.html#AEN341 |
Versione attuale delle 13:14, 1 lug 2024
Come è noto, il testo stampato all'interno della console dell'IDE di Gambas è di colore nero, mentre quello stampato in Terminale è bianco.
Per poter cambiare il colore del testo oppure dello sfondo al testo, possiamo adottare almeno un paio di modalità.
Indice
Uso di speciali sequenze escape
Questa modalità prevede l'uso di speciali sequenze di codice escape. Tale sequenze escape vanno poste prima del carattere o dei caratteri da colorare.
Uso di sequenze "escape" con 8 numeri di colori
La prima parte della sequenza escape è formata da "\E". Va immediatamente precisato che in Gambas la lettera "E" dovrà essere sostituita con la corrispondente sua minuscola:
Pertanto questa parte della sequenza sarà:
\e
A seguire vi sarà il carattere "[" seguito da un numero di codice che specifica quale proprietà sarà interessata dalla modifica. In particolare il numero "3" è afferente al colore di un carattere testuale, mentre il numero "4" è afferente allo sfondo di un carattere testuale.
Bisognerà, poi, specificare il colore.
I colori assegnabili sono 8:
0 -> Nero
1 -> Rosso
2 -> Verde
3 -> Giallo
4 -> Blu
5 -> Magenta
6 -> Ciano
7 -> Bianco
L'intera sequenza, infine, dovrà essere chiusa con il carattere corrispondente alla lettera "m".
Così, se per esempio vogliamo colorare il testo di rosso, imposteremo il seguente codice: [Nota 1]
Print "\e[31mTesto qualsiasi"
Per annullare le modifiche, si imposterà la sequenza:
\e[0m
Nel seguente esempio pratico si scriveranno tre gruppi di caratteri: il primo sarà colorato di rosso; poi si annullerà la modifica portando così il secondo gruppo alla colorazione predefinita; il terzo gruppo sarà colorato di giallo con sfondo di color magenta.
Public Sub Main() Print "\e[31maaaa \e[0mbbbb \e[33m\e[45mcccc\e[0m" End
Sostituendo il carattere escape "\e" con quello "\x"
Invece di utilizzare il carattere escape "\e", si potrà utilizzare il carattere escape "\x", avendo l'accortezza farlo seguire dal valore esadecimale "1b".
Si avrà quindi:
\x1b[....
Esempio pratico:
Public Sub Main() ' Stampa in console il testo "abcde" in colore rosso: Print "\x1b[31mabcde\x1b[0m" End
Uso di sequenze escape con 256 numeri di colori
Oltre agli otto colori sopra riportati, è possibile utilizzare sequenze escape con 256 numeri di colori.
La prima parte della sequenza è simile alla precedente:
\e
immediatamente segue il carattere " [ ".
Poi va impostato il numero "38" per il colore del testo, mentre va usato il numero "48" per lo sfondo del testo. Si porrà appresso il simbolo del "punto e virgola" (;).
Quindi si porrà il numero "5" seguito dal "punto e virgola" (;).
Segue il numero del colore da impostare da 0 a 255. [Nota 2]
Chiude la sequenza la solita lettera "m".
Se, dunque, ad esempio vogliamo colorare il testo di arancione, utilizzando il colore numero 208, possiamo scrivere così:
Print "\e[38;5;208m Testo qualsiasi"
Per annullare la sequenza escape impostata, si utilizzerà ancora una volta la sequenza:
\e[0m
Nel seguente esempio pratico si scriveranno tre gruppi di caratteri: il primo sarà colorato con il colore numero 208; poi si annullerà la modifica portando così il secondo gruppo alla colorazione predefinita; il terzo gruppo sarà colorato con il colore numero 160 con sfondo del colore numero 49.
Public Sub Main() Print "\e[38;5;208m aaaa \e[0mbbbb \e[38;5;160m\e[48;5;49mcccc\e[0m" End
Uso della funzione esterna "system()" e del comando tput
Questa modalità prevede l'uso della funzione esterna "system()" in combinazione con il comando tput.
Mostriamo un esempio pratico:
' int system(const char *__command) ' Execute the given line as a shell command. Private Extern system_C(__command As String) As Integer In "libc:6" Exec "system" Public Sub Main() ' Si imposta il colore del testo (da 0 a 7): system_C("tput setaf 3") ' Si imposta il colore dello sfondo del testo (da 0 a 7): system_C("tput setab 1") ' Si imposta la modalità "grassetto" del testo): system_C("tput bold") ' Si imposta la modalità "sottolineato" del testo): system_C("tput smul") Print "Testo qualsiasi"; End
Note
[1] La sequenza escape, adottando gli opportuni codici, consente di attribuire al testo, scritto in Console o in Terminale, anche altre caratteristiche.
Mostriamo di seguito un codice per verificare tutte le opzioni offerte modificando i valori dell'escape:
Public Sub Main() Dim i, j, n As Integer For i = 0 To 10 For j = 0 To 9 n = 10 * i + j If n > 108 Then Break Print "\e["; n; "m"; Format(n, "###"); "\e[0m"; " "; Next Print Next End
[2] Per i numeri corrispondenti ai 256 colori, vedi la seguente tabella:
Modalità 256-colori — primo piano (foreground): ESC[38;5;#m sfondo (background): ESC[48;5;#m | ||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Colori standard | Colori ad alta-intensità | |||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
216 colori | ||||||||||||||||||||||||||||||||||||||||||||||||||||
16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | |||||||||||||||||
52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | |||||||||||||||||
88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | |||||||||||||||||
124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | |||||||||||||||||
160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | |||||||||||||||||
196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | |||||||||||||||||
Colori in scala di grigi |
232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 |
La suddetta tabella dei colori può essere riprodotta in Console/Terminale mediante il seguente codice:
Public Sub Main() Dim i, j, n As Integer Print " Colori standard Colori ad alta intensità" For n = 0 To 15 Print "\e[48;5;"; n; "m"; Format(n, "####"); If n == 7 Then Write "\e[0m " Next Print "\n" Write String(50, " ") & "216 colori\n" For i = 0 To 5 For j = 0 To 35 n = (36 * i) + (16 + j) Print "\e[48;5;"; n; "m"; "\e[38;5;240;m"; Format(n, "###"); Next Print Next Print "\n" Write String(44, " ") & "Colori in scala di grigi\n" For n = 232 To 255 Print "\e[48;5;"; n; "m"; "\e[38;5;230;m"; Format(n, "####"); Next Print End