Como regra geral, o modificador control atua nos caracteres ASCII removendo todos pelos últimos 5 bits. Isso mapeia vários caracteres diferentes no intervalo 0..31
usado para caracteres de controle ASCII.
Com base nessa regra, espera-se que eles mapeiem para o 031, usando o modificador control :
037 31 1F US (unit separator)
077 63 3F ?
137 95 5F _
177 127 7F DEL
e estes não seriam:
057 47 2F /
117 79 4F O
157 111 6F o
Como alternativa, o modificador control poderia se aplicar somente a caracteres no intervalo 32..63
, usando a analogia da tecla shift que é útil em ASCII para mapear o intervalo 64..94
a 96..126
(alfabetos maiúsculos / minúsculos). Nesse caso, eles podem mapear para 031
:
037 31 1F US (unit separator)
057 47 2F /
077 63 3F ?
e (já faz um tempo), @ a observação do programador parece familiar. Mas não está no manual do VT100. Em Capítulo 3 , aponta para uma tabela que documenta chaves e seus equivalentes de controle. Que usa códigos do intervalo completo de 95 caracteres (32, 126), mas documenta apenas um caso para cada caractere de controle. Os outros personagens possíveis são todos não documentados. Mas note que a tabela documenta controle ? . No meu teclado, ? é uma tecla deslocada . As imagens que eu acho do teclado VT100 não o têm como uma chave não deslocada. E (sem surpresa) o código não mudado para essa chave particular é / . O DEC pode ter documentado isso com base nas chaves existentes de um terminal anterior, mas da mesma forma que possivelmente elas fizeram isso para manter a tabela curta.
No entanto, a conversão não é totalmente até xterm
. Ele recebe eventos X que possuem determinados códigos de tecla juntamente com informações do modificador. De modo geral, esses códigos de teclas correspondem às letras mostradas em seu teclado, enquanto os modificadores, como shift e control , são transmitidos separadamente. xterm
usa uma função de tempo de execução do X, como Xutf8LookupString
ou XmbLookupString
para combinar alguns eventos (como shift ). É aí que a decisão é feita para traduzir esses caracteres de controle. xterm
depois refina / altera as informações para chaves especiais (como backspace
), mas a maior parte da conversão é feita nas bibliotecas X usando a configuração do teclado.
Leitura adicional: