Onde o atalho Ctrl + / (^ /) bash para desfazer é definido?

1

Não consigo encontrar o mapeamento em bind -p nem em stty -a . Além disso, ele só funciona nos emuladores de terminal que eu tentei (xterm, konsole, gnome-terminal) e não no console do sistema linux. Eu acho que é tradicionalmente um mapeamento do emacs.

EDIT: Quando eu digito ^V^/ bash imprime ^_ , que é mapeado para desfazer na ligação. Mas onde está ^/ mapeado para ^_ ?

    
por bug 04.07.2013 / 11:00

2 respostas

2

É o emulador de terminal que o gera (ele recebe um evento X bruto e gera um fluxo de bytes e o tratamento do pseudo-terminal não possui uma noção de teclas modificadoras, ^_ é um caractere de controle do código 037).

A origem desse mapeamento provavelmente está no VT100, que mapeou CTRL-? e CTRL-/ ao personagem 037 e aparentemente não mapeou CTRL-_ para nada. Emuladores de terminal Tentei mapear CTRL-? para 037 de 177.

O

VT220 fez outra coisa, mas alguns de seus mapeamentos ainda estão disponíveis pelo menos em um XTerm.

    
por 04.07.2013 / 12:03
0

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:

por 10.04.2016 / 01:04