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

Emacs 显示回显区域中最后一个命令的名称,emacs,Emacs,我执行了C-xm-k来删除Emacs中的一个段落。回波区显示为C-x M-k,与预期一致 但是,是否可以(同时)显示刚刚执行的最后一个命令的名称,以供参考?这对于学习和确认所执行的命令是否是预期的命令非常有用。我不知道是否可以做到这一点。请记住,任何回显都将(很快)被函数本身在消息区域中回显的任何消息所取代 您可能能够使用C-hk(description key)和C-hl(view lossage);后者显示最后300次按键 根据对文档的阅读,这在非黑客方式下似乎是不可能的。但是,您可以使用h

我执行了
C-xm-k
来删除Emacs中的一个段落。回波区显示为
C-x M-k
,与预期一致


但是,是否可以(同时)显示刚刚执行的最后一个命令的名称,以供参考?这对于学习和确认所执行的命令是否是预期的命令非常有用。

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


您可能能够使用
C-hk
description key
)和
C-hl
view lossage
);后者显示最后300次按键

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

这不一定是个好主意,但是,您可以建议
以交互方式呼叫
,以执行您所说的操作:

(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'交互调用)

您可以通过钩子完成此操作。您只需将其添加到筛选命令列表中,以避免出现一堆烦人的消息

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

显然,在变量
中添加您认为合适的过滤命令
。您可能还希望调整代码以接受正则表达式,以减少需要列出的命令数。这是留给用户的一个练习。

我曾想过回显变量
last command
,但您关于这一点的观点可能会被其他消息所取代,请注意。
real last command
与此类似,但从未被Lisp代码所改变。我认为这是C-h k(C-x k对我来说是kill buffer),只是好奇,您知道描述键的功能吗?例如,
M-x descripe key
C-x C-f
打开
find file
信息页面(假设默认的
C-f
键绑定)。是的,我知道
C-hk
:)不确定它是否感兴趣,但
C-x ESC
显示最后一个命令(对于重做,
C-g
中止)