Указанная вами последовательность упрощает представление нажатия клавиш.То, что у вас осталось, - это, по сути, набор нажатий клавиш.
Уже спрашивали, можете ли вы преобразовать макрос emacs в elisp .
Возможно, вы спрашиваете, можно ли сделать его более читабельным для человека?Если это так, то вам повезло.
Вы можете использовать макрос kbd
для преобразования напечатанного представления нажатий клавиш в эквивалентный вектор нажатий клавиш.
Например, последовательность, котораяв результате query-replace
из 3
с tj
выглядит следующим образом: M-% 3 RET tj RET!
Что ж, вы можете установить это вручную:
(fset 'my-hand-crafted-kbd-macro (kbd "M-% 3 RET tj RET !"))
И этот фрагмент кода elisp должен сгенерировать для вас вышеупомянутое, если вы назвали свой макрос '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"))
Чтобы это произошло автоматически после завершения макроса клавиатуры Cx) , вы можете воспользоваться этим советом:
(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")))