我在 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)一缺点是它回显了太多消息。
现在,在这种情况下,你真的会建议一个完全重写该功能(以及许多其他功能)的功能,使用完全不同的命令,可能存在也可能不存在的命令,作为减少消息的可能方法,我们甚至不知道会发生这种情况?
编辑:一个例子(有效),在我得到帮助之后德鲁。
(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-max
。nil
绑定echo-keystrokes
到0
抑制击键回声。
从 Emacs 25.1 开始,您还可以将变量绑定(或设置)inhibit-message
为 non- nil
,以阻止大多数回显区域消息(但不阻止这些消息记录在 buffer 中*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 代码时,最好使用原语而不是交互式命令,这也应该减少您关心的消息流。
编辑:
更重要的是,这将使您的功能更加强大 - 它们将更少地依赖于各种设置,并且当您决定尝试新的用户选项时它们不太可能突然中断。
我知道这不是你要问的,我立即说,在我看来,没有办法压制这些信息。