Como posso produzir diferentes tons de verde para o terminal?
-
26-09-2019 - |
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?
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:
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.