42.16.3 空格的像素规范

: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 单元)。

单位 inmmcm 分别指定每英寸、毫米、厘米对应的像素数。widthheight 单位对应当前文本视觉样式的默认宽度与高度。格式为 (image . props) 的图像规范(see 图像描述符)对应指定图像的宽度或高度。类似地,格式为 (xwidget . props) 的 xwidget 规范表示指定 xwidget 的宽度或高度。See 嵌入式原生组件

元素 left-fringeright-fringeleft-marginright-marginscroll-bartext 指定窗口对应区域的宽度。当窗口显示行号时(see 显示文本尺寸),text 区域宽度会减去行号显示占用的屏幕空间。

位置 leftcenterright 可与 :align-to 一同使用,指定相对于文本区域左边缘、中心或右边缘的位置。当窗口显示行号,且 :align-to 用于缓冲区文本的显示属性时(与标题行相对,见下文),leftcenter 位置会偏移行号显示占用的屏幕空间。

以上任意窗口元素(text 除外)也可与 :align-to 一同使用,指定位置相对于给定区域左边缘。一旦相对位置的基础偏移被设定(通过首次出现的此类符号),后续出现的这些符号会被解释为指定区域的宽度。例如,要对齐至左边距中心,使用:

:align-to (+ left-margin (0.5 . left-margin))

若未为对齐设定特定基础偏移,则始终相对于文本区域左边缘。例如,‘:align-to 0’ 对齐至文本区域的第一个文本列。当窗口显示行号时,文本被视为从行号显示空间结束处开始。

格式为 (num . expr) 的值表示 numexpr 值的乘积。例如,(2 . in) 指定 2 英寸宽度,而 (0.5 . image) 指定指定图像(需通过图像规范给出)宽度(或高度)的一半。

形式 (+ expr ...) 对各表达式值求和。形式 (- expr ...) 对表达式值取反或做减法。

标题行中使用 :align-to 显示规范的文本,在 display-line-numbers-mode 开启或关闭、或行号显示宽度改变时不会自动重新对齐。若要让标题行文本对齐随缓冲区文本更新,需在缓冲区中开启 header-line-indent-mode,并在显示规范中使用其两个变量 header-line-indentheader-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 列对齐。