Então, eu estou escrevendo uma emulação de terminal (eu sei, eu devo apenas compilar massa, etc.) e estou no estágio de vasculhar o vttest para garantir que esteja certo. Estou baseando-o no VT102 por enquanto, mas adicionarei mais tarde recursos de terminal, como cores, quando o básico estiver funcionando corretamente.
O conjunto de comandos é principalmente ANSI. O DEC tinha seu próprio conjunto de comandos, mas suportou os comandos ANSI desde 1973. Esses padrões ANSI aparentemente não estão disponíveis agora, mas os equivalentes ECMA estão, eu os tenho (o ECMA-48 parece ser mais relevante), mas não responde a essa pergunta na medida em que eu pode ver. A maioria das seqüências de comandos ANSI começa com ESC. Muitos comandos começam com o identificador de sequência de comandos mostrado aqui como CSI e representado nos dados como 0x1c 0x5b (ESC [
) ou 0xdb se a comunicação de 8 bits for possível. Em seguida, seguiu uma sequência identificando o comando. Alguns comandos afetam a posição do cursor, alguns na tela, outros provocam uma resposta ao host e assim por diante.
Alguns comandos do terminal incluem um argumento numérico. Exemplo CSI 10 ; 5 H
significa colocar a posição do cursor na linha 10, coluna 5. Quando o argumento numérico está ausente, há um valor padrão a ser usado: CSI 10 ; H
significa colocar a posição do cursor na linha 10, coluna 1, porque 1 é o valor padrão quando um argumento não é fornecido.
Eu tenho o manual vt102 do vt100.net (ótimo recurso) e cerca de uma dúzia de páginas fornecendo informações parciais sobre essas seqüências de comando. Aparentemente, a especificação completa do terminal DEC do evangelho nunca saiu do DEC.
O que está claro é que CSI C
é mover o cursor para a direita e que o valor padrão é 1.
O que não está claro é qual é o significado de CSI 0 C
.
Por que ter um zero lá, parece que o comando não faz nada? Se isso significa "usar o valor padrão", ele poderia ter sido enviado como 1, mas a cadeia mais curta não teria argumento e dependeria do valor padrão ser interpretado como 1 de qualquer maneira. Esses terminais físicos reais do VT eram frequentemente usados a 300 bauds e abaixo, de modo que o único caractere importava!
Não sou tão avançado com o vttest que posso apenas tentar dos dois lados e ver o que torna tudo perfeito, mas estou longe o suficiente para que pequenas perguntas como essa estejam começando a importar.
fonte
[
, que pode ser codificado como a sequência de dois caracteresESC [
ou como[
no conjunto de 8 bits. (Alguns modelos podem suportar apenasESC [
) Não sei o queCSI 0 C
fez no vt102; no xterm é equivalente aCSI 1 C
. Eu suspeito, mas não sei ao certo, que 0 e a ausência de um valor são analisados de forma idêntica em algum momento (penseatoi
). Você procurou comentários na fonte xterm?Respostas:
Entrei em contato com Thomas Dickey (invisible-island.net), que mantém o xterm e o vttest - ele explicou que
CSI 0 C
é o mesmo queCSI 1 C
ouCSI C
no xterm.Para quem procura mais informações sobre programação de terminais, recomendo verificar a fonte xterm que ele hospeda - especificamente o ctlseqs.txt dentro do xterm, que se parece muito com a única referência verdadeira de sequências de controle de terminal que eu estava procurando.
fonte
Por que compatibilidade com hardcode para um tipo de terminal específico quando você já possui um banco de dados mapeando a funcionalidade para sequências de código específicas para vários terminais diferentes? (o banco de dados terminfo geralmente está em / usr / share e está incluído na maioria das distribuições ncurses). Qualquer recurso sobre maldições deve explicar como essas funções são rotuladas.
Observe que os arquivos terminfo geralmente são compilados (usando o tic); portanto, talvez você precise cavar um pouco para encontrar os arquivos de origem terminfo.
Veja também http://tldp.org/HOWTO/Text-Terminal-HOWTO.html#toc16 (existe um link no repositório de arquivos terminfo.src)
fonte