显示echo区域中最后一个命令的名称

时间:2013-02-04 20:22:25

标签: emacs

我执行了C-x M-k来杀死Emacs中的一个段落。正如预期的那样,回声区域显示C-x M-k

但是,是否可以(也)显示刚执行的最后一个命令的名称,以供参考?这对于学习目的很有用,并且确认执行的命令是预期的命令。

4 个答案:

答案 0 :(得分:3)

这不一定是个好主意,但你可以建议call-interactively做你说的话:

(defadvice call-interactively (after show-last-command activate)
  "Shows the interactive command that was just run in the message area."
  (unless (eq major-mode 'minibuffer-inactive-mode)
    (message "Ran %s" (ad-get-arg 0))))

要关闭此功能,请运行(ad-unadvise 'call-interactively)

答案 1 :(得分:2)

您可以通过挂钩'post-command-hook完成此操作。你只想添加到过滤命令列表中,以避免一堆恼人的消息。

(defvar filtered-commands '(self-insert-command previous-line next-line 
                            forward-char backward-char execute-extended-command))

(defun my-post-command-function ()
  (when (and (= 0 (recursion-depth)) (not (memq this-command filtered-commands)))
(message (format "command was %s" this-command))))

(add-hook 'post-command-hook 'my-post-command-function)

显然,根据需要添加到变量filtered-commands。您可能还需要调整代码以接受正则表达式,以减少需要列出的命令数。这留给了用户练习。

答案 2 :(得分:1)

我不知道是否可以这样做。请记住,任何回显都将(很快)被函数本身在消息区域中回显的任何消息所取代。

您可以使用C-h kdescribe-key)和C-h lview-lossage);后者显示了最后300次击键。

答案 3 :(得分:0)

根据文档中的阅读,这似乎不可能以非hackish的方式进行。但是,您可以使用钩子echo-area-clear-hook来回顾回显区域中的内容,如果它看起来像是用describe-key查找它,然后记录该函数的名称你从那里到达回声区域。