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?

È stato utile?

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:

Schermata campioni che presentano valori di colore

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top