下面这个用于 display-buffer 的动作函数(see 缓冲区显示动作函数)会创建或复用一个侧边窗口来显示指定的缓冲区。
该函数在当前选中框架的侧边窗口中显示 buffer。它返回用于显示该缓冲区的窗口,若无法找到或创建则返回 nil。
alist 是符号与取值的关联列表,用法与 display-buffer 一致。其中下列符号对本函数有特殊含义:
side表示窗口应位于框架的哪一侧。有效值为 left(左侧)、top(顶部)、right(右侧)和 bottom(底部)。若未指定,窗口默认位于框架底部。
slot表示在指定侧边放置窗口的位置序号。值为 0 表示优先将窗口放在该侧边的中间。负值表示使用中间位置之前的位置(即上方或左侧)。正值表示使用中间位置之后的位置(即下方或右侧)。因此,同一侧边的所有窗口会按照其 slot 值排序。若未指定,窗口默认位于该侧边中间。
dedicated专用标记(see 专用窗口)对侧边窗口的含义略有不同。创建侧边窗口时,该标记会被设为 side,以防止 display-buffer 在其他动作函数中使用该窗口。该值在多次调用 quit-window、kill-buffer、previous-buffer 和 next-buffer 期间保持不变。
具体来说,这些命令不会在侧边窗口中显示此前从未在该窗口显示过的缓冲区,也不会让普通的非侧边窗口显示已经在侧边窗口显示过的缓冲区。后一条规则的一个明显例外是:应用程序在显示缓冲区后重置了该缓冲区的局部变量。若要覆盖这些规则,始终通过 quit-window 或 kill-buffer 删除侧边窗口,并最终禁止使用 previous-buffer 和 next-buffer,可将该值设为 t,或通过 display-buffer-mark-dedicated 指定对应值。
如果你为两个或多个不同缓冲区指定同一侧边的同一位置序号,最后显示的缓冲区会出现在对应窗口中。因此,位置序号可用于让多个缓冲区共享同一个侧边窗口。
该函数会设置 window-side 和 window-slot 参数(see 窗口参数)并使其持久生效。除非通过 alist 中的 window-parameters 条目显式提供,否则它不会设置其他窗口参数。
默认情况下,侧边窗口无法通过 split-window 分割(see 拆分窗口)。同时,任何缓冲区显示动作(see 缓冲区显示动作函数)都不会复用或分割侧边窗口,除非显式将其指定为目标窗口。另外,delete-other-windows 也无法将侧边窗口设为框架上的唯一窗口(see 删除窗口)。