【问题标题】:Emacs: getting readable keyboard-macrosEmacs:获得可读的键盘宏
【发布时间】:2010-10-19 16:50:49
【问题描述】:

当使用 insert-kbd-macro 保存命名键盘宏时,我得到“不可读”的 Lisp 代码,例如

(fset 'ppsql
   (lambda (&optional arg) "Keyboard macro." (interactive "p") (kmacro-exec-ring-item (quote ([134217788 134217765 44 return 44 17 10 return 33 134217765 102 102 backspace 114 111 109 return 17 10 102 111 109 backspace backspace 114 111 return 33] 0 "%d")) arg)))

我宁愿有类似的东西:

(fset 'move-line-down
      [?\C-a ?\C-k delete down ?\C-y return up])

IIRC 我使用相同的方法来记录、命名和插入两个键盘宏:F3F4name-last-kbd-macro

是否有可能获得可读格式的第一个宏?

【问题讨论】:

    标签: emacs keyboard macros lisp


    【解决方案1】:

    我从未见过第一种形式。第二种形式是我习惯的。您是否尝试重新录制第一个宏以查看如果您确定录制、然后命名、然后插入会发生什么?

    要尝试的另一件事是 "C-X (",它调用 kmacro-start-macro 和 "C-X )" kmacro-end-macro,而不是 F3/F4,它们在保持计数器方面做一些无关紧要的事情。也许更简单的键盘宏命令会更直接地工作。

    【讨论】:

      【解决方案2】:

      Emacs 中的键盘宏功能有两种模式:macroskmacros。前者以您喜欢的方式(符号形式)返回宏,后者提供 lambda 形式。所以,如果你调用name-last-kbd-macro,你会得到一个符号形式,如果你调用kmacro-name-last-macro,你会得到一个lambda形式。

      【讨论】:

        【解决方案3】:

        谢谢!

        那么宏的命名决定了插入时的格式?

        我进行了更多实验,发现M-x insert-kbd-macro RET RET 会给我“符号形式”。

        M-x insert-kbd-macro RET pp2sql RET 给出“labmda-form”(在使用 name-last-kbd-macro 命名之后)。

        现在我意识到我在之前的实验中一直使用name-last-kbd-macro...?

        【讨论】:

        • 当您检查kmacro-name-last-macro (C-h f kmacro-name-last-macro) 的函数定义时,您会在最后一行看到它在宏上调用kmacro-lambda-form——这就是您得到lambda 形式的原因。 (下次最好编辑您的问题,然后发布新答案。)
        猜你喜欢
        • 1970-01-01
        • 2015-01-31
        • 1970-01-01
        • 2010-11-13
        • 1970-01-01
        • 2014-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多