42.16 display 属性

display 文本属性(或覆盖层属性)用于将图像插入文本,并控制文本显示的其他方面。同一 display 属性值中的显示规范通常会并行应用于它们所覆盖的文本。

如果多个来源(覆盖层和/或文本属性)为 display 属性指定值,则只有一个值会生效,遵循 get-char-property 的规则。See 查看文本属性

display 属性的值应当是一个显示规范,或是包含多个显示规范的列表或向量。

Function: get-display-property position prop &optional object properties

这个便捷函数可用于获取特定的显示属性,无论 display 属性是向量、列表还是简单属性。它的作用类似于 get-text-property(see 查看文本属性),但仅作用于 display 属性。

position 是要检查的缓冲区或字符串中的位置,prop 是要返回的 display 属性。可选参数 object 应当是字符串或缓冲区,默认为当前缓冲区。如果可选参数 propertiesnil,则它应当是一个 display 属性,此时会忽略 positionobject。(例如,如果你已经通过 get-char-property 获取了 display 属性,这会很有用,see 查看文本属性)。

Function: add-display-text-property start end prop value &optional object

为从 startend 的文本添加值为 valuedisplay 属性 prop

如果区域内的任意文本拥有非 nildisplay 属性,这些属性会被保留。例如:

(add-display-text-property 4 8 'height 2.0)
(add-display-text-property 2 12 'raise 0.5)

执行上述代码后,2 到 4 区域的文本会拥有 raise 类型的 display 属性,4 到 8 区域的文本会同时拥有 raiseheight 类型的 display 属性,最后 8 到 12 区域的文本仅拥有 raise 类型的 display 属性。

如果 objectnil,则它应当是字符串或缓冲区。若为 nil,则默认使用当前缓冲区。

部分显示规范允许包含 Lisp 表达式,这些表达式会在显示时求值。在某些场景下这可能存在安全风险,例如当显示规范由外部程序/代理生成时。将显示规范包装在以特殊符号 disable-eval 开头的列表中,如 (disable-eval spec),会禁用 spec 中所有 Lisp 表达式的求值,同时仍支持所有其他显示属性功能。

本节剩余部分将介绍几种不同类型的显示规范及其含义。