我在 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)
)
Run Code Online (Sandbox Code Playgroud)
针对 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.") ))
Run Code Online (Sandbox Code Playgroud)
绑定message-log-max
到nil
在(动态)绑定期间抑制消息。
绑定echo-keystrokes
到0
抑制击键的回声。
从 Emacs 25.1 开始,您还可以将变量绑定(或设置)inhibit-message
到 non- nil
,以防止大多数 echo-area 消息(但不防止这些消息被记录到 buffer 中*Messages*
)。
归档时间: |
|
查看次数: |
1687 次 |
最近记录: |