每条警告都是一段文本信息,向用户解释问题,并附带一个符号类型的 严重级别(severity level)。以下是支持的严重级别,按严重程度从高到低排列及其含义:
:emergency如果用户不立即处理,很快就会严重影响 Emacs 运行的问题。
:error关于本身就存在错误的数据或状况的报告。
:warning关于本身并非错误、但可能存在问题的数据或状况的报告。
:debug在用户调试发出该警告的 Lisp 程序时可能有用的信息报告。
当你的程序遇到非法输入数据时,可以通过调用 error 或 signal 发出 Lisp 错误信号(see 如何发出错误信号),也可以报告严重级别为 :error 的警告。发出 Lisp 错误信号最为简单,但这意味着发出信号的程序无法继续执行。如果你愿意实现一种在数据非法时仍能继续处理的方式,那么报告严重级别为 :error 的警告是告知用户问题的正确方式。例如,Emacs Lisp 字节编译器就可以这样报告错误并继续编译其他函数。(如果程序发出 Lisp 错误后又用 condition-case 处理,用户将看不到错误信息;改用警告报告可以避免这个问题。)
除严重级别外,每条警告还有一个 警告类型(warning type) 用于分类。警告类型可以是一个符号或符号列表。如果是符号,它应当是你为程序用户选项所用的自定义组;如果是列表,列表第一个元素应当是该自定义组。例如,字节编译器警告使用的警告类型是 (bytecomp)。如果警告类型是列表,第一个元素之后的其他元素(应为任意符号)代表警告的子类别:它们会显示给用户,以更好地说明警告的性质。
该函数报告一条警告,使用字符串 message 作为警告文本,type 作为警告类型。level 应为严重级别,如果省略或为 nil,则默认为 :warning。
buffer-name 如果为非 nil,指定用于记录警告信息的缓冲区名称。默认情况下为 *Warnings*。
该函数使用 (format-message message args…) 的返回值作为信息文本,在 *Warnings* 缓冲区中报告警告。其他方面与 display-warning 等价。
该函数使用 (format-message message args…) 的返回值作为信息文本,emacs 作为警告类型,:warning 作为严重级别来报告警告。它仅为兼容而存在;我们建议不要使用它,因为你应当指定一个具体的警告类型。