:width、:align-to、:height 和 :ascent 属性的值可以是一类特殊表达式,它们会在重绘时求值,求值结果用作绝对像素数。
支持以下表达式形式:
expr ::= num | (num) | unit | elem | pos | image | xwidget | form num ::= integer | float | symbol unit ::= in | mm | cm | width | height
elem ::= left-fringe | right-fringe | left-margin | right-margin
| scroll-bar | text
pos ::= left | center | right
form ::= (num . expr) | (op expr ...)
op ::= + | -
形式 num 指定默认框架字体高度或宽度的比例。形式 (num) 指定绝对像素数。若 num 为符号 symbol,则使用其缓冲区局部变量绑定;该绑定可以是数字或上述形式的 cons 单元(包括另一个 car 为拥有缓冲区局部绑定符号的 cons 单元)。
单位 in、mm 和 cm 分别指定每英寸、毫米、厘米对应的像素数。width 和 height 单位对应当前文本视觉样式的默认宽度与高度。格式为 (image . props) 的图像规范(see 图像描述符)对应指定图像的宽度或高度。类似地,格式为 (xwidget . props) 的 xwidget 规范表示指定 xwidget 的宽度或高度。See 嵌入式原生组件。
元素 left-fringe、right-fringe、left-margin、right-margin、scroll-bar 和 text 指定窗口对应区域的宽度。当窗口显示行号时(see 显示文本尺寸),text 区域宽度会减去行号显示占用的屏幕空间。
位置 left、center 和 right 可与 :align-to 一同使用,指定相对于文本区域左边缘、中心或右边缘的位置。当窗口显示行号,且 :align-to 用于缓冲区文本的显示属性时(与标题行相对,见下文),left 和 center 位置会偏移行号显示占用的屏幕空间。
以上任意窗口元素(text 除外)也可与 :align-to 一同使用,指定位置相对于给定区域左边缘。一旦相对位置的基础偏移被设定(通过首次出现的此类符号),后续出现的这些符号会被解释为指定区域的宽度。例如,要对齐至左边距中心,使用:
:align-to (+ left-margin (0.5 . left-margin))
若未为对齐设定特定基础偏移,则始终相对于文本区域左边缘。例如,‘:align-to 0’ 对齐至文本区域的第一个文本列。当窗口显示行号时,文本被视为从行号显示空间结束处开始。
格式为 (num . expr) 的值表示 num 与 expr 值的乘积。例如,(2 . in) 指定 2 英寸宽度,而 (0.5 . image) 指定指定图像(需通过图像规范给出)宽度(或高度)的一半。
形式 (+ expr ...) 对各表达式值求和。形式 (- expr ...) 对表达式值取反或做减法。
标题行中使用 :align-to 显示规范的文本,在 display-line-numbers-mode 开启或关闭、或行号显示宽度改变时不会自动重新对齐。若要让标题行文本对齐随缓冲区文本更新,需在缓冲区中开启 header-line-indent-mode,并在显示规范中使用其两个变量 header-line-indent 和 header-line-indent-width。See 窗口标题栏。简单示例如下:
(setq header-line-format
(concat (propertize " "
'display
'(space :align-to
(+ header-line-indent-width 10)))
"Column"))
无论 display-line-numbers-mode 开启与否,以及行号显示宽度如何变化,标题行上的文本 ‘Column’ 都会与缓冲区文本的第 10 列对齐。