Cuaderno de GNUtas

Anclar una lista abbrev en Emacs a un método de teclado

El abbrev-mode de Emacs es muy útil a la hora de definir listas de autocompletado de palabras. De hecho, yo me construí hace tiempo una larga lista para partículas de griego politónico que me facilita bastante la escritura de esta lengua, pues basta con escribir la forma sin diacríticos para que el autocompletado haga el resto. La lista contempla la posición y tipo de diacríticos más habituales. Por ejemplo, es más común encontrar καὶ, con acento grave, que καί con agudo. Pero si quiero poner la partícula con agudo debo entonces teclear tras και la secuencia C-q, que desactiva en ese caso, momentáneamente, el autocompletado. La lista, que he llamado griego-abbrev, es un tanto extensa para ponerla aquí como bloque de código, pero quien desee usarla puede copiarla de este snippet de GitLab.

Por otra parte, como la lista sólo me tiene sentido usarla cuando escribo griego, se me ocurrió escribir una función que la «activase» únicamente cuando el método de teclado para griego politónico de Emacs (greek-ibycus4) estuviese también activo. La función, bien sencilla, quedó así:

(defun mi-griego-input-abbrev ()
    (when
        (equal current-input-method "greek-ibycus4")
      (setq local-abbrev-table griego-abbrev)))

Es decir, cuando el input-method es greek-ibycus4, la variable local-abbrev-table toma el valor de mi lista griego-abbrev. Sólo queda, entonces, añadir la función al hook input-method-activate-hook, para que se ejecute cada vez que active el input method. Y al hook contrario, input-method-deactivate-hook le añado una función anónima que devuelva la variable local-abbrev-table a nil. Así mi lista deja de estar operativa cuando desactivo el input method:

(add-hook 'input-method-activate-hook #'mi-griego-input-abbrev)

(add-hook 'input-method-deactivate-hook (lambda ()
                                            (setq local-abbrev-table nil)))

Estrambote: Por cierto, para activar rápidamente el método de teclado griego en Emacs tengo definido este atajo:

(global-set-key (kbd "C-x 3")
                  '(lambda ()
                     (interactive)
                     (set-input-method "greek-ibycus4")))

¿Por qué C-x 3, cuando el método de teclado se llama «greek-ibycus4? Sencillamente, porque me resulta mucho más cómodo acceder al 3 que al 4 en el teclado (toda la secuencia la pulso con la mano izquierda). Los atajos más habituales en Emacs (pienso) deben ser ergonómicos; mientras que los que se ejecuten de pascuas en ramos conviene que sean mnemotécnicos.

Publicado: 17/10/2019

Última actualización: 17/10/2019


Índice general

Acerca de...

Esta obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial 4.0 Internacional.

© Juan Manuel Macías
Creado con esmero en
GNU Emacs