C-x M-k
Emacsで段落を殺すために実行しました。期待どおり、エコー領域は を示しC-x M-k
ました。
ただし、参照用に、直前に実行されたコマンドの名前を (また) 表示することはできますか? これは、学習目的だけでなく、実行されたコマンドが意図したコマンドであることを確認するのにも役立ちます。
C-x M-k
Emacsで段落を殺すために実行しました。期待どおり、エコー領域は を示しC-x M-k
ました。
ただし、参照用に、直前に実行されたコマンドの名前を (また) 表示することはできますか? これは、学習目的だけでなく、実行されたコマンドが意図したコマンドであることを確認するのにも役立ちます。
これは必ずしも良い考えではありませんが、あなたが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)
。
これは 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
ください。リストする必要があるコマンドの数を減らすために、正規表現を受け入れるようにコードを微調整することもできます。これは、ユーザーの演習として残されています。
これができるかどうかはわかりません。エコーは (すぐに) 関数自体がメッセージ領域にエコーするメッセージに置き換えられることに注意してください。
C-h k
( describe-key
) とC-h l
( )を使用できる場合がありますview-lossage
。後者は、最後の 300 回のキーストロークを示します。
ドキュメントを読むと、これはハック以外の方法では不可能と思われます。echo-area-clear-hook
ただし、フックを使用して、エコー領域にあったものを振り返ることができる場合があります。キーストロークのように見える場合は、 で検索しdescribe-key
、そこから取得した関数の名前をエコー領域に記録します。