Emacs:メッセージをミュート(「エコーエリア」)

Emacs:メッセージをミュート(「エコーエリア」)

私はEmacsで私が知っているコマンドを積み重ね、多くの自動化を行います。手動。これは多くの努力を必要としないので、私が推奨する方法です。いつものようにEmacsを使っていると、時々思いが浮かびます。 「ええ、私はいつもこのコマンドを使っていますが、なぜそうですか?」 「ただマージしますか?」 「コマンド(名前またはショートカット)を知ると、すべてが簡単になります。

しかし、問題の1つは、コマンドをスタックすると、「エコー領域」(ミニバッファと同じ位置)で点滅する多くのメッセージが表示されることです。これらのメッセージには意味がありません。以下で発生するすべてのもの(呼び出される関数)がユーザーに透過的である必要があるためです。

まあ、あなたはできます静かなそれ、それからミュート解除それ?以下を見てください:

(defun invisible-pretty-mail ()
  "Automatize `pretty-mail'."
  (interactive)
  ; (mute-echo-area)
  (rmail-edit-current-message)
  (pretty-mail) ; lots of replace-string, replace-regexp, etc. here
                ; that will flood messages
  (rmail-cease-edit)
  ; (unmute-echo-area)
  )

編集するSDS 'への対応回答:

あなたが言及したコメントはEmacsヘルプシステムで非常に一般的であることを理解しています。

あなたの提案は一般的に間違っているわけではありませんが、この特定のケースをさらに詳しく調べてみましょう。 1)にElisp機能があります.emacs。 2)このコマンドが使用するコマンドは、機能を設定する人に非常になじみやすいので、読みやすくメンテナンスが非常に簡単です。 3) 機能が期待どおりに正しく動作します。 4)一つ欠点は、あまりにも多くのメッセージをエコーすることです。

今この場合本当に提案してもらえますか?完全に書き直されましたこの機能(および他の多くの機能)は、まったく異なるコマンド(存在しても存在しない場合もあるコマンド)を使用して、私たちが知らないメッセージを減らすための可能な方法で何をしますか?

編集する:(動作)はい、助けを受けた後ドリュー

(defun test-suppress-msgs ()
  (interactive)
  (let ((log-size message-log-max))
    (setq message-log-max nil)
    (message "This message is suppressed.")
    (setq message-log-max log-size)
    (message "This is echoed, and logged.") ))

答え1

バインディングは(動的)バインディング中にメッセージを抑制しますmessage-log-maxnil

echo-keystrokesキー入力エコーを抑制するためにバインドします0

Emacs 25.1以降、変数をinhibit-messagenon-にバインド(または設定)することもできますnil。これはほとんどのエコーゾーンメッセージを防ぎます(ただし、バッファに書き込まれるのを防ぎません*Messages*)。

答え2

私はあなたが望むことを行うEmacsのソースコードで何も見ることができません。

「手動使用で知っているコマンドスタッキング」へのアプローチは必ずしもTRTである必要はありません。多くのEmacsコマンドがLispコードの一部として廃止されました。たとえば、次のようになります。

C-x b runs the command switch-to-buffer
...
WARNING: This is NOT the way to work on another buffer temporarily
within a Lisp program!

そして

previous-line is an interactive compiled Lisp function in `simple.el'.
...
It is bound to C-p, <up>.
...
If you are thinking of using this in a Lisp program, consider using
`forward-line' with a negative argument instead.  It is usually easier
to use and more reliable (no dependence on goal column, etc.).

つまり、Lispコードを書くときは、インタラクティブなコマンドではなく、デフォルトのコマンドを使用する方が良いです。これは関心のあるメッセージフローチャートを減らす必要があります。

編集する:

さらに、これにより機能がより強力になります。さまざまな設定にあまり依存しなくなり、新しいユーザーオプションを試すことにした場合、突然動作が中断される可能性も少なくなります。

私はこれがあなたが要求するものではないことを知っており、私の意見ではこの情報を隠す方法がないとすぐに言います。

関連情報