Come posso uscita diverse tonalità di verde al terminale?
-
26-09-2019 - |
Domanda
Attualmente sto utilizzando il seguente codice di testo di output in verde al terminale:
printf("%c[1;32mHello, world!\n", 27);
Tuttavia, voglio di più tonalità di verde. Qual è il modo più semplice per ottenere questo risultato?
Soluzione
È possibile utilizzare la 256colors2.pl script su sito di Rob Meerman per assicurarsi che le maniglie dei terminali 256 colori in modo corretto. Quindi scegliere la giusta combinazione di valori RGB per darvi la giusta tonalità di verde.
In base alla sua sceneggiatura, sembra che i numeri di colore sono essenzialmente un offset di una combinazione di colori di base 6:
COLOR = r*6^2 + g*6 + b) + 16
E per il colore di primo piano abbiamo bisogno di usare:
\x1b[38;5;${COLORNUM}m
E ancora basato sulla sua sceneggiatura, ecco un loop (Perl) che visualizza la lettera O nel colore desiderato:
# now the color values
for ($green = 0; $green < 6; $green++) {
for ($red = 0; $red < 6; $red++) {
for ($blue = 0; $blue < 6; $blue++) {
$color = 16 + ($red * 36) + ($green * 6) + $blue;
print "\\x1b[38;5;${color}m :\x1b[38;5;${color}m O\x1b[0m ";
print "\n" if ($blue == 2 || $blue == 5);
}
}
print "\n";
}
Ed ecco un esempio della sua produzione:
NOTE : Charles sembra un po 'di più su come funziona realmente e quello che dovrete fare per verificare che il guscio supporta le funzionalità necessarie. La mia informazione è basata rigorosamente su osservazione e sperimentazione con un guscio noto per supportare 256 colori (konsole).
Altri suggerimenti
Come si esegue questa operazione dipende dal vostro terminale. Si può dovrebbe essere in grado di interrogare un termcap o terminfo database per scoprire come.
Questo è più facile dimostrare con alcuni comandi tput
.
es. sul mio terminale corrente:
tput initc 2 500 900 100
tput setaf 2
Definisce colore 2 per essere una tonalità di verde (i parametri sono valori RGB tra 0 e 1000) e passa il piano di questo colore.
Per vedere la sequenza di caratteri necessari in un programma C
per i vostri dato terminale è possibile visualizzare la capacità con infocmp
.
es. (Per il mio terminale)
$ infocmp -1 | grep initc
initc=\E]P%p1%x%p2%{255}%*%{1000}%/%02x%p3%{255}%*%{1000}%/%02x%p4%{255}%*%{1000}%/%02x,
$ infocmp -1 | grep setaf
setaf=\E[38;5;%p1%dm,
Il %
paramter formattazione è un po '(molto OK) doloroso da analizzare, ma è documentato nella pagina infocmp
dell'uomo. Traducendo questo a stringa di formato printf
non è troppo difficile.
Questo può aiutare:
http://en.wikipedia.org/wiki/ANSI_escape_code
È possibile veramente solo ottenere 2 diverse tonalità di ogni colore. Provare a sostituire il 1 con un 2 per ottenere verde scuro.