<Anterior | Conteúdo | Próxima>
Adicionando Cor
A maioria dos programas do emulador de terminal responde a certas sequências de caracteres não imprimíveis para controlar coisas como atributos de caracteres (como cor, texto em negrito e o temido texto piscando) e a posição do cursor. Abordaremos a posição do cursor em breve, mas primeiro veremos a cor.
Confusão Terminal
Na antiguidade, quando os terminais eram ligados a computadores remotos, havia muitas marcas concorrentes de terminais e todos funcionavam de forma diferente. Eles tinham teclados diferentes e todos tinham maneiras diferentes de interpretar as informações de controle. Unix e sistemas semelhantes ao Unix têm dois subsistemas bastante complexos para lidar com a babel de controle de terminal (chamado termocap e informações do termo) Se você olhar nos recessos mais profundos das configurações do emulador de terminal, poderá encontrar uma configuração para o tipo de emulação de terminal.
Em um esforço para fazer os terminais falarem algum tipo de linguagem comum, o American National Standards Institute (ANSI) desenvolveu um conjunto padrão de sequências de caracteres para controlar os terminais de vídeo. Os antigos usuários do DOS se lembrarão do AN-SI.SYS arquivo que foi usado para permitir a interpretação desses códigos.
A cor do personagem é controlada enviando ao emulador de terminal um Código de escape ANSI embutido no fluxo de caracteres a serem exibidos. O código de controle não é “impresso” no display, mas sim interpretado pelo terminal como uma instrução. Como vimos na tabela acima, o \[ e \] sequências são usadas para encapsular caracteres não imprimíveis. Um código de escape ANSI começa com um octal 033 (o código gerado pela chave de escape), seguido por um atributo de caractere opcional, seguido por uma instrução. Por exemplo, o código para definir a cor do texto para normal (atributo = 0), texto preto é:
\ 033 [0; 30m
Aqui está uma tabela de cores de texto disponíveis. Observe que as cores são divididas em dois grupos, diferenciados pela aplicação do atributo negrito (1) que cria a aparência de cores “claras”:
Tabela 13- 2: Sequências de escape usadas para definir as cores do texto
Seqüência | Cor do texto | Seqüência | Cor do texto |
\ 033 [0; 30m | Preto | \ 033 [1; 30m | Cinza escuro |
\ 033 [0; 31m | Vermelho | \ 033 [1; 31m | Luz vermelha |
\ 033 [0; 32m | Verde | \ 033 [1; 32m | Green Light |
\ 033 [0; 33m | Brown | \ 033 [1; 33m | Amarelo |
\ 033 [0; 34m | Blue | \ 033 [1; 34m | Azul claro |
\ 033 [0; 35m | Roxa | \ 033 [1; 35m | Luz roxa |
Adicionando Cor
\ 033 [0; 36m | Ciano | \ 033 [1; 36m | Ciano claro |
\ 033 [0; 37m | Cinza Claro | \ 033 [1; 37m | Branco |
Vamos tentar fazer um prompt vermelho. Vamos inserir o código de escape no início:
$ PS1 = "\ [\ 033 [0; 31m \] <\ u @ \ h \ W> \ $"
$
$ PS1 = "\ [\ 033 [0; 31m \] <\ u @ \ h \ W> \ $"
$
Isso funciona, mas observe que todo o texto que digitamos após o prompt também é vermelho. Para corrigir isso, adicionaremos outro código de escape ao final do prompt que diz ao emulador de terminal para retornar à cor anterior:
$ PS1="\[\033[0;31m\]<\u@\h \W>\$\[\033[0m\] "
$
$ PS1="\[\033[0;31m\]<\u@\h \W>\$\[\033[0m\] "
$
Isso é melhor!
Também é possível definir a cor de fundo do texto usando os códigos listados abaixo. As cores de fundo não suportam o atributo negrito.
Tabela 13-3: Sequências de escape usadas para definir a cor de fundo
Seqüência | Cor de fundo | Seqüência | Cor de fundo |
\ 033 [0; 40m | Preto | \ 033 [0; 44m | Blue |
\ 033 [0; 41m | Vermelho | \ 033 [0; 45m | Roxa |
\ 033 [0; 42m | Verde | \ 033 [0; 46m | Ciano |
\ 033 [0; 43m | Brown | \ 033 [0; 47m | Cinza Claro |
Podemos criar um prompt com um fundo vermelho aplicando uma mudança simples ao primeiro código de escape:
$ PS1="\[\033[0;41m\]<\u@\h \W>\$\[\033[0m\] "
<eu@linuxbox ~> $
$ PS1="\[\033[0;41m\]<\u@\h \W>\$\[\033[0m\] "
<eu@linuxbox ~> $
Experimente os códigos de cores e veja o que você pode criar!
Nota: Além dos atributos de caractere normal (0) e negrito (1), o texto também pode receber os atributos de sublinhado (4), piscando (5) e inverso (7). No interesse do bom gosto, muitos emuladores de terminal se recusam a honrar o atributo piscando, entretanto.