下面列出在 Emacs 中用于特殊用途的标准符号属性。在下表中,凡是提到 “指定函数(the named function)”,均指名称为对应符号的函数;“指定变量(the named variable)” 等表述同理。
:advertised-binding该属性的值用于指定:在显示文档时,指定函数所推荐使用的按键绑定。 See Substituting Key Bindings in Documentation。
char-table-extra-slots若该属性的值非 nil,则表示指定的字符表类型中额外槽位的数量。See 字符表。
customized-faceface-defface-specsaved-facetheme-face这些属性用于记录一个外观(face) 的标准、已保存、已自定义和主题面规格。请勿直接设置它们;它们由 defface 及相关函数管理。See Defining Faces。
customized-valuesaved-valuestandard-valuetheme-value这些属性用于记录可自定义变量的标准值、已保存值、已自定义但未保存值以及主题值。请勿直接设置它们;它们由 defcustom 及相关函数管理。See 定义自定义变量。
definition-name该属性用于在无法通过源码文本搜索找到符号定义时,定位该符号在源代码中的定义。例如,define-derived-mode(see Defining Derived Modes)可能会隐式定义某个模式专用的函数或变量;或者你的 Lisp 程序会在运行时通过调用 defun 来动态定义函数(see 定义函数)。
在这些及类似场景中,符号的 definition-name 属性应当指向另一个符号:该符号的定义可以通过文本搜索找到,并且其代码负责定义原始符号。在 define-derived-mode 的例子中,由它定义的函数和变量的此属性值,应当设为对应的模式符号。
Emacs 的帮助命令(如 C-h f,see Help in The GNU Emacs Manual)会利用该属性,在 *Help* 缓冲区的文档里通过按钮直接跳转到符号的定义位置。
disabled若该属性的值为非 nil,则指定的函数作为命令时是被禁用的。see Disabling Commands。
face-documentation该属性的值存储指定外观(face)的文档字符串。它由 defface 自动设置。see Defining Faces。
history-length若该属性值非 nil,则指定对应历史列表变量的小缓冲区(minibuffer)历史最大长度。
See 迷你缓冲历史。
interactive-form该属性值为对应函数的交互式代码(interactive form)。通常不应直接设置此属性;请改用 interactive 特殊表达式。See Interactive Call。
menu-enable该属性值是一个表达式,用于判断对应菜单项在菜单中是否应处于启用状态。See Simple Menu Items。
mode-class若值为 special,则对应主模式为特殊主模式。See Major Mode Conventions。
permanent-local若值非 nil,则对应变量为缓冲区局部变量,且在切换主模式时其值不会被重置。
See 创建与删除缓冲区局部绑定。
permanent-local-hookIf the value is non-nil, the named function should not be
deleted from the local value of a hook variable when changing major
modes. See Setting Hooks.
pure ¶若属性值非 nil,则表示该函数被视为纯函数(see 什么是函数?)。使用常量参数的调用可在编译期执行求值,这可能会将运行时错误提前到编译时出现。不要与纯存储(pure storage)混淆(see Pure Storage)。
risky-local-variable若属性值非 nil,则表示该变量作为文件局部变量时被视为有风险。see 文件局部变量。
safe-function若属性值非 nil,则表示该函数通常可安全执行求值。see 判断一个函数是否可以安全调用。
safe-local-eval-function若属性值非 nil,则表示该函数可以在文件局部求值表达式中安全调用。see 文件局部变量。
safe-local-variable该属性的值指定一个函数,用于判断指定变量的文件局部值是否安全。See 文件局部变量。由于加载文件时会用到该值,因此这个函数应当高效,且最好不会为了判断安全性而触发加载其他库(例如不应是自动加载函数)。
side-effect-free ¶非 nil 的值表示该函数无副作用(see 什么是函数?),因此字节编译器可以忽略不使用返回值的调用。如果该属性的值为 error-free,字节编译器甚至可以直接删除这类未使用的调用。除了字节编译器优化,该属性还用于判断函数安全性(see 判断一个函数是否可以安全调用)。
important-return-value ¶非 nil 的值会让字节编译器对调用该函数但不使用其返回值的代码发出警告。这对于那些忽略返回值很可能是错误的函数非常有用。
undo-inhibit-region若值非 nil,则在该函数执行后立即调用 undo 时,撤销操作不会被限制在当前激活区域内。See Undo。
variable-documentation若值非 nil,该属性用于指定对应变量的文档字符串。它由 defvar 及相关函数自动设置。See Defining Faces。