2013-02-04 30 views
4

我执行了C-x M-k来杀死Emacs中的一个段落。如预期的那样,回波区域显示为C-x M-k显示回显区域中最后一个命令的名称

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

+0

只是好奇,你知道'描述键'功能吗?例如,'M-x describe-key'' C-x C-f'打开'find-file'信息页面(假定默认的'C-f'键绑定)。 – asm

+0

是的,我知道'Ch k' :) – SabreWolfy

+0

不知道是否有兴趣,但'Cx ESC ESC'显示最后一个命令(for * redo *,'Cg'要中止) –

回答

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

我不知道这是否可以做到。请记住,任何回声将被(即将)函数本身在消息区域中回显的任何消息所取代。您可能可以使用C-h kdescribe-key)和C-h lview-lossage);或者,您可以使用C-h kdescribe-key)和C-h l()。后者显示最近的300次击键。

+0

我想过回应变量'最后命令',但你的观点可能被其他消息所取代。 – SabreWolfy

+0

但是你会在哪里回显'lass-command'? –

+0

我不知道:) – SabreWolfy

0

根据在文档中的阅读,这似乎不可能在一个非hackish的方式。但是,您可以使用挂钩echo-area-clear-hook来回顾回显区域中的内容,如果按键看起来像是按describe-key查找它,然后将从中获得的函数的名称记录到回显区域。

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。您可能还想调整代码以接受正则表达式,以减少需要列出的命令的数量。这留给用户作为练习。

相关问题