Provided by:
manpages-pt_20040726-2_all 
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)