42.5.4 延迟警告

有时,你可能希望在命令运行时不显示警告,只在命令结束后才显示。可以使用函数 delay-warning 实现这一点。Emacs 会在启动初期自动延迟所有发出的警告,只在初始化文件处理完毕后才显示。

Function: delay-warning type message &optional level buffer-name

该函数是 display-warning(see 警告基础)的延迟版本,调用参数与其完全相同。警告信息会被加入到 delayed-warnings-list 队列中。

Variable: delayed-warnings-list

该变量的值是一个在当前命令结束后需要显示的警告列表。每个元素必须是一个列表:

(type message [level [buffer-name]])

格式与含义均与 display-warning 的参数列表一致。Emacs 命令循环在运行完 post-command-hook(see 命令循环概述)后,会立即显示该变量指定的所有警告,然后将变量重置为 nil

需要进一步自定义延迟警告机制的程序可以修改变量 delayed-warnings-hook

Variable: delayed-warnings-hook

这是一个普通钩子,由 Emacs 命令循环在 post-command-hook 之后运行,用于处理并显示延迟警告。Emacs 在启动期间加载完全局初始化和用户初始化文件后(see 概述:启动时的操作序列)也会运行该钩子,因为在此之前发出的警告会被自动延迟。

其默认值是包含两个函数的列表:

(collapse-delayed-warnings display-delayed-warnings)

函数 collapse-delayed-warnings 会从 delayed-warnings-list 中移除重复条目。函数 display-delayed-warnings 会依次对 delayed-warnings-list 中的每个条目调用 display-warning,然后将 delayed-warnings-list 设为 nil