La séquence que vous spécifiez simplifie la représentation de la séquence de touches. Ce qui vous reste est essentiellement l'ensemble des frappes que vous avez tapé. Il est déjà demandé si vous pouvez convertir un emacs macro into elisp. Peut-être que vous demandez si cela pourrait être rendu plus humainement lisible?
Si oui, alors vous avez de la chance.
Vous pouvez utiliser la macro kbd
pour convertir la représentation imprimée de séquences de touches dans le vecteur équivalent de séquences de touches.
Par exemple, la séquence qui se traduit par un query-replace
de 3
avec tj
ressemble: M-% 3 RET RET tj!
Eh bien, vous pouvez définir manuellement que avec:
(fset 'my-hand-crafted-kbd-macro (kbd "M-% 3 RET tj RET !"))
Et ce morceau de code elisp devrait générer ci-dessus pour vous si vous avez nommé votre macro 'my-hand-crafted-kbd-macro
:
(defun insert-pretty-kbd-macro (macro-name)
(interactive (list (intern (completing-read
"Insert kbd macro (name): "
obarray
(lambda (elt)
(and (fboundp elt)
(or (stringp (symbol-function elt))
(vectorp (symbol-function elt))
(get elt 'kmacro))))
t))))
(interactive)
(insert "(fset '")
(prin1 macro-name (current-buffer))
(insert "\n (kbd \"")
(insert (key-description (symbol-function macro-name)))
(insert "\"))\n"))
Pour obtenir ceci pour se produire automatiquement quand vous finissez une macro de clavier Cx), vous pouvez utiliser ce conseil:
(defadvice kmacro-end-macro (after kmacro-end-macro-name-it-and-insert activate)
"user wants to insert elisp to reproduce the last kbd macro"
(let ((name (read-string "Name for this kbd macro: ")))
(insert "(fset '")
(insert name)
(insert "\n (kbd \"")
(insert (key-description last-kbd-macro))
(insert "\"))\n")))
Serait-il possible d'incorporer les 3 premières étapes de la recette simple dans ma question? – Naveen
@Naveen Oui, je peux regarder ça la semaine prochaine. –