42.16.5 在边距中显示

缓冲区左右两侧可存在名为 显示边距(display margins) 的空白区域。普通文本不会出现在这些区域中,但你可以通过 display 属性将内容放入显示边距。目前无法使边距中的文本或图像支持鼠标交互。

在边距中显示内容的方法是在某文本的 display 属性中指定边距显示规范。这是一种替换型显示规范,意味着设置该规范的文本本身不会显示;仅显示边距内容,原文本不显示。

边距显示规范格式为 ((margin right-margin) spec)((margin left-margin) spec)。其中 spec 是另一个指定边距显示内容的显示规范,通常为要显示的文本字符串或图像描述符。

若要在边距中显示内容并与特定缓冲区文本关联,同时不改变或阻止该文本显示,可在该文本上添加带有 before-string 属性的覆盖层,并将边距显示规范置于 before-string 内容上。

注意,若要在边距中显示的字符串未指定文本视觉样式,其样式将采用与文本区域字符串相同的规则与优先级确定(see 显示文本视觉样式)。若因此导致文本视觉样式不必要地 “渗透(leaking)” 到边距,需确保字符串显式指定文本视觉样式。

显示边距可显示内容前,必须为其设定非零宽度。通常方法是设置以下变量:

Variable: left-margin-width

该变量指定左边距宽度,单位为字符单元(又称 “列(column)”)。它在所有缓冲区中均为局部变量。值为 nil 表示无左侧边距区域。

Variable: right-margin-width

该变量指定右边距宽度,单位为字符单元。它在所有缓冲区中均为局部变量。值为 nil 表示无右侧边距区域。

设置这些变量不会立即影响窗口。变量仅在窗口显示新缓冲区时被检查。因此,你可以通过调用 set-window-buffer 使改动生效。请勿使用这些变量尝试获取当前左右边距宽度,而应使用函数 window-margins

你也可以立即设置边距宽度。

Function: set-window-margins window left &optional right

该函数为窗口 window 指定边距宽度,单位为字符单元。参数 left 控制左边距,right 控制右边距(默认为 0)。

window 尺寸不足以容纳指定宽度的边距,则保持 window 边距不变。

此处设定的值可能在后续对 window 调用 set-window-bufferkeep-margins 参数为 nil 或省略时被覆盖(see 缓冲区与窗口)。

Function: window-margins &optional window

该函数以格式为 (left . right) 的 cons 单元返回 window 的左右边距宽度。若某一侧边距不存在,其宽度返回 nil;若两侧均不存在则返回 (nil)。若 windownil,则使用选中窗口。