Cuaderno de GNUtas

De teclas y acordes en Emacs

A menudo me preguntan amigos o conocidos que no usan (felices ellos) GNU Emacs cómo hacemos los usuarios y entusiastas de Emacs para memorizar tan increíble cantidad de combinaciones de teclas, muchas de ellas incluso extremadamente barrocas o de delirio declarado cuando se ven explicadas en manuales, tutoriales, etc. Mi respuesta habitual consiste en que no es la combinación de teclas en sí lo que se graba en la memoria, sino el hábito del movimiento, la propia memoria del músculo. En ese sentido, usar el teclado en Emacs puede muy bien parecerse a tocar el piano o a aprender mecanografía. Y cada usuario, al cabo, se acaba acostumbrando también al tacto y disposición de su teclado. Tal es así que cuando uso Emacs en un teclado nuevo, o en uno que llevo tiempo sin usar, me cuesta un poco coger el tonillo y arrancarme con la misma soltura que con mi teclado del día a día. Y no hay mucho más misterio que arrojar a esa célebre sobreabundancia de atajos y combiaciones de teclas emacsiana, la verdad. Simplemente, añadir lo de la conveniencia de que los atajos más habituales sean ergonómicos; y los que se usan más de tarde en tarde, mnemotécnicos.

Pero ese símil musical que acabo de emplear me da pie para comentar aquí un interesante paquete cuyo nombre, key-chord, insiste en esta vía. ¿Y qué hace key-chord? Pues eso mismo que sugiere: nos da la posibilidad de establecer acordes de letras y signos para que, si los pulsamos a la vez (uno seguido o dos como máximo), se ejecute alguna función o comando o se introduzca una determinada cadena de texto. Y, ojo, hablamos de letras en el fondo, no de teclas; por tanto no vale asignar teclas de función o teclas modificadoras. Antes de continuar conviene recordar, no obstante, que este paquete lleva un tiempo en el orfanato de Emacs y ya no es mantenido por su autor original. Pero aún lo podemos descargar del repositorio Melpa y darle algunos usos curiosos. Comento a continuación aquellos que yo le he dado, y algunas pautas y consejillos para sacarle el jugo que aún pueda tener tras su abandono.

En principio, lo de la idea de establecer acordes de teclas me resulta muy feliz, pero que nadie se ilusione como yo me ilusioné al principio. Son tantas las limitaciones (algunas, intrínsecas; otras imagino que por la falta de mantenimiento), que nuestras posibilidades melódicas estarán ciertamente limitadas. Los problemas más gordos los podemos resumir en estos dos:

  1. Cuando se definen acordes, las letras o signos implicados se ralentizarán en la escritura normal, si tenemos activo el key-chord-mode. No es de extrañar que esto suceda, y es algo que el paquete no lo llegó a solucionar durante su vida activa pre-orfanato. Imaginemos que hemos definido un acorde con las letras «ñq» para que ejecuten tal o cual función. Si estamos escribiendo tranquilamente, y pulsamos una de las dos letras, y al formar ellas parte de un acorde, habrá un momento de espera para confirmar si el acorde se consuma o no. El lapso es muy leve, pero llega a ser lo suficientemente molesto si se está escribiendo rápido1. Y no me gusta. Valoro mucho la fluidez del acto de escribir, y cuando algo (físico, o binario) se interpone entre lo que quiero escribir y lo que escribo, se me va el hilo, me distraigo y me ofusco. Mal.
  2. Si queremos que nuestro acorde introduzca determinada cadena de texto, hay caracteres que de entrada no se introducen, en general aquellos que están fuera del área ASCII, como el signo de interrogación de apertura.

El problema 2 no es demasiado importante y siempre lo podremos salvar con alguna función anónima que nos inserte el texto que queremos. Lo que sí nos compromete y limita bastante en nuestras loables aspiraciones polifónicas es el primero. La única solución que se me ocurre es definir los acordes con signos que se utilicen poco, lo justo para que el mal momento sea pasajero. Por supuesto, valen también las mayúsculas, ya que nadie a no ser que sea un sociópata redomado escribe todo en mayúsculas. Así pues, yo tengo definidos un par de acordes que con unos días de uso me han acabado resultando muy prácticos y agradables, incluso por ergonomía. Como cada usuario de Emacs es distinto, puede que a otro no se lo resulten. En cualquier caso, aquí van, siquiera por si sirvieran de idea para establecer otras combinaciones.

En primer lugar, una cosa que hago constantemente en Emacs es saltar de un búfer a otro. Para ello, mi función de cabecera es ido-switch-buffer. A ésta le asigné un acorde compuesto por los dos puntos y el punto y seguido. De la siguiente forma.

Por supuesto, requerimos primero el paquete y activamos el modo:

(require 'key-chord)
  (key-chord-mode 1)

y asignamos nuestro acorde así:

(key-chord-define-global ";:" 'ido-switch-buffer)

Tampoco sé vivir en Emacs sin los utilísimos marcadores, y para navegar por ellos uso helm-bookmarks (es decir, uso ido para unas cosas, como la anterior, y helm para otras). A esta acción le tengo asignada el acorde «LÑ»:

(key-chord-define-global "LÑ" 'helm-bookmarks)

Obsérvese que estas dos letras están junto encima (más o menos) del par del punto y coma y los dos puntos. Teniendo pulsada con la mano izquierda la tecla de mayúsculas, puedo llamar a las dos funciones de una forma cómoda (para mí, insisto).

Comentemos alguno más del repertorio. La posición de las comillas me tiende a resultar incómoda en los teclados, así que definí este otro acorde compuesto por los números 1 y 2. Soy de escribir pocos números, de modo que la elección en mi caso tiene sentido:

(key-chord-define-global "12" "\"")

Y la verdad es que poco más es lo que puedo exhibir de este repertorio. Ya iremos explorando alguna posibilidad que pueda llegar, si se da el caso, pero entre tanto me atrevería a insistir en la utilidad de este paquete para escenarios puntuales como los mencionados; vale la pena darle una segunda oportunidad y sacarle del orfanato. Aunque nos deje muy lejos de la utopía de todo emacsiano que se precie: poder hacer jazz con Emacs.

Publicado: 11/05/20

Última actualización: 21/01/22


Índice general

Acerca de...

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

Notas al pie de página:

1

Podemos modificar las variables key-chord-one-key-delay o key-chord-two-keys-delay, probando a aplicar distintos valores de retardo, pero el problema o persiste o empeora.

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