Provided by: manpages-pt_20040726-5_all bug

NOME

       console_codes - Sequëncias de controle e saída do console Linux

DESCRIÇÃO

       O  console  Linux  implementa  um  vasto  subconjunto  de  controles  de  terminais VT102,
       ECMA-48/ISO, 6429/ANSI X3.64, adicionando certas seqüencias em modo privativo para mudar a
       paleta  de  cor,  conjunto  de mapeamento de caracteres, etc.  Na tabela abaixo, a segunda
       coluna fornece os mneumônicos ECMA-48  ou  DEC  (se  prefixado  com  DEC)  para  a  função
       fornecida.  Seqüencias sem um menumônico não são ECMA-48 ou VT102.

       Após  o resultado do processamento normal ter sido concluido e uma seqüencia de caracteres
       ter chegado ao driver de console para a impressão real, a primeira coisa  que  acontece  é
       uma tradução do código usado para o processamento para o código usado para impressão.

       Se  o console está no modelo UTF-8, então o bytes de entrada são primeiramente montados em
       códigos Unicode de 16bits. Caso contrário, cada byte é transformado de acordo com a tabela
       de  mapeamento  atual (o qual é traduzido para um valor Unicode). Veja a seção CONJUNTO DE
       CARACTERES abaixo para um discussão a respeito.

       No caso normal, o valor Unicode é convertido para um  índice  de  fonte  e  armazenado  na
       memória  de video, de forma que o símbolo correspondente (como encontrado na ROM de vídeo)
       aparece na tela.  Note que o uso do Unicode (e o projeto  do  PC)  nos  permite  usar  512
       símbolos simultaneamente.

       Se  o  valor  Unicode  atual  é  um  caractere  de controle ou nós estamos processando uma
       seqüencia de escape, o valor será tratado especialmente. No lugar de ir sendo transformado
       em um índice de fonte e desenhado como um símbolo, ele pode disparar o movimento do cursor
       ou outras funções de controle.  Veja a seção CONTROLES DE CONSOLE  LINUX  abaixo  para  um
       discussão a respeito.

       Geralmente  não  é  uma  boa  prática  fixar  códigos  de controles de terminais dentro de
       programas. O Linux suporta uma base de dados terminfo(5) de capacidades de terminais.   Ao
       invés  de  emitir manualmente uma seqüencia de escape, você irá quase sempre procurar usar
       uma biblioteca de tela terminfo ou utilitários como por exemplo  ncurses(3),  tput(1),  ou
       reset(1).

CONTROLES DE CONSOLE LINUX

       Esta  seção  descreve  todos  os  caracteres de controle e seqüencias de escape que chamam
       funções especiais (isto é, qualquer coisa exceto escrever um símbolo na localização  atual
       do cursor) no console do Linux.

   Caracteres de Controle
       Um  caracter  é  dito  de  controle  se  (antes da transformação de acordo com a tabela de
       mapeamento) ele tem um dos 14 códigos 00 (NUL), 07 (BEL), 08 (BS), 09 (HT),  0a  (LF),  0b
       (VT),  0c  (FF),  0d  (CR),  0e (SO), 0f (SI), 18 (CAN), 1a (SUB), 1b (ESC), 7f (DEL).  Um
       conjunto pode selecionar um modo de 'caracter de controle de exibição'  (veja  abaixo),  e
       permitir que 07, 09, 0b, 18, 1a, 7f sejam exibidos como símbolos.  Por outro lado, em modo
       UTF-8 todos os códigos de 00-1f são respeitados como caracteres de controle,  sem  ligação
       com qualquer modo

       Se  nós  temos  um caracter de controle, ele é manipulado imediatamente e então descartado
       (mesmo que no meio de um seqüencia de escape) e a  seqüencia  de  escape  continua  com  o
       próximo  caracter.   (De  qualquer  forma,  ESC  inicia  uma  nova  seqüencia  de  escape,
       possivelmente abortando uma seqüência anterior  inacabada,  CAN  e  SUB  abortam  qualquer
       seqüencia  de  escape).   Os caracteres de controle reconhecidos são: BEL, BS, HT, LF, VT,
       FF, CR, SO, SI, CAN, SUB, ESC, DEL, CSI. Eles fazem o que é esperado:

       BEL (0x07, ^G) Emite um bip;

       BS (0x08, ^H) Retorna uma coluna (mas não passa do inicio da linha);

       HT (0x09, ^I) Vai para a próxima parada de tabulação ou para o fim da linha se estiver  na
              última tabulação;

       LF (0x0A, ^J), VT (0x0B, ^K) e FF (0x0C, ^L) todos fornecem uma avanço de linha;

       CR (0x0D, ^M) envia um retorno de carro;

       SO  (0x0E,  ^N)  ativa  o  conjunto  de  caracteres  G1,  e  se  LF/NL (modo nova linha) é
              selecionado, envia também um retorno de carro;

       SI (0x0F, ^O) ativa o conjunto de caracteres G0;

       CAN (0x18, ^X) e SUB (0x1A, ^Z) interrompem a seqüencia de escape

       ESC (0x1B, ^[) inicia uma seqüencia de escape;

       DEL (0x7F) é ignorado;

       CSI (0x9B) é equivalente a ESC [.

   ESC - mas não a seqüencia CSI
       ESC c     RIS      Reiniciar.
       ESC D     IND      Alimentação de linha.
       ESC E     NEL      Nova linha.
       ESC H     HTS      Seleciona uma parada de tabulação na coluna atual.
       ESC M     RI       Alimentação reversa de linha.
       ESC Z     DECID    Identificação pritativa DEC. O kernel
                          retorna a cadeia de caracteres ESC [ ? 6 c, reinvindicando
                          que ele é um vt102.
       ESC 7     DECSC    Guarda o estado atual (coordenadas do cursor,
                          atributos, conjunto de caracteres).
       ESC 8     DECRC    Restaura o mais recente estado guardado.
       ESC [     CSI      Introdutor de seqüencia de controle
       ESC %              Inicia uma seqüencia selecionando o conjunto de caracteres.
       ESC % @               Seleciona o padrão (ISO 646 / ISO 8859-1)
       ESC % G               Seleciona UTF-8
       ESC % 8               Seleciona UTF-8 (obsoleto)
       ESC # 8   DECALN   Teste de alinhamento de tela DEC - preenche a tela com E's.
       ESC (              Inicia uma seqüencia definindo o conjunto de caracteres G0.
       ESC ( B               Seleciona o padrão (mapeamento ISO 8859-1)
       ESC ( 0               Seleciona o mapeamento gráfico vt100
       ESC ( U               Seleciona o mapeamento nulo - correto para caracteres ROM
       ESC ( K               Seleciona o mapeamento do usuário - o mapa que
                             é carregado pelo utilitário mapscrn(8).
       ESC )              Inicia uma seqüencia definindo G1.
                          (seguido por um dos B, 0, U, K, como acima).
       ESC >     DECPNM   Seleciona o modo numérico do teclado numérico.
       ESC =     DECPAM   Seleciona o modo de aplicação do teclado numérico.
       ESC ]     OSC      (Comando do Sistema Operacional)
                          ESC ] P nrrggbb: define a paleta com parâmetro
                          passado em 7 dígitos hexadecimaias após o último P :-(
                          Onde n é a cor (0-16) e rrggbb indica os
                          valores RGB, vermelho/verde/azul (0-255).
                          ESC ] R: reinicia a paleta.

   Seqüências ECMA-48 CSI
       CSI (ou ESC [) é seguido por uma seqüência de parâmetros na maioria  NPAR  (16),  que  são
       números   decimais  separados  por  ponto-e-vírgula.  Um  parâmetro  vazio  ou  ausente  é
       interpretado como 0.   A  seqüência  de  parâmetros  pode  ser  precedida  pelo  sinal  de
       interrogação.

       Entretanto,  após  o  CSI  [ (ou ESC [ [) um único caracter é lido e a seqüência inteira é
       ignorada. (A idéia é ignorar uma tecla de função que seja ecoada).

       A ação de uma seqüência CSI é determinada pelo seu caracter final.

       @   ICH       Insere a quantidade de caracteres brancos indicada.
       A   CUU       Move o cursor para cima N linhas.
       B   CUD       Move o cursor para baixo N linhas.
       C   CUF       Move o cursor para a direita N colunas.
       D   CUB       Move o cursor para a esquerda N colunas.
       E   CNL       Move o cursor para baixo N linhas a partir da coluna 1.
       F   CPL       Move o cursor para cima N linhas a partir da coluna 1.
       G   CHA       Move o cursor para a coluna indicada na linha corrente.
       H   CUP       Move o cursor para a linha e coluna indicada (inicio 1,1).
       J   ED        Limpa a tela (padrão: do cursor até o fim da tela).
                     ESC [ 1 J: Limpa do inicio até o cursor.
                     ESC [ 2 J: Limpa a tela toda.
       K   EL        Limpa a linha (padrão: do cursor até o fim da linha).
                     ESC [ 1 K: Limpa do inicio da linha até o cursor.
                     ESC [ 2 K: Limpa a linha inteira.
       L   IL        Insere N linhas em branco.
       M   DL        Apaga N linhas.
       P   DCH       Apaga N caracteres na linha atual.
       X   ECH       Apaga N caracteres na linha atual.
       a   HPR       Move o cursor para a direita N colunas.
       c   DA        Responde ESC [ ? 6 c: `Eu sou um VT102'.
       d   VPA       Move o cursor para a linha indicada mantendo a coluna atual
       e   VPR       Move o cursor para baixo N linhas.
       f   HVP       Move o cursor para a linha e coluna indicada.
       g   TBC       Sem parâmetro: limpa tabulação na posição atual.
                     ESC [ 3 g: apaga todas as tabulações.
       h   SM        Modo de Configuração (Veja abaixo).
       l   RM        Modo de Reinicialização (Veja abaixo).
       m   SGR       Define atributos (Veja abaixo).
       n   DSR       Relata o Estado (Veja abaixo).
       q   DECLL     Define os LEDs do teclado.
                     ESC [ 0 q: Limpa todos os LEDs
                     ESC [ 1 q: LED Scroll Lock
                     ESC [ 2 q: LED Num Lock
                     ESC [ 3 q: LED Caps Lock
       r   DECSTBM   Define região de rolagem; Parâm.: Linha superior e inferior
       s   ?         Grava a localização do cursor.
       u   ?         Restaura a localização do cursor.
       `   HPA       Move o cursor na linha atual para a coluna indicada.

   ECMA-48 Define a Apresentação Gráfica
       O ECMA-48 SGR seqüência ESC [ <parâmetros> m define  os  atributos  de  exibição.   Vários
       atributos podem ser definidos na mesma seqüência.

       par   resultado
       0     Ajusta todos os atributos para os valores padrões
       1     Negrito
       2     Meio Brilho (simulado com cor em um monitor colorido)
       4     Sublinhado (simulado com cor em um monitor colorido)
             (As cores usadas para simulação são definidas
             usando ESC ] )
       5     Piscante
       7     Vídeo Reverso
       10    Reinicia para o mapeamento selecionado, mostra o sinal de controle
             e alterna meta sinalizadores.
       11    Seleciona mapeamento nulo, define o sinal de controle, reinicia
             meta sinalizadores.
       12    Seleciona mapeamento nulo, define o sinal de controle, alterna
             meta sinalizadores. (A alternância dos meta sinalizadores
             alternar o bit de alta ordem do byte antes
             que a tradução da tabela de mapeamento seja concluida).
       21    Intensidade normal (Não é compatível com ECMA-48)
       22    Intensidade normal
       24    Desativa Sublinhado

       25    Desativa Piscante
       27    Desativa Vídeo Reverso
       30    Cor de Frente Preta
       31    Cor de Frente Vermelha
       32    Cor de Frente Verde
       33    Cor de Frente Marrom
       34    Cor de Frente Azul
       35    Cor de Frente Magenta
       36    Cor de Frente Ciano
       37    Cor de Frente Branca
       38    Ativa Sublinhado, define cor de frente padrão
       39    Desativa Sublinhado, define cor de frente padrão
       40    Cor de Fundo Preta
       41    Cor de Fundo Vermelha
       42    Cor de Fundo Verde
       43    Cor de Fundo Marrom
       44    Cor de Fundo Azul
       45    Cor de Fundo Magenta
       46    Cor de Fundo Ciano
       47    Cor de Fundo Branca
       49    Define Cor de Fundo Padrão

   Opções do Modo ECMA-48
       ESC [ 3 h
              DECCRM (Padrão Desativado): Caracteres de Controle de Exibição.

       ESC [ 4 h
              DECIM (Padrão Desativado): Define Modo de Inserção.

       ESC [ 20 h
              LF/NL (Padrão Desativado): Automáticamente segue o eco do LF, VT ou FF com CR.

   ECMA-48 Comandos de Resultado de Estado
       ESC [ 5 n
              Informa o estado do dispositivo (DSR): A resposta é ESC [ 0 n (Terminal OK).

       ESC [ 6 n
              Informa  a  posição  do  cursor  (CPR):  A  resposta  é ESC [ y ; x R, onde x,y é a
              localização do cursor.

   DEC Seqüência do Modo Privado (DECSET/DECRST).
       Ele não é descrito no ECMA-48. Nós listamos a seqüência  dos  modos  de  configuração;  as
       seqüências do Modo de Reinicialização são obtidas pela troca do `h' final por `l'.

       ESC [ ? 1 h
              DECCKM  (Padrão Desativado): Quando definido, as teclas de cursor enviam um prefixo
              ESC O, ao invés de ESC [.

       ESC [ ? 3 h
              DECCOLM (Padrão Desativado = 80 colunas): Alterna de 80/132 colunas. Este parâmetro
              sozinho  nem  sempre  é  suficiente,  alguns  utilitários  em  modo usuá rio como o
              resizecons(8) altera os registradores do equipamento na placa de vídeo.

       ESC [ ? 5 h
              DECSCNM (Padrão Desativado): Define o modo de vídeo reverso.

       ESC [ ? 6 h
              DECOM (Padrão Desativado): Quando definido, o endereçamento do cursor é relativo ao
              canto superior esquerdo da região de rolagem.

       ESC [ ? 7 h
              DECAWM  (Padrão  Ativo): Define quebra de linha automática. neste modo, um caracter
              gráfico emitido após a coluna 80 (ou coluna 132 se DECCOLM ativo) força uma  quebra
              para o inicio da primeira linha seguinte.

       ESC [ ? 8 h
              DECARM (Padrão Ativo): Define autorepetição do teclado ativo.

       ESC [ ? 9 h
              X10  Informações  do Mouse (Padrão Desativado): Define o modo de informações para 1
              (ou reinicia para 0) - veja abaixo.

       ESC [ ? 25 h
              DECCM (Padrão Ativo): Torna o cursor visivel.

       ESC [ ? 1000 h
              X11 Informações do Mouse (Padrão Desativado): Define o modo de informações  para  2
              (ou reinicia para 0) - veja abaixo.

   Seqüência de Console Linux Privada - CSI
       As seqüências a seguir não são ECMA-48 nem VT102 nativa. Elas são nativas para o driver de
       console Linux. As cores estão nos parâmetros SGR: 0 = preta, 1 = vermelha, 2 = verde, 3  =
       marrom, 4 = azul, 5 = magenta, 6 = ciano, 7 = branca.

       ESC [ 1 ; n ]       Define cor n como cor de sublinhado
       ESC [ 2 ; n ]       Define cor n como cor dim
       ESC [ 8 ]           Torna o par de cor atual os atributos padrões.
       ESC [ 9 ; n ]       Ajusta o tempo de tela preta para n minutos.
       ESC [ 10 ; n ]      Ajusta a freqüencia do bip em Hz.
       ESC [ 11 ; n ]      Ajusta a duração do bip em segundos.
       ESC [ 12 ; n ]      Traz a console especificada para a frente.
       ESC [ 13 ]          Exibe a tela.
       ESC [ 14 ; n ]      Define o tempo para redução de consumo energia (VESA).

CONJUNTO DE CARACTERS

       O  Linux  conhece  entorno  de  4 traduções de bytes em símbolos de console de tela.  As 4
       tabelas são: a) Latin1 -> PC,  b) VT100 gráfico -> PC, c) PC -> PC, d) definição-usuário.

       Existem dois conjuntos de caracteres chamados G0 e G1 e um deles é  o  conjunto  corrente.
       (Inicialmente G0.)  Digitar ^N torna o G1 o corrente, ^O torna o G0 corrente.

       Estas  variáveis  G0  e G1 estão na tabela de tradução e podem ser alteradas pelo usuário.
       Inicialmente elas apontam a tabela a) e b), respectivamente.  As seqüências ESC ( B e  ESC
       (  0  e  ESC  (  U  e  ESC ( K fazem G0 apontar para a tabela de tracução a), b), c) e d),
       respectivamente.  As seqüências ESC ) B e ESC ) 0 e ESC ) U e ESC )  K  fazem  G1  apontar
       para a tabela de tradução a), b), c) e d), respectivamente.

       A  seqüência ESC c reinicializa o terminal, que é o que você vai querer se a tela está com
       sujeiras. O aviso "echo ^V^O" tornará apenas G0 corrente, mas não há garantias de  que  G0
       aponta  a  tabela a).  Em algumas distribuições há um programa reset(1) que apenas executa
       um "echo ^[c".  Se sua entrada terminfo para a console está correta  (e  tem  uma  entrada
       rs1=\Ec), então "tput reset" funcionará.

       A  tabela  de  mapeamento  definida  pelo usuário pode ser usada através do mapscrn(8).  O
       resultado do mapeamento é que se o símbolo c é impresso, o símbolo s =  map[c]  é  enviado
       para  a  memória  de vídeo. O bitmap que corresponde a s é encontrado na ROM de caracter e
       pode ser alterado usando o setfont(8).

RASTREAMENTO DO MOUSE

       A facilidade de rastreamento do mouse pretende retornar informações  de  estado  do  mouse
       compatível  com xterm. Devido ao controlador de console não ter como saber o dispositivo e
       o tipo do mouse, estas informações são retornadas  na  seqüência  de  entrada  da  console
       apenas  quando  o controlador de terminal virtual recebe uma atualização através do ioctl.
       Estes ioctls são gerados pela aplicação relacionada ao mouse em modo usuário, tal como,  o
       gpm(8).

       Parâmetros  para  todas  as  seqüências escape de rastreamento do mouse geradas pelo xterm
       codificam parâmetros numéricos em um simples caracter como valor+040. Por exemplo, `!'  is
       1. O sistema de coordenada de tela é baseado em 1.

       O modo de compatibilidade X10 envia um seqüência escape ao pressionar um botão codificando
       a localização e o botão pressionado.  Isto é habilitado enviando ESC [ ? 9 h e  desativado
       com  ESC [ ? 9 l.  Ao pressionar o botão, o xterm envia ESC [ M bxy (6 caracteres). Aqui b
       é o botão-1, e x e y são as coordenadas x e y do mouse quando  o  botão  foi  pressionado.
       Este é o mesmo código que o núcleo também produz.

       O  modo  de  rastreamento  normal  (não  implementado no Linux 2.0.24) envia uma seqüência
       escape quando o botão é pressiondo e liberado. Modificadores  de  informações  também  são
       enviados.  Isto  é  habilitado  enviado  ESC  [ ? 1000 h e desativado com ESC [ 1000 l. Ao
       pressionar e liberar o botão, o xterm envia ESC [ M bxy. Os dois bits baixos de b codifica
       informações do botão: 0=MB1 pressionado, 1=MB2 pressionado, 2=MB3 pressionado, 3=liberado.
       Os bits altos codificam que os modificadores foram teclados quando o botão foi pressionado
       e  acrescentado junto: 4=Shift, 8=Meta, 16=Control. De novo x e y são as coordenadas x e y
       do mouse. O canto superior esquerdo é (1,1).

COMPARAÇÃO COM OUTROS TERMINAIS

       Diferentes tipos de terminais são descritos, com a console Linux sendo `VT100-compatível'.
       Aqui nós discutimos diferenças entre a console Linux e outros dois mais importantes, o DEC
       VT102 e xterm(1).

   Tratamento dos caracteres de controle
       O vt102 também reconhece os seguintes caracteres de controle:

       NUL (0x00) foi ignorado;

       ENQ (0x05) resposta disparada;

       DC1 (0x11, ^Q, XON) transmissão reiniciada;

       DC3 (0x13, ^S, XOFF) faz o vt100 ignorar (e parar de transmitir) todos os  códigos  exceto
              XOFF e XON.

       O processamento DC1/DC3 similar ao VT100 pode ser habilitado pelo driver tty.

       O  programa xterm (no modo vt100) reconhece os caracteres de controle BEL, BS, HT, LF, VT,
       FF, CR, SO, SI, ESC.

   Seqüências Escape
       Seqüências de console VT100 não implementadas na console Linux:

       ESC N       SS2   Shift Simples 2. (Seleciona o conj. de caracteres G2
                         para o próximo caracter apenas.)
       ESC O       SS3   Shift Simples 3. (Seleciona o conj. de caracteres G3
                         para o próximo caracter apenas.)
       ESC P       DCS   Caracteres de Controle de Dispositivo (terminada por ESC \)
       ESC X       SOS   Inicio de cadeia de caracteres.
       ESC ^       PM    Mensagem privada (terminada por ESC \)
       ESC \       ST    Terminador de cadeia de caracteres
       ESC * ...         Conjunto de caracteres G2 especificado
       ESC + ...         Conjunto de caracteres G3 especificado

       O programa xterm (no modo vt100) reconhece ESC c, ESC # 8, ESC >, ESC =, ESC D, ESC E, ESC
       H,  ESC  M,  ESC  N, ESC O, ESC P ... ESC  ESC Z (ele responde ESC [ ? 1 ; 2 c, `Eu sou um
       vt100 com opções avançadas de vídeo') e ESC ^ ... ESC  com o  mesmo  significado  indicado
       acima.   Ele  aceita  ESC  (,  ESC  ),  ESC  *,  ESC + seguido por 0, A, B para o caracter
       especial DEC e a definição do desenho de  linha,  UK,  e  USASCII,  respectivamente.   Ele
       aceita ESC ] para a definição de certos recursos:

       ESC ] 0 ; txt BEL      Define o nome do ícone e título da janela para txt

       ESC ] 1 ; txt BEL      Define o nome do ícone para txt.
       ESC ] 2 ; txt BEL      Define o título da janela para txt.
       ESC ] 4 6 ; nome BEL   Muda o arquivo de registro para nome (normalmente
                              desabilitado por opção de compilação)
       ESC ] 5 0 ; fn BEL     Define o fonte para fn.

       Ele reconhece as seqüências a seguir com significado ligeiramente diferente:

       ESC 7  DECSC   Grava o cursor
       ESC 8  DECRC   Restaura o cursor

       Ele também reconhece

       ESC F          Cursor para o canto inferior esquerdo da tela (se
                      habilitado por hpLowerleftBugCompat)
       ESC l          Bloqueia Memória (para terminais HP).
                      Bloqueia memória acima do cursor.
       ESC m          Desbloqueia Memória (para terminais HP).
       ESC n   LS2    Invoca o conjunto de caracteres G2.
       ESC o   LS3    Invoca o conjunto de caracteres G3.
       ESC |   LS3R   Invoca o conjunto de caracteres G3 como GR.
                      Não tem efeito visível no xterm.
       ESC }   LS2R   Invoca o conjunto de caracteres G2 como GR.
                      Não tem efeito visível no xterm.
       ESC ~   LS1R   Invoca o conjunto de caracteres G1 como GR.
                      Não tem efeito visível no xterm.

       Ele não reconhece ESC % ...

   Seqüência CSI
       O  programa xterm (como o do XFree86 3.1.2G) não reconhece os modos: piscante ou invisível
       SGRs. Algumas versões do X11R6 não reconhecem o conjunto de cores SGRs.  Todas  as  demais
       seqüências  ECMA-48  CSI  reconhecidaas  pelo Linux, também são reconhecidas pelo xterm, e
       vice-versa.

       O programa xterm reconhecerá todas as seqÜências do modo privado DEC listadas acima,  mas,
       não as seqüências do modo privado Linux. Para uma discussão das seqüências de modo privado
       do xterm's , refira-se ao documento Seqüências de  Controle  do  Xterm  de  Edward  Moy  e
       Stephen Gildea, disponível com a distribução do X.

PROBLEMAS

       Na versão 2.0.23, o CSI é interrompido e o NUL não é ignorado dentro da seqüência escape.

VEJA TAMBÉM

       console(4), console_ioctl(4), charsets(7)

TRADUZIDO POR LDP-BR em 21/08/2000.

       Fábio   Henrique  F.  Silva  <fabiohfs@eol.com.br>  (tradução)  André  L.  Fassone  Canova
       <lonelywolf@blv.com.br> (revisão)