Emacs命令历史记录,包括键调用的命令和传递给它们的参数

Emacs命令历史记录,包括键调用的命令和传递给它们的参数,emacs,macros,elisp,Emacs,Macros,Elisp,有没有办法用参数显示完整的命令历史记录 重复复杂命令,该命令绑定到: <again>, <redo>, C-x M-:, C-x M-ESC ) 注意。可以从elisp函数中以编程方式按顺序键,但其用处很小。是的,要获得所需的内容,请使用预命令钩子调用一个函数,将给定命令添加到扩展命令历史。例如,代码将菜单执行的命令添加到此历史记录中: ;; This is done when you turn on Icicle mode. (if icicle-menu-items

有没有办法用参数显示完整的命令历史记录

重复复杂命令
,该命令绑定到:

<again>, <redo>, C-x M-:, C-x M-ESC


注意。可以从elisp函数中以编程方式按顺序键,但其用处很小。

是的,要获得所需的内容,请使用
预命令钩子
调用一个函数,将给定命令添加到
扩展命令历史
。例如,代码将菜单执行的命令添加到此历史记录中:

;; 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)))
;;这是在打开冰柱模式时完成的。
(如果icicle菜单项指向历史标记
(将挂钩“预命令挂钩”冰柱添加菜单项添加到cmd历史记录)
(移除挂钩“预命令挂钩”冰柱将菜单项添加到cmd历史记录)
(取消冰柱添加菜单项到cmd历史()
“将`此命令'添加到命令历史记录(如果是菜单项)。
与命令符号无关的菜单项将被忽略。
在“预命令挂钩”上使用。“
(条件case nil;以防万一,因为这是在'pre-command hook'上。
(当(和(>(长度(此命令键向量))0)
(相等’(菜单栏)(elt(此命令键向量)0))
;排除“menu-function-356”等不需要的符号。
(symbolp此命令)(或(
如果有办法将键盘宏转换成一块Elisp代码,那就太好了,但要想让这段Elisp代码有用,它应该有点惯用,但在许多情况下,惯用的Elisp代码做某事的方式与键盘宏做某事的方式大不相同(例如,惯用代码不应仅使用标记和压井环来提取和移动文本)


所以抄写并不简单。我认为写这样的东西的方法是“从小处着手”并接受这样一个事实,即它不是100%可靠的。

有没有办法提取传递给命令的参数?也许是一个函数,它的名字可能是
这个命令args
?@JisangYoo我不这么认为,但我可能忘记了什么-如果我错了,有人会纠正我。你可以尝试使用全局变量
在某一点上取值。但我怀疑这会有帮助,因为可以访问完整命令(函数+实际参数)的代码是
callint.C
中交互调用
的C代码。但是您当然可以建议任何特定命令访问其实际参数。