Pergunta

Atualmente, estou usando o seguinte código para produzir texto em verde para o terminal:

printf("%c[1;32mHello, world!\n", 27);

No entanto, quero mais tons de verde. Qual é a maneira mais fácil de conseguir isso?

Foi útil?

Solução

Você pode usar o 256Colors2.pl script on Rob Meerman's Site para garantir que seu terminal lida com 256 cores corretamente. Em seguida, escolha a combinação certa de valores de RGB para fornecer o tom certo de verde.

Com base em seu script, parece que os números de cores são essencialmente um deslocamento de um esquema de cores base 6:

COLOR = r*6^2 + g*6 + b) + 16

E para a cor do primeiro plano que precisamos usar:

\x1b[38;5;${COLORNUM}m

E novamente com base em seu script, aqui está um laço (Perl) que exibe a letra O na cor desejada:

# 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";
}

E aqui está uma amostra de sua saída:

Screenshot showing color value samples

NOTA: Charles Parece muito mais sobre como ele realmente funciona e o que você precisará fazer para verificar se o shell suporta os recursos necessários. Minhas informações se baseiam estritamente em observação e teste com uma concha conhecida por suportar 256 cores (Konsole).

Outras dicas

Como você faz isso depende do seu terminal. Você pode poder consultar um banco de dados TermCap ou Terminfo para descobrir como.

Isso é mais fácil de demonstrar com alguns tput comandos.

Por exemplo, no meu terminal atual:

tput initc 2 500 900 100
tput setaf 2

Define a cor 2 para ser um tom de verde (os parâmetros são valores de RGB entre 0 e 1000) e alterna o primeiro plano para esta cor.

Para ver a sequência de personagens necessária em um C Programa para o seu terminal determinado, você pode exibir os recursos com infocmp.

Por exemplo (para o meu terminal)

$ 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,

o % A formatação de parâmetros é um pouco (ok muito) dolorosa para analisar, mas está documentada no infocmp página de homem. Traduzindo isso para printf Formato String não é muito difícil.

Isso pode ajudá -lo:

http://en.wikipedia.org/wiki/ansi_escape_code

Você só pode realmente obter 2 tons diferentes de cada cor. Tente substituir o 1 por um 2 para ficar verde escuro.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top