有时,你可能希望在命令运行时不显示警告,只在命令结束后才显示。可以使用函数 delay-warning 实现这一点。Emacs 会在启动初期自动延迟所有发出的警告,只在初始化文件处理完毕后才显示。
该函数是 display-warning(see 警告基础)的延迟版本,调用参数与其完全相同。警告信息会被加入到 delayed-warnings-list 队列中。
该变量的值是一个在当前命令结束后需要显示的警告列表。每个元素必须是一个列表:
(type message [level [buffer-name]])
格式与含义均与 display-warning 的参数列表一致。Emacs 命令循环在运行完 post-command-hook(see 命令循环概述)后,会立即显示该变量指定的所有警告,然后将变量重置为 nil。
需要进一步自定义延迟警告机制的程序可以修改变量 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。