Pregunta:
En mi ~ / .emacs, hay varias macros de teclado almacenadas. Aparecen como (fset 'dhteu-macro-name ...
. Por cierto, dhteu
es solo una combinación alfabética aleatoria prefijada para evitar colisiones con cualquier comando existente.
Puedo Cx Ck e Mx
proporcionar un nombre de macro y se abre un búfer que me permite editar la macro. Puedo editarlo y guardarlo con Cc Cc
. Ahora, si Cx Ck e Mx
mismo nombre de macro, veo la versión modificada. Intenté ejecutar la macro modificada en un búfer. La macro madificada se ejecuta correctamente.
Después de todo esto, naturalmente, quiero almacenar la macro. Entonces, visito ~/.emacs
y Mx insert-kbd-macro
. Espero que el nombre de la macro que acabo de editar esté disponible en este mensaje. No lo es.
Ingresar el nombre completo produce un error de no coincidencia.
Cx Ck n
para darle otro nombre. Eso produce un error No keyboard macro defined
.
Entonces, la pregunta es: ¿Cómo edito una macro de teclado almacenada y la guardo de nuevo?
Respuesta:
Este es un error en Emacs. Al guardar la macro, Emacs no agrega la propiedad kmacro
, por lo que cuando inicia una nueva sesión, Emacs no recuerda que dhteu-macro-name
es en realidad una macro de teclado.
El truco a continuación debería solucionar el problema.
(defun my-kmacro-hack (&rest _)
(interactive
(list (intern (completing-read
"Insert kbd macro (name): "
obarray
(lambda (elt)
(and (fboundp elt)
(or (stringp (symbol-function elt))
(vectorp (symbol-function elt))
(kmacro-extract-lambda (symbol-function elt)))))
t))
current-prefix-arg))
nil)
(advice-add 'insert-kbd-macro :before #'my-kmacro-hack)
Instalé una solución más limpia que entrará en la rama master
de Emacs (es decir, para Emacs-27).