Como substituir um código de cor por outro no terminal?

2

Posso fazer o bash substituir automaticamente um código de cor por outro? Por exemplo, sempre que um programa envia texto envolto em código de cor para primeiro plano em negrito, eu gostaria que o bash realmente usasse código para plano de fundo verde, ou algo assim.

A razão pela qual eu quero isso é porque meu emulador de terminal (Terminator) não me permite mudar a cor do primeiro plano em negrito - por exemplo, echo -e "\e[1;39m Foo" sempre produzirá "Foo" em branco, independentemente da paleta de cores I conjunto, o que produz resultados feios. Eu gostaria de fazer o bash usar \e[1;37m code (negrito branco, que eu posso mudar nas preferências do Terminator) em vez de \e[1;39m .

Editar: pelo que entendi, fazer o que eu quero é mais sobre coisas como termcap ou terminfo do que o próprio bash. Alguém experimentou com esses dois?

    
por Jan Warchoł 16.03.2016 / 12:15

1 resposta

1

O Bash não tem nada a dizer sobre as cores que as aplicações usam, exceto, é claro, o que o próprio bash usa. Aplicativos interagem com o terminal; o bash apenas inicia e avisa quando eles terminam.

As aplicações sabem como falar com um terminal através do termcap (tradicional) ou terminfo (modeern). Termcap é mais antigo que cores, mas o terminfo tem algum conhecimento de cores. Consulte a página terminfo(5) man para obter uma lista dos recursos suportados em seu sistema. Não há como especificar sequências de controle para cores individuais, mas você pode obter essencialmente o mesmo resultado configurando a aparência de cada cor por meio do recurso initc . Por exemplo, isso altera a aparência da cor 1 (normalmente vermelha) para verde brilhante:

tput initc 1 0 255 0

O banco de dados ncurses não inclui este recurso para terminator ou para xterm (a partir da versão 5.9 no Debian jessie). No entanto, estes emuladores de terminal (assim como qualquer outro terminal baseado em vte) suportam uma sequência de escape que pode ser usada para esse propósito: OSC 4 ; c ; spec BEL . Isto é como transformar vermelho em verde brilhante:

printf '\e]4;1;#00ff00\a'

As cores básicas são numeradas de 0 a 7; texto em negrito nessas cores usa cores de 8 a 15. Você também pode usar OSC 5 ; 0 ; spec BEL para alterar a cor usada para negrito na cor padrão e assim por diante (consulte a lista de seqüência de controle para obter detalhes).

Essas configurações afetam as cores de primeiro e segundo plano, não há como afetar o primeiro plano e o plano de fundo separadamente.

Para personalizar a aparência das cores, você produziria essas seqüências de controle do seu .bashrc . Isso afetaria apenas os terminais nos quais você executa uma instância interativa do bash, não os terminais nos quais inicia um outro aplicativo diretamente.

Eu não sei como isso interage com as configurações da paleta de cores do Terminator.

    
por 19.03.2016 / 18:21