42.23.5 无字形字符显示

无字形字符(Glyphless characters)指以特殊方式显示的字符,例如显示为包含十六进制编码的方框,而非原样显示。 包括显式定义为无字形的字符、图形显示器上无可用字体的字符, 以及文本终端上无法由终端编码系统编码的字符。

glyphless-display-mode 次要模式可用于在当前缓冲区中方便地切换无字形字符的显示。 启用该模式时,所有无字形字符均显示为包含字符名称缩写的方框。

Variable: glyphless-char-display

如需更精细(全局)的控制,可使用该变量。 其值为字符表,定义无字形字符及其显示方式。每个条目必须为以下显示方式之一:

nil

按常规方式显示该字符。

zero-width

不显示该字符。

thin-space

显示窄空格,图形显示器上为 1 像素宽,文本终端上为 1 字符宽。

empty-box

显示空方框。

hex-code

显示包含该字符 Unicode 编码的十六进制方框。

an ASCII string

显示包含该字符串的方框。字符串最多包含 6 个 ASCII 字符。 例外情况:若字符串仅含一个字符,在文本模式终端上该字符会不带方框显示; 这样可以将此类 “缩写(acronyms)” 用作终端无法显示字符的替代字符。

序对 (graphical . text)

在图形显示器上使用 graphical 显示,文本终端上使用 text 显示。 graphicaltext 均为上述显示方式之一。

thin-spaceempty-boxhex-codeASCII 字符串 显示方式使用 glyphless-char 文本视觉样式绘制。 在文本终端上,方框用方括号 ‘[]’ 模拟。

该字符表有一个额外槽位,决定如何显示无可用字体或无法由终端编码系统编码的字符。 其值应为上述显示方式之一,但 zero-width 除外。

若字符在活动显示表中有非 nil 条目,则显示表生效; 此时 Emacs 完全不会查询 glyphless-char-display

User Option: glyphless-char-display-control

该用户选项提供便捷方式,为同类字符组设置 glyphless-char-display。 不要从 Lisp 代码直接设置其值;该值仅通过自定义 :set 函数生效(see 定义自定义变量), 该函数会更新 glyphless-char-display

其值应为元素为 (group . method) 的关联列表, 其中 group 为指定字符组的符号,method 为指定显示方式的符号。

group 应为以下之一:

c0-control

ASCII 控制字符 U+0000U+001F, 排除换行符与制表符(通常显示为 ‘^A’ 之类的转义序列;see How Text Is Displayed in The GNU Emacs Manual)。

c1-control

ASCII 不可打印字符 U+0080U+009F (通常显示为 ‘\230’ 之类的八进制转义序列)。

format-control

Unicode 通用类别 [Cf] 的字符,如 U+200E 从左至右标记, 但排除有图形图像的字符,如 U+00AD 软连字符

bidi-control

format-control 的子集,仅包含与双向格式化控制相关的字符, 如 U+2069 弹出方向隔离符 与 U+202A 从左至右嵌入。See 双向显示

属于 Unicode 通用类别 [Cf] 的字符,例如 U+200E 从左至右标记,但不包含具有图形显示的字符,例如 U+00AD 软连字符

variation-selectors

Unicode 变体选择符 1 至 256(U+FE00 至 U+FE0F 与 U+E0100 至 U+E01EF), 用于为同一编码选择不同字形(通常为表情符号)。

no-font

无合适字体、无法由终端编码系统编码,或文本模式终端无对应字形的字符。

method 符号应为 zero-widththin-spaceempty-boxhex-code 之一。 含义与上述 glyphless-char-display 中相同。