Emacs

Emacs:靜音消息(“迴聲區”)

  • February 3, 2017

我在 Emacs 中做了很多自動化操作,方法是堆疊我從手動使用中知道的命令。這是我推薦的一種方法,因為它不需要太多努力:你像往常一樣使用 Emacs,但有時它會突然出現在你的腦海中,“嘿,我總是連續使用這些命令,為什麼不”我只是合併它們?” 由於您通過名稱或快捷方式知道命令,因此更加簡單。

但是,一個問題是,當您堆疊命令時,您會在“回顯區域”(與迷你緩衝區相同的位置)中獲得大量消息。這些消息沒有任何意義,因為下面發生的一切(呼叫的函式)對使用者來說(應該)是透明的。

那麼,您可以先靜音,然後再取消靜音嗎?看看下面:

(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)一個缺點是它回顯了太多消息。

現在,在這種情況下,您是否真的建議完全重寫該功能(以及許多其他功能),使用完全不同的命令,可能存在或可能不存在的命令,作為減少消息的可能方式,我們甚至不知道會發生嗎?

編輯:一個例子(有效),在我從Drew得到幫助之後。

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

綁定message-log-maxnil在(動態)綁定期間抑制消息。

綁定echo-keystrokes0抑制擊鍵的迴聲。

從 Emacs 25.1 開始,您還可以將變數綁定(或設置)inhibit-message為 non- nil,以防止大多數 echo-area 消息(但不阻止這些消息被記錄到 buffer *Messages*)。

我在 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 程式碼時,最好使用原語而不是互動式命令,這也應該減少您關心的消息流。

編輯:

更重要的是,這將使您的功能更加健壯——它們將更少地依賴於各種設置,並且當您決定嘗試新的使用者選項時,它們不太可能突然中斷。

我知道這不是你要問的,我馬上說,IMO,沒有辦法壓制這些消息。

引用自:https://unix.stackexchange.com/questions/67115