Como preservar as combinações de teclas do emacs ao alterar o layout do teclado?

7

Imagine que você altere o layout do teclado. Você tem que gastar tempo treinando seus músculos para encontrar as teclas que deseja digitar, isso já é bastante difícil.

Mas você também precisará gastar tempo treinando seus músculos para encontrar as teclas que deseja inserir como parte dos atalhos, o que é ridículo (geralmente você as escolhe por serem fáceis de alcançar, não por causa da letra *).

Existe uma maneira de essas definições de teclas não se moverem quando você altera o layout do teclado?

Por exemplo, se eu estiver azerty e quiser aprender qwerty, gostaria de beginning-of-lineremapear de C-apara C-q, para que fique onde está no meu teclado (primeira tecla à direita de TAB).

Pelo que entendi, é parcialmente implementado por meio de métodos de entrada, mas segue o caminho oposto: muda a maneira como o emacs interpreta os caracteres de entrada para o texto. Mas não funcionará se você quiser alterar o layout do teclado em todo o sistema, por exemplo.

Entendo que existem várias maneiras de definir associações de teclas, mas, por exemplo, eu consideraria aceitável uma solução que cuide de todas as associações de teclas convertidas de cadeias humanas com a kbdfunção


* Não é verdade para determinadas chaves usadas com menos frequência. Por exemplo, o C-cmapa da maioria dos principais modos usa nomes de teclas fáceis de lembrar, e não fáceis de acessar. Como uma questão de bônus, seria bom poder preservar (remapear para que a chave física não se movesse) algumas combinações de teclas e mover (não remapear, a letra associada à chave não muda) outras. O usuário pode selecionar uma opção ou outra usando duas funções diferentes em vez de kbddefinir suas combinações de teclas.

T. Verron
fonte
11
Se você puder encontrar uma solução que detecte um layout de teclado específico no Emacs, poderá remapear programaticamente com base nessa detecção. Há uma questão relacionada com nenhuma resposta correta, intitulado Emacs determinar layout de teclado : stackoverflow.com/questions/7813648/...
lawlist
@lawlist Eu não tinha o cenário de "alternância frequente" em mente, pelo menos com a frequência suficiente para alterar uma opção no arquivo init toda vez que isso acontece não é razoável. Com certeza, a detecção automática seria ainda melhor, mas se você tiver uma solução que exija que o usuário informe o emacs sobre seus mapas de teclas, ficarei feliz em aceitá-la.
T. Verron
@ T.Verron tenho certeza de que a resposta é que você não pode, com o GNU emacs. Você pode usar um pacote de combinação de teclas do emacs que usa a mesma posição de atalho, independentemente do layout atual do teclado. (O ergoemacs-mode faz isso, mas não é o teclado padrão do GNU Emacs). Acho que o modo maligno também pode. Basicamente, o pacote de combinação de teclas precisa fornecer uma camada.
Xah Lee 17/07

Respostas:

1

Tanto quanto eu entendo sua pergunta, key-translation-mapparece uma boa alma para o seu problema. Por exemplo, se você gostaria de C-qagir como C-ano seu exemplo, você definiria o seguinte:

  (define-key key-translation-map (kbd "C-q") (kbd "C-a"))
clemera
fonte