¿Cómo cambiar la distribución del teclado para diferentes idiomas?

10

P: ¿cómo cambio entre métodos de entrada para diferentes idiomas cuando uso una distribución de teclado no estándar?

Tengo que editar texto en dos idiomas diferentes. Me gustaría poder usar mis combinaciones de teclas en los dos idiomas, excepto, por supuesto, al insertar texto en el búfer. Parece que debería poder toggle-input-method( C-\) y seleccionar el idioma alternativo.

Hasta ahora, casi tan bueno.

Aquí está el problema: uso el diseño Dvorak en inglés, que configuré en el nivel del sistema operativo (es decir, con setxkbmap). Cuando yo toggle-input-method, el texto que inserto sería correcto si tuviera un diseño QWERTY (el estándar en los EE. UU.), Pero sale como un galimatías porque estoy en Dvorak. (FWIW, cuando cambio mi diseño al estándar de EE. UU., Funciona bien).

Entonces: ¿cómo informo a Emacs que estoy usando Dvorak para que toggle-input-methodmis amigos traduzcan mis pulsaciones de teclas a los caracteres correctos en el otro idioma?

Dan
fuente
sueco-postfix y otros métodos de entrada de composición funcionan para mí, ¿con qué métodos tiene problemas?
shapr
@shapr: estoy cambiando entre inglés y árabe. El problema parece ser que estoy usando un diseño Dvorak en el nivel del sistema operativo, ya que la alternancia funciona bien cuando uso el diseño estándar de EE. UU. En el nivel del sistema operativo.
Dan

Respuestas:

7

Hay un método para cambiar la definición de diseño físico para el método de entrada mediante la configuración quail-keyboard-layout-type. Pero parece que Dvorak no está entre los posibles candidatos quail-keyboard-layout-alisten mi Emacs 24.4.

Puede definir un nuevo diseño de teclado físico mirando la definición de quail-keyboard-layout-alistin quail.elo crear un nuevo método de entrada definiendo las teclas árabes correspondientes para el diseño de Dvorak.

No tengo experiencia en el primero, pero puedo testificar que el segundo enfoque es más fácil de lo que piensas. (Tuve que crear un método de entrada turco otomano encima de farsi). Copie arabic.el(que reside en mi sistema Debian en /usr/share/emacs/24.4/lisp/leim/quail/arabic.el.gz) a su hogar site-lispy cambie las claves según sus preferencias. Además, no olvide cambiar los nombres de los métodos de entrada, etc. Acaba de crear un nuevo método de entrada Dvorak-Árabe.

Puedo actualizar la respuesta con más detalles si algo parece complejo.

Emre Sahin
fuente
¡Gracias! Eso me puso en el camino correcto. Publicaré una respuesta adicional que explica cómo llegué allí en la ...-alistversión.
Dan
De nada. Puede pensar en enviar su actualización al quail-. *-alistdesarrollo de Emacs. Estoy seguro de que hay otros usuarios de Dvorak que se beneficiarán de ello.
Emre Sahin
7

@EmreSahin me puso en el camino correcto para responder esta pregunta, así que expongo un poco de los detalles en caso de que alguien más tenga que lidiar con un problema como este.

Como señala Emre, necesitamos agregar un diseño de Dvorak quail-keyboard-layout-alist. Resulta que la quailbiblioteca no está bien documentada en el manual , en el que se mencionan dos funciones relacionadas al pasar en un nodo.

Sin embargo, después de consultar este hilo de ayuda y, especialmente, la página de EmacsWiki en ruso con Dvorak (de la cual esta cuna de respuesta), creo que lo he resuelto.

La cadena de documentación de la variable quail-keyboard-layoutdescribe lo que necesitamos poner quail-keyboard-layout-alist. Es una cadena larga que corresponde a 6 filas de 15 teclas cada una. Cada fila corresponde a los valores no desplazados y desplazados de cada clave, para un total de 30 caracteres por fila. Estoy menos seguro sobre el siguiente punto, pero parece que, para lo que llamaré teclados "semi-estándar" con 4 filas de teclas, la primera y la sexta filas deberían ser 30 espacios en blanco.

La gran revelación:

(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
fuente