Emacs 击键表示混淆

标签 emacs keyboard-shortcuts

我通常使用

在 emacs 中定义新的键绑定(bind)
"C-x (" --> (command kmacro-start-macro)
"C-x )" --> (kmacro-end-macro)
(name-last-kbd-macro)
(insert-kbd-macro)
但它生成的代码看起来与我在各种主要/次要模式和其他 emacs 实用程序中阅读和修改的代码不同。
我最近遇到了this博客文章消除了我的一些困惑。

是否有简化击键表示的 emacs 工具? 理想情况下,翻译自 ahk keystroke notation任何理智的 emacs 击键符号。

编辑:一些其他阅读以消除我的困惑: keybinding guide贾里·阿尔托 ​​(Jari Aalto)。

最佳答案

您指定的序列确实简化了击键表示。您剩下的基本上是 您键入的一组击键。

已经有人问过你是否可以转换 emacs macro into elisp .

也许您在问是否可以让它更易于阅读? 如果是这样,那么您很幸运。

您可以使用 kbd 宏将打印的击键表示转换为等效的击键向量。

例如,导致 3tjquery-replace 的序列如下所示:M-% 3 RET tj RET !

好吧,您可以手动设置:

(fset 'my-hand-crafted-kbd-macro (kbd "M-% 3 RET tj RET !"))

如果您将宏命名为 'my-hand-crafted-kbd-macro,这段 elisp 代码应该会为您生成以上内容:

(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"))

要在完成键盘宏 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")))

关于Emacs 击键表示混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3121274/

相关文章:

emacs - 在 emacs 或 org-mode 中打开 http 链接的键盘快捷键

emacs - 我在 Windows 7 中的 Emacs 总是显示有关警告的启动错误

firefox - 更改 Firefox 开发者工具调试器键绑定(bind)

visual-studio - Visual Studio 2012 中的 Edit.MoveLineUp/Down 发生了什么

c# - Visual Studio 2015 中 Visual c# block 注释的键盘快捷方式?

qt - Qt Creator中 "go to file"和 "go to method"的快捷方式?

c# - 子组件的应用程序快捷键 "swallowed"

emacs - 发布组织文件的问题

emacs - 是否有用于 VI '.' 命令的 Emacs 模拟来重复上次输入的文本

email - 在 emacs 24 中读取电子邮件(来自 gmail)