Cores com os terminais do Linux
  Thorbjørn Ravn Andersen, ravn@dit.ou.dk
  v1.4, 7 de Agosto de 1997

  A maioria das distribuições Linux tem um comando 'ls' para listar o
  conteúdo de um diretório, o qual pode ter a sua saída melhorada
  visualmente pelo uso de diferentes cores. O problema é que configurar
  isso não é uma tarefa trivial. Este documento explica os vários
  aspectos e aproximações da alteração da configuração através da
  configuração de programas existentes, além da localização de programas
  alternativos, normalmente não incluídos com as distribuições Slackware
  ou RedHat, e que podem ser usados na maioria das versões do Unix. A
  versão deste documento em HTML também está disponível em minha própria
  fonte em  <http://www.mip.ou.dk/~ravn/colour-ls>.
  ______________________________________________________________________

  Índice geral


  1. Introdução

  2. Uma rápida passagem para os impacientes

  3. Será que tenho tudo que é necessário?

  4. Que cores devo escolher?

  5. Como configurar as cores com o ls

  6. Como mudar o padrão das cores do texto

     6.1 Xterm
     6.2 Console virtual
        6.2.1 /etc/issue
        6.2.2 /etc/profile ou .profile
        6.2.3 /etc/login ou .login
     6.3 Acesso remoto

  7. Programa



  ______________________________________________________________________

  11..  IInnttrroodduuççããoo

  ls GNU Nos últimos anos, o uso de cores se tornou bastante comum.  Os
  usuários estão começando a explorar estes recursos usando programas
  que utilizam cores para dar um retorno visual rápido em, por exemplo,
  palavras chaves reservadas a uma linguagens de programação, ou na
  notificação instantânea de um palavra digitada errada.

  Como o console de texto do Linux suporta cores, o ls original da GNU
  foi rapidamente modificado para exibir informações coloridas e
  incluído no Slackware por volta da versão 2.0.  Versões melhoradas
  destes programas de correção foram migradas agora para a distribuição
  GNU padrão, e devem mais tarde, serem parte de uma nova distribuição
  Linux.

  Esta revisão é uma atualização de uma regravação principal da versão
  inicial, incluindo informações de xterms e programas de correção do
  kernel.

  As informações contidas neste documento foram confirmadas no RedHat
  4.1, e originalmente compiladas com a versão 2.0.2 do Slackware e
  kernel 1.1.54. As informações do programa de correção do kernel foram
  recuperadas no Slackware 2.2.0 com o kernel 1.2.13, e o tcsh como o
  interpretador de comandos padrão, e mais tarde confirmadas com um
  kernel 2.0.27. Se você usa qualquer outra configuração, ou versão do
  Unix, apreciaria se mandasse para mim uma nota dizendo o seu sistema
  operacional, sua versão e de que modo o suporte a cores está
  disponível.



  22..  UUmmaa rrááppiiddaa ppaassssaaggeemm ppaarraa ooss iimmppaacciieenntteess

  Se você tem uma distribuição _n_o_v_a do Linux, faça estas modificações
  aos arquivos do seu diretório ( eles irão fazer efeito na próxima vez
  que você entrar no sistema ).



       ~/.bashrc:
           alias ls="ls --color"

       ~/.cshrc:
           alias ls 'ls --color'





  É isso!

  Pode-se querer fazer um ``eval `dircolors $HOME/.colourrc`'', para se
  obter suas próprias cores.  Este arquivo é criado com o ``dircolors -p
  >$HOME/.colourrc'' e será melhor comentado numa futura edição.


  33..  SSeerráá qquuee tteennhhoo ttuuddoo qquuee éé nneecceessssáárriioo??

  Antes de tudo, será necessário ter uma versão do ls que saiba usar
  cores de forma apropriada. Tente este comando no console de texto do
  Linux ( num xterm isto também funciona ):



       % ls --color




  ( o % é um indicador do prompt ( indicador de entrada de dados ) do
  interpretador de comandos ):

  Se for dada uma mensagem de erro indicando que o ls não compreende a
  opção, será necessário instalar uma nova versão do pacote de arquivos
  utilitários da GNU.  Se você não tem um pacote de atualização
  apropriado para a sua distribuição, obtenha a última versão no seu
  espelho GNU e faça a instalação diretamente da fonte.

  Se não houver mensagens erros, significa que o ls compreende o
  comando. Infelizmente, algumas das versões mais prematuras incluídas
  com o Slackware ( e possivelmente outras distribuições ) contêm erros.
  O ls incluído com o RedHat 4.1 versão 3.13 funciona perfeitamente.



       % ls --version
       ls - GNU fileutils-3.13

  Se for executado o comando ``ls -- color'' num console de texto, a
  saída deve ser colorida de acordo com os padrões estabelecidos nos
  sistema, e você pode decidir o que você quer que mude.

  Se isto for executado num xterm, você pode ou não ter as cores
  alteradas. Assim como o ls sozinho, o programa original do xterm não
  tem suporte de cores para programas sendo executados dentro dele,
  porém, as versões mais novas já tem este suporte.  Se o seu xterm não
  suporta o uso de cores, você deve obter uma nova versão como é
  descrito no fim deste documento. Entretanto, você pode mudar para um
  terminal de texto e continuar de lá.



  44..  QQuuee ccoorreess ddeevvoo eessccoollhheerr??

  ls, escolha de cores Este roteiro do interpretador de comandos (
  agradeço a todos que me mandaram versões do bash ) mostra todas as
  combinações de cores padrões no console atual. Se nenhuma cor aparece,
  é porque o seu console não suporta a seleção de cores ANSI.



       #!/bin/bash
       # Display ANSI colours.
       #
       esc="\033["
       echo -n " _ _ _ _ _40 _ _ _ 41_ _ _ _42 _ _ _ 43"
       echo "_ _ _ 44_ _ _ _45 _ _ _ 46_ _ _ _47 _"
       for fore in 30 31 32 33 34 35 36 37; do
         line1="$fore  "
         line2="    "
         for back in 40 41 42 43 44 45 46 47; do
           line1="${line1}${esc}${back};${fore}m Normal  ${esc}0m"
           line2="${line2}${esc}${back};${fore};1m Bold    ${esc}0m"
         done
         echo -e "$line1\n$line2"
       done





  O número da cor do primeiro plano ( que seria o numero da cor das
  letras ) é listado na esquerda, e o número da cor de fundo é mostrado
  no quadro.  Se você quiser que os caracteres fiquem em negrito,
  acrescente "1" aos parâmetros, então, azul brilhante no branco seria
  "37;44;1". A seqüência de seleção ANSI completa é então

  ESC [ 3 7 ; 4 4 ; 1 m



  Nota: a cor de fundo atual não pode ser em negrito, então, você não
  pode ter amarelo ( marrom em negrito ) Esta é uma limitação do
  equipamento.  ls, tabela de cores

  As cores são:
      0 - preto    4 - azul           3# é a cor de primeiro plano
          1 - vermelho 5 - magenta        4# é a cor de fundo
          2 - verde    6 - cyan
          3 - amarelo  7 - branco         ;1 é o negrito




  55..  CCoommoo ccoonnffiigguurraarr aass ccoorreess ccoomm oo llss


  Se você quiser mudar o padrão das cores usadas no ls, será necessário
  ter uma cópia pessoal no seu diretório home. A cópia pode ser obtida
  do seguinte modo:


        cd ; dircolors -p > .coloursrc




  Depois de modificar este arquivo tão bem comentado, será necessário
  que ele seja lido na variável de ambiente LS_COLORS, o que normalmente
  é feito com:


       eval `dircolors .colourrc`




  É necessário colocar esta linha no seu .bashrc/.cshrc/.tcshrc (
  dependendo do interpretador de comandos que é usado ), para que isto
  seja feito toda vez que se entra no sistema. Veja a página de manual
  do dircolors(1) para mais detalhes.



  66..  CCoommoo mmuuddaarr oo ppaaddrrããoo ddaass ccoorreess ddoo tteexxttoo

  ls, como mudar as cores

  Será necessário dizer ao código do controlador do terminal que você
  quer outras cores como padrão. Não há uma maneira padrão de fazer
  isso, porém no caso do Linux, pode-se usar o programa setterm.



  O "setterm" usa a informação no banco de dados do terminal para
  configurar os atributos. As seleções são feitas assim:


       setterm -foreground black -background white -store





  Onde o "-store" faz com que a mudança seja aplicada ao console que
  está sendo usado.  Isto requer que o terminal atual ( variável de
  ambiente TERM ) seja descrito "bem o suficiente" no banco de dados do
  termcap.  Se o setterm por alguma razão não funcionar corretamente,
  eis aqui algumas alternativas:



  66..11..  XXtteerrmm

  ls, xterm Um desses xterms deve estar disponível e pelo menos um deles
  suporta cores.




  xterm -fg white -bg blue4
  color_xterm -fg white -bg blue4
  color-xterm -fg white -bg blue4
  nxterm -fg white -bg blue4




  onde 'color_xterm' suporta a versão de cor do 'ls'.  Esta escolha em
  particular é parecida com as cores usadas num SGI.


  66..22..  CCoonnssoollee vviirrttuuaall

  console virtual Pode-se modificar o kernel de uma vez por todas, bem
  como prover um padrão de tempo de execução para os consoles virtuais
  com uma seqüência de escapes.  Recomendo o programa de correção do
  kernel se você compilou o seu próprio kernel.

  O arquivo fonte do kernel é /usr/src/linux/drivers/char/console.c por
  volta da linha 1940, onde deve-se modificar:



               def_color       = 0x07;   /* branco */
               ulcolor                 = 0x0f;   /* branco forte */
               halfcolor       = 0x08;   /* cinza */




  como for apropriado.  Usei branco no azul com


               def_color       = 0x17;   /* branco */
               ulcolor                 = 0x1f;   /* branco forte */
               halfcolor       = 0x18;   /* cinza */




  Os números são os códigos de atribuição usados pela placa de vídeo em
  hexadecimal: o dígito mais significante ( o "1" nas cores
  exemplificadas acima ) é o fundo; o menos significante é a cor da
  letra.  0 = preto, 1 = azul, 2 = verde, 3 = cyan, 4 = vermelho, 5 =
  rosa,  6 = marrom/amarelo, 7 = branco.  Some 8 ao número para obter
  cores "brilhantes". Observe que, na maioria dos casos, um fundo
  brilhante == caracteres que piscam, fundo enfadonho ( de
  sjlam1@mda023.cc.monash.edu.au <mailto:sjlam1@mda023.cc.monash.edu.au>
  ).


  Pode-se fornecer também um novo padrão de tempo de execução para um
  console virtual, numa base por monitor com a seqüência não padrão ANSI
  ( encontrada pela procura de fontes do kernel )


               ESC [ 8 ]




  a qual configura o padrão para as cores das letras e do fundo atuais.
  Depois, a palavra ( ou cadeia de caracteres ) Reset Attributes ( ESC [
  m ) seleciona essas cores ao invés de preto e branco.

  Será necessário realmente repercutir esta palavra para o console toda
  vez que você reiniciar. Dependendo no que você usa o seu Linux, pode-
  se fazer a modificação em vários lugares:


  66..22..11..  //eettcc//iissssuuee


  Isto é onde o "Welcome to Linux xx.yy" é mostrado no Slackware, e é
  uma boa escolha para uma máquina que trabalha sozinha ( e
  provavelmente uma praga para os usuários que a acessam com telnet ).
  Este arquivo é criado na inicialização ( no Slackware no
  /etc/rc.d/rc.S; no Redhat no /etc/rc.d/rc.local), e você deve
  modificar as linhas para obter algo como:



         echo ""> /etc/issue
         echo Bem vindo ao Linux `/bin/uname -a | /bin/cut -d\  -f3`. >> /etc/issue




  para


         ESCAPE="<replace with a single escape character here>"
         echo "${ESCAPE}[H${ESCAPE}[37;44m${ESCAPE}[8]${ESCAPE}[2J"> /etc/issue
         echo Bem vindo ao Linux `/bin/uname -a | /bin/cut -d\  -f3`. >> /etc/issue




  Este código irá colocar o cursor no começo da linha, configurar a cor
  ( aqui branco no azul ), salvar esta seleção e limpar o resto da tela.
  A modificação fará efeito na próxima inicialização. Lembre-se de
  inserir o caracter escape de modo _literal_ no arquivo com o C-q no
  emacs ou o control-v no vi, uma vez que aparentemente o sh, usado para
  executar este roteiro, não compreende a sintaxe /033.


  66..22..22..  //eettcc//pprrooffiillee oouu ..pprrooffiillee



         if [ "$TERM" = "console" ]; then
             echo "\033[37;44m\033[8]" #
       # ou use setterm.
             setterm -foreground white -background blue -store
         fi





  66..22..33..  //eettcc//llooggiinn oouu ..llooggiinn




         if ( "$TERM" == "console" ) then
           echo "\033[37;44m\033[8]"
       # ou use setterm.
             setterm -foreground white -background blue -store
         endif

  66..33..  AAcceessssoo rreemmoottoo

  acesso remoto Você deve ser capaz de usar o programa setterm como foi
  mostrado acima.  Mais uma vez, isto requer que a máquina remota saiba
  o suficiente sobre o seu terminal, e que o emulador de terminal
  forneça as cores de suporte de entrada no sistema.  Na minha opinião,
  a melhor emulação vt100 atualmente disponível para outras plataformas
  são:

  ·  MS-DOS:         MS-Kermit ( livre, não é um produto da Microsoft )

  ·  Windows 95/NT:  Kermit/95 ( shareware )

  ·  OS/2:           Kermit/95 ( shareware ).  Perceptível através das
     cores padrões do telnet e, pode ser adaptado localmente.

  Veja  <http://www.columbia.edu/kermit/> para detalhes sobre Kermit.



  77..  PPrrooggrraammaa


  Todas as informações descritas aqui estão assumindo uma instalação
  GNU/Linux. Se estiver usando algo diferente ( como por exemplo um Sun
  executando X ), você pode conseguir e compilar o programa sozinho.

  A versão colorida do 'xterm' é baseada na fonte padrão do xterm com um
  programa de correção disponível em qualquer site do X11R6. O xterm
  distribuído com o R6.3 parece que tem um suporte nativo para cores,
  porém não testei.



       ftp://ftp.denet.dk/pub/X11/contrib/utilities/color-xterm-R6pl5-patch.gz




  Veja a documentação se você usa uma versão mais antiga do X. _N_o_t_a_: Não
  tentei isso!


  O 'ls' se encontra no pacote de utilitários GNU disponível em
  prep.mit.edu ou um dos seus vários sites espelhos. Obtenha no mínimo a
  versão 3.13.


       ftp://ftp.denet.dk/pub/gnu/fileutils-3.XX.tar.gz





  Consegui compilar com sucesso o ls com cores em Solaris, SunOS e Irix.


  Apreciaria um retorno sobre esse documento.  Meu endereço de correio
  eletrônico é ravn@dit.ou.dk <mailto:ravn@dit.ou.dk>.

  --

  Thorbjørn Ravn Andersen