Como posso imprimir texto usando qualquer uma das 256 cores permitidas pelo terminal?

5

Eu gostaria de escrever um programa que utilize todas as 256 cores de texto do terminal Linux. No entanto, até o momento, encontrei apenas um punhado de códigos de cores, que estão no formato "\ 033 [1; NUMmNUM \ 033 [1; m". No entanto, esses códigos de escape permitem apenas duas ou três dúzias de cores, não as 256 que o terminal Linux supostamente permite. Como posso exibir essas outras cores no meu aplicativo curses ?

    
por fouric 12.06.2013 / 05:53

3 respostas

6

Você pode dar uma olhada nas configurações de TERM . É possível que seja configurado para uma string menor que capaz . Para testar cores, você pode executar o msgcat do GNU. Tente, por exemplo:

echo $TERM
msgcat --color=test
TERM=xterm-256color
msgcat --color=test

Ou use o loop do @Ignacio Vazquez-Abrams em vez do msgcat.

Para mais informações sobre como e o que definir, dê uma olhada, por exemplo:

por 12.06.2013 / 08:51
4

Pare de usar códigos de escape e use o recurso setaf terminfo.

$ for i in $(seq 0 $(tput colors) ) ; do tput setaf $i ; echo -n "█" ; done ; tput setaf 15 ; echo
    
por 12.06.2013 / 06:02
0

TERM informa tput (e outros aplicativos que usam o banco de dados do terminal) quantas cores seu terminal (supostamente) suporta e como definir o primeiro plano ( setaf ) e plano de fundo ( setab ) para isso.

O script de exemplo está próximo, mas não é redefinido corretamente:

for i in $(seq 0 $(tput colors) ) ; do tput setaf $i ; echo -n "█" ; done ; echo ; tput op

Aqui está uma captura de tela do xterm para ilustrar:

Porquevaleapena,msgcatusaobancodedadosdoterminal,masseguecomalgumassuposiçõescodificadassobreacapacidadedecordoterminal.Algumasdelasprecisamserrepensadas,porexemplo,notando-seumerrodecodificação,porexemplo,em esta linha :

               (strlen (term) >= 4 && memcmp (term, "rxvt", 7) == 0)
    
por 12.11.2016 / 22:51