42.23.2 显示表

显示表是一种专用字符表(see 字符表),子类型为 display-table, 用于覆盖常规的字符显示规则。本节介绍如何创建、查看以及为显示表对象赋值。 下一节(see 活动显示表)介绍各种标准显示表及其优先级。

Function: make-display-table

创建并返回一个显示表。该表初始所有元素均为 nil

显示表的普通元素以字符编码为索引;索引 c 处的元素说明如何显示字符编码 c。 值应为 nil(表示按常规显示规则显示字符 c;see 常规显示规则), 或字形编码向量(表示按这些字形显示字符 c;see 字形)。

警告:如果使用显示表修改换行符的显示,整个缓冲区会显示为一长行。

显示表还包含六个 额外槽位(extra slots),用于特殊用途。下表为其含义;任意槽位为 nil 表示使用该槽位的默认值,如下所述。

0

表示屏幕行被截断末尾的字形(默认值为 ‘$’)。See 字形。 在图形终端上,Emacs 默认在边缘使用箭头表示截断,因此显示表无效,除非禁用边缘(see Window Fringes in the GNU Emacs Manual)。

1

表示折行末尾的字形(默认值为 ‘\’)。 在图形终端上,Emacs 默认在边缘使用弯箭头表示折行,因此显示表无效,除非禁用边缘。

2

表示以八进制编码显示字符时所用的字形(默认值为 ‘\’)。

3

表示控制字符的字形(默认值为 ‘^’)。

4

表示存在隐藏行的字形向量(默认值为 ‘...’)。See 选择性显示

5

用于绘制并排窗口间边框的字形(默认值为 ‘|’)。See 拆分窗口。 目前仅在文本终端有效;在图形终端上,若支持并启用垂直滚动条,滚动条会分隔两个窗口, 若无垂直滚动条且无分隔线(see 窗口分隔线),Emacs 使用细线表示边框。

例如,以下代码构造一个显示表,模拟将 ctl-arrow 设置为非 nil 的效果 (see 字形,函数 make-glyph-code 用法):

(setq disptab (make-display-table))
(dotimes (i 32)
  (or (= i ?\t)
      (= i ?\n)
      (aset disptab i
            (vector (make-glyph-code ?^ 'escape-glyph)
                    (make-glyph-code (+ i 64) 'escape-glyph)))))
(aset disptab 127
      (vector (make-glyph-code ?^ 'escape-glyph)
              (make-glyph-code ?? 'escape-glyph)))
Function: display-table-slot display-table slot

返回 display-table 的额外槽位 slot 的值。 参数 slot 可以是 0 至 5 的数字,或槽位名称(符号)。 有效符号为 truncationwrapescapecontrolselective-displayvertical-border

Function: set-display-table-slot display-table slot value

value 存入 display-table 的额外槽位 slot。 参数 slot 可以是 0 至 5 的数字,或槽位名称(符号)。 有效符号为 truncationwrapescapecontrolselective-displayvertical-border

Function: describe-display-table display-table

在帮助缓冲区中显示 display-table 的描述信息。

Command: describe-current-display-table

在帮助缓冲区中显示 display-table 的描述信息。