Emulando sequências de escape do VT220 no keytab do Konsole

4

After a little futile hacking, I realised that . . . I would need to properly map the HHK keyboard so that I could use the various meta-keys. Thus began my descent into hell.

Doug Palmer, An Unreliable Guide to XKB Configuration

Estou tentando configurar o Konsole para emitir sequências de escape no estilo VT220 a partir do teclado numérico quando o modo de teclado numérico de aplicativos estiver ativado (por exemplo, por echoti smkx ). Em particular, as seguintes seqüências de controle devem ser a saída sob as condições descritas:

link

É preciso estar ciente de que inserir a variável de ambiente TERM é o mesmo que mentir para o shell sobre os recursos do terminal e geralmente deve ser evitado. Basta definir TERM=xterm-vt220 como insuficiente e causar um comportamento inesperado.

Eu tenho uma solução simples, mas parcial. O Konsole permite a configuração de suas associações de teclas de terminal na forma de arquivos .keytab . As seguintes adições são efetivas, salvas em .local/share/konsole/VT220.keytab :

keyboard "VT220"
key 0+KeyPad+AppCursorKeys : "\EOp"
key 1+KeyPad+AppCursorKeys : "\EOq"
key 2+KeyPad+AppCursorKeys : "\EOr"
key 3+KeyPad+AppCursorKeys : "\EOs"
key 4+KeyPad+AppCursorKeys : "\EOt"
key 5+KeyPad+AppCursorKeys : "\EOu"
key 6+KeyPad+AppCursorKeys : "\EOv"
key 7+KeyPad+AppCursorKeys : "\EOw"
key 8+KeyPad+AppCursorKeys : "\EOx"
key 9+KeyPad+AppCursorKeys : "\EOy"
key ++KeyPad+AppCursorKeys : "\EOk"
key *+KeyPad+AppCursorKeys : "\EOj"
key .+KeyPad+AppCursorKeys : "\EOn"
key -+KeyPad+AppCursorKeys : "\EOm"
key Enter+KeyPad : "\EOM"

Com essas combinações de teclas aplicadas (juntamente com quaisquer outras que possam estar presentes), konsole emitirá as mesmas seqüências de controle que xterm quando o modo de teclado de aplicativo estiver habilitado e NumLock estiver ativado. Essas sequências são úteis para aplicativos que esperam a emulação de VT220, pois identificam de maneira exclusiva as teclas digitadas no teclado numérico, permitindo que funções arbitrárias sejam vinculadas a elas.

Uma chave do teclado comum está faltando na minha configuração: / (Qt :: Key_Slash). O editor de ligação de chave gráfica do Konsole não parece reconhecer qualquer referência a essa chave, seja por nome ou expressa como um literal. Se for escrito manualmente no arquivo .keytab , o Konsole irá ignorá-lo e a linha não aparecerá no editor da GUI. Isso deixa um buraco muito chato no meu teclado, onde exatamente uma chave é teimosamente improgramável.

Eu prefiro não entrar nas ervas daninhas com xkb e amigos; mas é claro que baunilha xterm faz tudo isso fora da caixa, demonstrando que não é necessário mexer nas combinações de teclas em um nível tão baixo neste caso. Parece, em vez disso, que o Konsole (ou QT) está fazendo algo único e com o snowflakey no topo do X.

Pergunta: É possível no Konsole reconectar a tecla / do teclado numérico a uma sequência de controle diferente? Alternativamente, esse é o ponto em que algo que opera em um nível diferente (como terminfo , xkb ou xterm-keys de tmux ) seria mais eficaz? Eu, talvez, enlouqueci?

Qualquer percepção de outros intrépidos comandantes de console seria apreciada.

    
por nethershaw 12.02.2017 / 05:18

1 resposta

3

O Konsole ignora isso, porque depende de uma lista de chaves codificadas que não podem ser mapeado :

// Override any of the following shortcuts because
// they are needed by the terminal
int keyCode = keyEvent->key() | modifiers;
switch (keyCode) {
    // list is taken from the QLineEdit::event() code
case Qt::Key_Tab:
case Qt::Key_Delete:
case Qt::Key_Home:
case Qt::Key_End:
case Qt::Key_Backspace:
case Qt::Key_Left:
case Qt::Key_Right:
case Qt::Key_Slash:
case Qt::Key_Period:
case Qt::Key_Space:
    keyEvent->accept();
    return true;
}
return false;
    
por 12.02.2017 / 16:55