Comment changer la disposition du clavier pour différentes langues?

10

Q: comment basculer entre les méthodes de saisie pour différentes langues lors de l'utilisation d'une disposition de clavier non standard?

Je dois modifier le texte dans deux langues différentes. J'aimerais pouvoir utiliser mes raccourcis clavier dans les deux langues, sauf, bien sûr, lors de l'insertion de texte dans le tampon. Il semble que je devrais pouvoir toggle-input-method( C-\) et sélectionner la langue alternative.

Jusqu'à présent, presque si bon.

Voici le hic: j'utilise la disposition anglaise Dvorak, que j'ai définie au niveau du système d'exploitation (c'est-à-dire avec setxkbmap). Quand je toggle-input-method, le texte que j'insère serait correct si j'avais une mise en page QWERTY (la norme aux États-Unis), mais apparaît comme du charabia parce que je suis sur Dvorak. (FWIW, lorsque je change ma mise en page aux États-Unis standard, cela fonctionne bien.)

Donc: comment informer Emacs que j'utilise Dvorak pour que toggle-input-methodmes amis traduisent mes touches en caractères corrects dans l'autre langue?

Dan
la source
swedish-postfix et d'autres méthodes d'entrée de composition fonctionnent pour moi, avec quelles méthodes avez-vous des problèmes?
shapr
@shapr: Je passe de l'anglais à l'arabe. Le problème semble être que j'utilise une disposition Dvorak au niveau du système d'exploitation, car le basculement fonctionne correctement lorsque j'utilise la disposition américaine standard au niveau du système d'exploitation.
Dan

Réponses:

7

Il existe une méthode pour modifier la définition de la disposition physique de la méthode d'entrée en définissant quail-keyboard-layout-type. Mais il semble que Dvorak ne figure pas parmi les candidats possibles quail-keyboard-layout-alistdans mon Emacs 24.4.

Vous pouvez soit définir une nouvelle disposition de clavier physique en regardant la définition de quail-keyboard-layout-alistdans, quail.elsoit créer une nouvelle méthode de saisie en définissant les touches arabes correspondantes pour la disposition Dvorak.

Je n'ai pas d'expérience dans la première, mais je peux témoigner que la deuxième approche est plus facile que vous ne le pensez. (J'ai dû créer une méthode de saisie turque ottomane en plus du persan.) Copiez arabic.el(qui réside dans mon système Debian à /usr/share/emacs/24.4/lisp/leim/quail/arabic.el.gz) chez vous site-lispet modifiez les clés selon vos préférences. N'oubliez pas non plus de changer les noms des méthodes de saisie, etc. Vous venez de créer une nouvelle méthode de saisie Dvorak-arabe.

Je peux mettre à jour la réponse avec plus de détails si quelque chose semble complexe.

Emre Sahin
la source
Je vous remercie! Cela m'a mis sur la bonne voie. Je posterai une réponse supplémentaire qui explique comment j'en suis arrivé sur la ...-alistversion.
Dan
De rien. Vous pouvez penser à soumettre votre mise à jour au quail-. *-alistdéveloppement d'Emacs. Je suis sûr que d'autres utilisateurs de Dvorak en bénéficieront.
Emre Sahin
7

@EmreSahin m'a mis sur la bonne voie pour répondre à cette question, donc je présente un peu les détails au cas où quelqu'un d'autre aurait à faire face à un problème comme celui-ci.

Comme le souligne Emre, nous devons ajouter une disposition Dvorak quail-keyboard-layout-alist. Il s'avère que la quailbibliothèque n'est pas bien documentée dans le manuel , dans lequel deux fonctions liées sont mentionnées en passant sur un nœud.

Cependant, après avoir consulté ce fil d'aide et, en particulier, la page EmacsWiki sur le russe avec Dvorak (à partir de laquelle cette réponse cribs), je pense que je l'ai compris.

La docstring de la variable quail-keyboard-layoutdécrit ce que nous devons mettre quail-keyboard-layout-alist. C'est une longue chaîne correspondant à 6 rangées de 15 touches chacune. Chaque ligne correspond aux valeurs non décalées et décalées de chaque clé, pour un total de 30 caractères par ligne. Je suis moins sûr du point suivant, mais il semble que, pour ce que j'appellerai des claviers "semi-standard" avec 4 rangées de touches, les première et sixième rangées devraient chacune avoir 30 espaces vides.

La grande révélation:

(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
la source