4

C-x M-kEmacsで段落を殺すために実行しました。期待どおり、エコー領域は を示し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 に答える