As seqüências de escape ASCII e os caracteres de controle são parte de um padrão?

3

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

por novelistparty 13.05.2018 / 03:18

3 respostas

3

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.

    
por 13.05.2018 / 08:34
6

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.

    
por 13.05.2018 / 05:15
2

Padronização de jure - talvez não

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.

Padronização de fato - o VT100?

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.

kernel do Linux

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];

link

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.

    
por 13.05.2018 / 13:17