您指定的序列確實簡化了擊鍵表示。你留下的基本上是你鍵入的一組擊鍵。
已經有人問您是否可以轉換emacs macro into elisp。
也許你問是否可以使它更具人類可讀性? 如果是這樣,那麼你很幸運。
您可以使用宏將擊鍵的打印表示轉換爲擊鍵的等效向量。
例如,這導致3
一個query-replace
與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")))
在我的問題中是否可以將簡單配方的前3個步驟合併? – Naveen 2010-06-25 22:09:28
@Naveen是的,我可以在下週看看。 – 2010-06-25 23:12:38