Eu escrevi um documento em 1984 que resume os códigos ANSI X3.64-1979, ANSI X3.4-1977 e ANSI X3.41-1974. Este ansicode.txt descreve como os códigos de controle afetam os terminais de impressão em série da DEC LA e os terminais de vídeo da série VT.
Existem emparelhamentos comuns de seqüências de escape para caracteres de controle ASCII, como Ctrl-C e Ctrl-Z para ETX e SUB, respectivamente.
Na página da Wikipédia Códigos de Controle , há mais pareamentos, mas nenhuma referência citada. / p>
O par de caracteres de controle e seqüência de teclas faz parte de um padrão?
Onde isso é listado para Linux e outros sistemas operacionais?
Existem páginas de manual que listam esses pares?
São puramente décadas de convenção não escrita?
Referências
stty -a
lista alguns para o seu sistema Eu escrevi um documento em 1984 que resume os códigos ANSI X3.64-1979, ANSI X3.4-1977 e ANSI X3.41-1974. Este ansicode.txt descreve como os códigos de controle afetam os terminais de impressão em série da DEC LA e os terminais de vídeo da série VT.
Os emparelhamentos são "o alfabeto latino", de 1 a 26 (e também o resto relevante do ASCII).
Ctrl-C fornece ETX, valor de byte 3 ( 0x03
, 000000011
); C
é ASCII 67 ( 0x43
, 010000011
). Flip bit 7 (adicionar / subtrair 64) para ir de um para o outro. SUB é o valor de byte 26 e assim por diante, conforme listado na página da Wikipedia que você mencionou em ordem de 1-26 e AZ.
Os outros controles C0 correspondem a Ctrl e outros caracteres não-alfabéticos: NUL é Ctrl - @ , pois @
é ASCII 64 e [
( 91) corresponde a ESC (27), e assim por diante até você atingir o espaço.
ASCII define esses bytes com esses rótulos e (um pouco) o que significa, assim como o Unicode, e várias outras codificações padrões. O uso de Ctrl para inverter esse bit é determinado pelo terminal ou driver de entrada, mas o nome "caracteres de controle" é bastante sugestivo de como esse pareamento acontece. Eles terão a mesma correspondência entre letra e byte em qualquer sistema seguindo essa tradição.
Por outro lado, muitos dos controles ASCII e suas sequências-chave não são usados ou usados para propósitos diferentes dos originalmente previstos, em sistemas modernos semelhantes ao Unix, pelo menos. Ctrl-C e Ctrl-D ainda são razoavelmente paralelos no efeito que têm, mas Ctrl-V é normalmente usado para iniciar entradas literais. dias em vez de ocioso síncrono, por exemplo, e nunca vi um separador de grupo em estado selvagem.
Podemos descartar que isso faz parte do POSIX. POSIX tenta evitar exigir o conjunto ASCII completo ou as codificações ASCII (valores numéricos) , em que este mapeamento é baseado. Por exemplo, o caractere ETX que você mencionou não é requerido pelo POSIX. Nem o POSIX menciona nada sobre o Control-C / ETX ou o Control-Z / SUB como padrões ao discutir os caracteres usados para INTR e SUSP , por exemplo.
Como apontado por outros, o comportamento da tecla Control não é inerentemente parte da definição de um conjunto de caracteres / codificação de caracteres. Parece que o mapeamento da chave de controle não foi especificado como parte do ASCII. Nem parece fazer parte da série de padrões de terminais ANSI.
Acho que você pode explicar parcialmente a expectativa desse comportamento em termos do VT100 / VT102 ter se tornado o padrão de fato, embora eu espere que o comportamento seja anterior a ele. Consulte " Qual protocolo / padrão é usado pelos terminais? "
Consulte o Guia do Usuário do VT102, "Caracteres transmitidos" - > "Teclas de função" - > "Controlar teclas de caracteres".
Figure 4-3 shows the keys that generate control characters. You can generate control characters in two ways.
- Hold down CTRL and press any unshaded key in Figure 4-3.
- Press any shaded key in Figure 4-3 without using CTRL. These dedicated keys generate control characters without the use of CTRL.
Table 4-2 lists the control characters generated by the keyboard. Different computer systems may use each control character differently.
NOTE: The VT102 generates some control characters differently than previous DIGITAL terminals. Table 4-3 lists the changes.
Eu achei esta última nota particularmente interessante. O VT102 usa o espaço de controle para NUL, enquanto os "terminais anteriores" da Digital usaram Control- @. Também altera as fugas para os dois últimos controles C0, RS e US. (Eu me pergunto como isso se encaixa no padrão de lançar o bit 7). O VT100 também usa o espaço de controle , então eu assumo que "terminais anteriores" se referem ao VT52 família.
Isso não é replicado em drivers de hardware diferentes, por exemplo, Teclado PS / 2 v.s. Teclado USB. Em vez disso, ele é tratado no Camada VT . Veja vt/keyboard.c
. O estado dos modificadores de teclado, incluindo Control, é mantido em shift_state
. O estado de mudança é então usado para selecionar um mapa de teclas.
param.shift = shift_final = (shift_state | kbd->slockstate) ^ kbd->lockstate;
param.ledstate = kbd->ledflagstate;
key_map = key_maps[shift_final];
Então, para mais informações, acho que você teria que pesquisar os keymaps usados pela camada VT. Presumo que o mapa de chaves do Controle esteja configurado para produzir o pareamento que você descreve.
A página do manual loadkeys também menciona o mapa de chaves padrão do kernel. Isso foi movido desde que a página man foi escrita; agora está localizado em drivers / tty / vt / defkeymap.c_shipped . Para ler essas tabelas, você deve conhecer as codecs do Linux usadas para indexá-las. Eles são baseados em um teclado QWERTY, portanto as letras não são alfabéticas nem contíguas. Consulte include / uapi / linux / input-event -codes.h . Ou melhor, esta tabela que mostra os códigos de teclas e o mapeamento de controle padrão.