Como alternar os layouts de teclado para diferentes idiomas?

10

P: como alterno entre os métodos de entrada para diferentes idiomas ao usar um layout de teclado não padrão?

Eu tenho que editar o texto em dois idiomas diferentes. Eu gostaria de poder usar minhas combinações de teclas nos dois idiomas, exceto, é claro, ao inserir texto no buffer. Parece que eu deveria ser capaz de toggle-input-method( C-\) e selecionar o idioma alternativo.

Até agora, quase tão bom.

Aqui está o problema: eu uso o layout do Dvorak em inglês, que defino no nível do SO (ou seja, com setxkbmap). Quando eu toggle-input-method, o texto que eu inserir estaria correto se eu tivesse um layout QWERTY (o padrão nos EUA), mas sairia sem sentido porque estou em Dvorak. (FWIW, quando mudo meu layout para os EUA padrão, ele funciona bem.)

Então: como faço para informar ao Emacs que estou usando o Dvorak para que toggle-input-methodmeus amigos traduzam minhas teclas para os caracteres corretos no outro idioma?

Dan
fonte
swedish-postfix e outros métodos de entrada de composição funcionam para mim, com quais métodos você está tendo problemas?
Shapr
@ shapr: Estou alternando entre inglês e árabe. O problema parece ser que estou usando um layout Dvorak no nível do SO, pois a alternância funciona bem quando uso o layout padrão dos EUA no nível do SO.
Dan

Respostas:

7

Existe um método para alterar a definição do layout físico para o método de entrada, definindo quail-keyboard-layout-type. Mas parece que o Dvorak não está entre os possíveis candidatos quail-keyboard-layout-alistno meu Emacs 24.4.

Você pode definir um novo layout de teclado físico examinando a definição de quail-keyboard-layout-alistin quail.elou criar um novo método de entrada definindo as teclas em árabe correspondentes para o layout do Dvorak.

Não tenho experiência no primeiro, mas posso testemunhar que o segundo método é mais fácil do que você pensa. (Eu tive que criar um método de entrada turco otomano sobre o farsi.) Copie arabic.el(que reside no meu sistema Debian em /usr/share/emacs/24.4/lisp/leim/quail/arabic.el.gz) para sua casa site-lispe altere as chaves de acordo com suas preferências. Além disso, não esqueça de alterar os nomes dos métodos de entrada, etc. Você acabou de criar um novo método de entrada em árabe Dvorak.

Posso atualizar a resposta com mais detalhes se algo parecer complexo.

Emre Sahin
fonte
Obrigado! Isso me colocou no caminho correto. Vou postar uma resposta adicional que mostra como cheguei lá na ...-alistversão.
Dan
De nada. Você pode enviar sua atualização para o quail-. *-alistdesenvolvimento do Emacs. Tenho certeza de que existem outros usuários do Dvorak que se beneficiarão com isso.
Emre Sahin
7

O @EmreSahin me colocou no caminho certo para responder a essa pergunta, então estou explicando um pouco dos detalhes, caso alguém mais tenha que lidar com um problema como esse.

Como Emre aponta, precisamos adicionar um layout do Dvorak para quail-keyboard-layout-alist. Acontece que a quailbiblioteca não está bem documentada no manual , no qual duas funções relacionadas são mencionadas na passagem em um nó.

No entanto, depois de consultar este tópico de ajuda e, principalmente, a página do EmacsWiki em russo com Dvorak (a partir do qual esta resposta é fornecida), acho que já entendi.

A documentação para a variável quail-keyboard-layoutdescreve o que precisamos inserir quail-keyboard-layout-alist. É uma sequência longa que corresponde a 6 linhas de 15 teclas cada. Cada linha corresponde aos valores não deslocados e deslocados de cada chave, para um total de 30 caracteres por linha. Tenho menos certeza sobre o seguinte ponto, mas parece que, para o que chamarei de teclados "semi-padrão" com 4 linhas de teclas, a primeira e a sexta linhas devem ter 30 espaços em branco.

A grande revelação:

(require 'quail)

(add-to-list 'quail-keyboard-layout-alist
             `("dvorak" . ,(concat "                              "
                                   "  1!2@3#4$5%6^7&8*9(0)[{]}`~  "
                                   "  '\",<.>pPyYfFgGcCrRlL/?=+    "
                                   "  aAoOeEuUiIdDhHtTnNsS-_\\|    "
                                   "  ;:qQjJkKxXbBmMwWvVzZ        "
                                   "                              ")))

(quail-set-keyboard-layout "dvorak")
Dan
fonte