Nav*_*een 3 emacs keyboard-shortcuts
我通常在emacs中使用定义新的键绑定
"C-x (" --> (command kmacro-start-macro) "C-x )" --> (kmacro-end-macro) (name-last-kbd-macro) (insert-kbd-macro)但它生成的代码看起来与我在各种主要/次要模式和其他emacs实用程序中读取和修改的代码不同.
是否有emacs工具简化击键表示?理想情况下,从ahk击键表示法转换为任何理智的emacs击键表示法.
编辑:其他一些阅读清除我的困惑: Jari Aalto的键绑定指南.
您指定的序列确实简化了击键表示.你剩下的就是你输入的一组击键.
已经有人问你是否可以将emacs宏转换成elisp.
也许你问它是否可以变得更具人性化?如果是这样,那么你很幸运.
您可以使用kbd
宏将击键的打印表示转换为等效的击键向量.
例如,这导致了该序列query-replace
的3
与tj
看起来像:M-% 3 RET tj RET !
好吧,您可以手动设置:
(fset 'my-hand-crafted-kbd-macro (kbd "M-% 3 RET tj RET !"))
Run Code Online (Sandbox Code Playgroud)
如果您已命名宏,那么这段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"))
Run Code Online (Sandbox Code Playgroud)
要在完成键盘宏时自动执行C-x )此操作,您可以使用以下建议:
(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")))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
548 次 |
最近记录: |