有没有办法用参数显示完整的命令历史记录?
repeat-complex-command
绑定到:
<again>, <redo>, C-x M-:, C-x M-ESC
不显示从键绑定调用的命令,kmacro-edit-macro
(绑定到C-x C-k RET
)不显示传递给命令的参数。
动机。将键盘宏转换为elisp函数会更快。现在,我调用kmacro-edit-macro
来查看要使用的命令的名称,然后通过逐个阅读命令文档来计算要传递的参数。 (示例工作流程:https://stackoverflow.com/a/24784563/1446335)
请注意。可以以编程方式从elisp函数中按下键序列,但它的用处很小。
答案 0 :(得分:1)
是的,要获得所需内容,请使用pre-command-hook
来调用将给定命令添加到extended-command-history
的函数。例如,这是Icicles代码将菜单执行的命令添加到此历史记录中的功能:
;; This is done when you turn on Icicle mode.
(if icicle-menu-items-to-history-flag
(add-hook 'pre-command-hook 'icicle-add-menu-item-to-cmd-history)
(remove-hook 'pre-command-hook 'icicle-add-menu-item-to-cmd-history))
(defun icicle-add-menu-item-to-cmd-history ()
"Add `this-command' to command history, if it is a menu item.
Menu items that are not associated with a command symbol are ignored.
Used on `pre-command-hook'."
(condition-case nil ; Just in case, since this is on `pre-command-hook'.
(when (and (> (length (this-command-keys-vector)) 0)
(equal '(menu-bar) (elt (this-command-keys-vector) 0))
;; Exclude uninterned symbols such as `menu-function-356'.
(symbolp this-command) (or (< emacs-major-version 21) (intern-soft this-command)))
(pushnew (symbol-name this-command) extended-command-history))
(error nil)))
答案 1 :(得分:1)
有一种方法可以将键盘宏转换为一大块Elisp代码,但是为了使这一块Elisp代码变得有用,它应该是有点惯用的,但在很多情况下,惯用的Elisp代码做一些事情与键盘 - 宏的方式完全不同(例如,惯用代码不应该使用标记和杀死环来提取和移动文本)。
所以转录不是直截了当的。我认为写这样一个东西的方法是从小开始#34;并接受它不会100%可靠的事实。