4

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

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

4

4 回答 4

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).

于 2013-02-04T23:46:37.867 回答
2

您可以通过 hook 完成此操作'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显然,添加到您认为合适的变量中。您可能还想调整代码以接受正则表达式,以减少需要列出的命令数量。这留给用户作为练习。

于 2013-02-05T00:28:57.983 回答
1

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

您也许可以使用C-h k( describe-key) 和C-h l( view-lossage);后者显示最后 300 次击键。

于 2013-02-04T20:44:15.807 回答
0

根据对文档的阅读,这似乎不可能以非骇客的方式进行。但是,您可以使用钩子echo-area-clear-hook来查看回声区域中的内容,如果它看起来像击键,请使用 进行查找describe-key,然后将您从中获得的函数名称记录到回声区域。

于 2013-02-04T20:46:46.800 回答