Colorindo o console

myColors_tela

Depois da publicação do terminal colorido lembrei de algo que utilizava para alterar a paleta de cores do console, o tal do modo texto, e deixá-la… bem, deixá-la com um conjunto de cores bem diferente daquele definido em 1981 para os velhos PC padrão IBM. 🙂

História…

TL;DR! Pule para o próximo tópico se desejar.

Originalmente o modo de texto¹ dos computadores “padrão IBM” possuía 16 cores estáticas, isto é, a cor 0 indicava preto, a cor 1 vermelho, a cor 2 verde, a cor 3 amarelo etc e esta disposição era atrelada ao modo com eram codificadas as cores nos monitores CGA — o padrão digital RGBI.

I B G R Cor I B G R Cor
0 0 0 0 0 preto 8 1 0 0 0 cinza escuro
1 0 0 0 1 vermelho 9 1 0 0 1 vermelho claro
2 0 0 1 0 verde 10 1 0 1 0 verde claro
3 0 0 1 1 marrom² 11 1 0 1 1 amarelo
4 0 1 0 0 azul 12 1 1 0 0 azul claro
5 0 1 0 1 magenta 13 1 1 0 1 magenta claro
6 0 1 1 0 ciano 14 1 1 1 0 ciano claro
7 0 1 1 1 cinza 15 1 1 1 1 branco

Nesta codificação cada componente de cor tem apenas 1 bit de resolução, ou seja, é vermelho ou não vermelho, verde ou não verde, azul ou não azul e há ainda um bit para indicar, ou não, o uso de maior intensidade nas cores.

Reparou que o número da cor (índice) equivale ao números em binário que é a definição da cor? — foi por este motivo que usei IBGR ao invés de RGBI no título da tabela. 🙂

Em 1984 com o EGA as codificaçao das cores passou a ser analógica³ e um pouco depois, em 1987 com o VGA, passaram a ser redefinidas para qualquer uma das 262.144 combinações possíveis da paleta de 18 bits.

(¹) Na verdade o IBM 5150, o PC original, lançado há exatos 35 anos e uma semana, tinha dois adaptadores de vídeo: o MDA (com apenas um modo texto monocromático e uma porta de impressora) e o CGA (com modos coloridos para textos e gráficos).

(2) Pela lógica deveria ser amarelo escuro (mostarda?) mas o circuito dos monitores foi deliberadamente modificado para neste caso reduzir um pouco a quantidade de verde para produzir marrom. Outros computadores usaram RGBI mas apenas no CGA tinha “mágica”.

(³) E assim ficou até a chegada do DVI e do HDMI no século XXI.

A teoria

Como no exemplo anterior é feito com uma sequência de escapes no terminal que informa qual a cor a ser definida e seu novo valor:

printf "\x1b]P«índice»«vermelho»«verde»«azul»\n"

Lembrando que cor, vermelho, verde e azul precisam estar em hexadecimal, que o primeiro valor é um número de 4 bits, ou seja, vai de 0 até F (ou de 0 até 15) e os demais são números de 8 bits cada com valores de 0 até FF (ou 0 até 255) e aqui os zeros à esquerda são importantes.

Utilizando:

printf "\x1b]R"

Você restaura todas as cores para seus valores originais de 1981… 🙂

O programa “myColors.sh”

Esta é a revisão de script homônimo que eu utilizava — funcionalidade mantida, ele só era muito feio:

Use myColors.sh start para habilitar a paleta customizada (as cores estão no array COLOR), myColors.sh show para exibir as 16 cores e myColors.sh stop para retornar ao conjunto original.

Em modos framebuffer a troca de cores passará a valer partir daquele ponto no caso do modo de vídeo ter mais de 256 cores e em ambos os casos a troca das cores tem efeito somente no console virtual atualmente em uso.

Sobre as cores

A paleta de cores utilizada é esta daqui — primeira linha contem as cores de 0 até 7 e a segunda de 8 até 15:

myColors-paleta de cores

Não me recordo ao certo qual critério foi utilizado para defini-las mas com certeza tinha como objetivo tornar a leitura da tela mais agradável em um monitor CRT.

Reparando com calma nas cores da imagem obtida na captura de tela do VirtualBox é possível verificar que não ficou muito parecido pois acredito que o emulador de VGA seja fiel ao padrão e utilize apenas 18 bits para as cores, algo que as placas SVGA deixaram de fazer há tempos.

Daí resolvi fotografar a tela do notebook…

myColors_screenshot

…ficou um pouco mais parecido agora, não? 🙂

E para encerrar…

Claro que este recurso não é tão versátil quanto exibit todas as 16.777.216 cores nos terminais gráficos mas ainda assim permite aplicações interessantes como, por exemplo, identificar cada host conectado no KVM com sua própria cor de fundo.

Anúncios

2 comentários sobre “Colorindo o console

  1. Pingback: Colorindo o console - Linux em Ação XYZ

  2. Pingback: Telas do speccy no MSX – parte 1 | giovannireisnunes

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s