29.17.1 在侧边窗口中显示缓冲区

下面这个用于 display-buffer 的动作函数(see 缓冲区显示动作函数)会创建或复用一个侧边窗口来显示指定的缓冲区。

Function: display-buffer-in-side-window buffer alist

该函数在当前选中框架的侧边窗口中显示 buffer。它返回用于显示该缓冲区的窗口,若无法找到或创建则返回 nil

alist 是符号与取值的关联列表,用法与 display-buffer 一致。其中下列符号对本函数有特殊含义:

side

表示窗口应位于框架的哪一侧。有效值为 left(左侧)、top(顶部)、right(右侧)和 bottom(底部)。若未指定,窗口默认位于框架底部。

slot

表示在指定侧边放置窗口的位置序号。值为 0 表示优先将窗口放在该侧边的中间。负值表示使用中间位置之前的位置(即上方或左侧)。正值表示使用中间位置之后的位置(即下方或右侧)。因此,同一侧边的所有窗口会按照其 slot 值排序。若未指定,窗口默认位于该侧边中间。

dedicated

专用标记(see 专用窗口)对侧边窗口的含义略有不同。创建侧边窗口时,该标记会被设为 side,以防止 display-buffer 在其他动作函数中使用该窗口。该值在多次调用 quit-windowkill-bufferprevious-buffernext-buffer 期间保持不变。

具体来说,这些命令不会在侧边窗口中显示此前从未在该窗口显示过的缓冲区,也不会让普通的非侧边窗口显示已经在侧边窗口显示过的缓冲区。后一条规则的一个明显例外是:应用程序在显示缓冲区后重置了该缓冲区的局部变量。若要覆盖这些规则,始终通过 quit-windowkill-buffer 删除侧边窗口,并最终禁止使用 previous-buffernext-buffer,可将该值设为 t,或通过 display-buffer-mark-dedicated 指定对应值。

如果你为两个或多个不同缓冲区指定同一侧边的同一位置序号,最后显示的缓冲区会出现在对应窗口中。因此,位置序号可用于让多个缓冲区共享同一个侧边窗口。

该函数会设置 window-sidewindow-slot 参数(see 窗口参数)并使其持久生效。除非通过 alist 中的 window-parameters 条目显式提供,否则它不会设置其他窗口参数。

默认情况下,侧边窗口无法通过 split-window 分割(see 拆分窗口)。同时,任何缓冲区显示动作(see 缓冲区显示动作函数)都不会复用或分割侧边窗口,除非显式将其指定为目标窗口。另外,delete-other-windows 也无法将侧边窗口设为框架上的唯一窗口(see 删除窗口)。