Como ativar a saída colorida rgb no terminal?

5

Estou tentando imprimir uma string colorida em um terminal gnome usando códigos de escape ANSI, mas, embora funcione para as cores personalizadas, ou mesmo para as 256 cores extras, ela não funciona com os códigos RGB.

Então, simplificando:

cout << "3[33m" << '.' << "3[0m"; # prints with color
cout << "3[38;5;135m" << '.' << "3[0m"; # prints with color
cout << "3[38;2;0;135;0m" << '.' << "3[0m"; # doesn't work, prints with default color

Como posso produzir algo com um código de cores RGB no gnome-terminal?

Estou seguindo este link para as saídas: Código de escape ANSI da Wikipédia .

Eu adicionei:

$ export TERM=xterm-256color

Para o meu arquivo .bashrc para suportar 256 cores e:

$ tput colors

Saídas 256, se isso é importante.

    
por t.pimentel 23.08.2014 / 22:52

2 respostas

5

As cores RGB não podem ser usadas no terminal por esses motivos:

  • O Bash não escolhe as cores da linha de comando.
  • Bash só pode especificar cores ANSI.

As duas razões acima estão intimamente ligadas. A maioria deles depende da sua tela e da especificação de cores ANSI. Se você usar um bom emulador de terminal, poderá definir cores RGB personalizadas para determinados códigos de cores ANSI.

O Bash como shell não tem poder sobre o que a tela pode fazer com os displays. Apenas passa as palavras no terminal para a sua tela. A tela pode decidir o que fazer com ela. A tela pode decidir quais cores os códigos de escape ANSI representam (se o terminal permitir cores).

Uma solução alternativa é alterar as especificações de cores do terminal. No entanto, muito poucos (eu não conheço nenhum) permitirá que você mude as cores.

    
por Kaz Wolfe 30.08.2014 / 09:49
1

Você precisa de vte > = 0.36 para que cores verdadeiras funcionem no gnome-terminal. Certifique-se de que seu vte é recente o suficiente e, nesse caso, seu código deve funcionar.

(Nota: quando você gera strings codificadas, como faz no aplicativo de exemplo, o valor de $ TERM é absolutamente irrelevante. Só importa se você estiver usando bibliotecas cujo comportamento depende disso, como ncurses .)

    
por egmont 17.04.2015 / 01:20