33.19 文本属性

缓冲区或字符串中的每个字符位置都可以拥有一个文本属性列表(text property list),其形式与符号的属性列表非常相似(see 属性列表)。 这些属性归属于特定位置的特定字符,例如本句开头的字母 ‘T’ 或 ‘foo’ 中的第一个 ‘o’—同一个字符出现在两个不同位置时,这两处字符通常会有不同的属性。

每个属性都有名称和值。两者都可以是任意 Lisp 对象,但属性名通常是符号。 通常每个属性名符号都有特定用途;例如,文本属性 face 用于指定字符显示所用的外观样式(see 具有特殊含义的文本属性)。 访问属性列表的常规方式是指定属性名,并查询其对应的属性值。

如果一个字符拥有 category 属性,我们将其称为该字符的属性类别(property category)。 该属性的值应当是一个符号,此符号自身的属性会作为该字符属性的默认值。

在字符串与缓冲区之间复制文本时,会连同字符一起保留属性; 这包括 substringinsertbuffer-substring 等各类函数。 剪切(kill)文本后再粘贴(yank)(see 删除环)也会保留属性, 但部分属性会被特殊处理,粘贴时可能被移除;详见 see 取回文本