删除(Deleting) 窗口会将其从框架的窗口树中移除。如果该窗口是活动窗口,它会从屏幕上消失;如果是内部窗口,其子窗口也会被一并删除。
即便窗口被删除,它仍会作为 Lisp 对象存在,直到没有任何引用指向它为止。通过恢复已保存的窗口配置(see 窗口配置),可以撤销窗口删除操作。
该函数将 window 从显示中移除,并返回 nil。若 window 被省略或为 nil,则默认为当前选中的窗口。
如果删除该窗口后,窗口树中不再有任何窗口(例如,它是框架中唯一的活动窗口),或者 window 所属框架上剩余的所有窗口均为侧边窗口(see 侧边窗口),函数会抛出错误。若 window 是原子窗口(see 原子窗口)的一部分,该函数会尝试删除该原子窗口的根窗口。
默认情况下,window 占用的空间会分配给其相邻的同级窗口(如果存在)。但如果变量 window-combination-resize 为非 nil,该空间会按比例分配给同一窗口组合中剩余的所有窗口。See 重组窗口。
只要变量 ignore-window-parameters 为 nil,该函数的行为可能会被 window 的窗口参数改变。若 delete-window 窗口参数的值为 t,该函数会忽略所有其他窗口参数;否则,若 delete-window 窗口参数的值是一个函数,该函数会以 window 为参数被调用,替代 delete-window 原本的行为。See 窗口参数。
当 delete-window 删除其所属框架的选中窗口时,必须将另一个窗口设为该框架新的选中窗口。以下选项可配置选中窗口的选择规则:
该选项用于指定 delete-window 删除原选中窗口后,框架的新选中窗口应如何选择。可选值包括:
mru
(默认值)选择该框架上最近使用过的窗口。
pos
选择包含原选中窗口光标位置对应框架坐标的窗口。
nil
选择该框架上的第一个窗口(即 frame-first-window 函数返回的窗口)。
仅当该框架上所有其他窗口的 no-other-window 参数均为非 nil 时,才会选择 no-other-window 参数为非 nil 的窗口。
该函数会让 window 占满其所属框架,并按需删除其他窗口。若 window 被省略或为 nil,则默认为当前选中的窗口。如果 window 是侧边窗口(see 侧边窗口),函数会抛出错误。若 window 是原子窗口(see 原子窗口)的一部分,该函数会尝试让该原子窗口的根窗口占满其所属框架。函数返回值为 nil。
只要变量 ignore-window-parameters 为 nil,该函数的行为可能会被 window 的窗口参数改变。若 delete-other-windows 窗口参数的值为 t,该函数会忽略所有其他窗口参数;否则,若 delete-other-windows 窗口参数的值是一个函数,该函数会以 window 为参数被调用,替代 delete-other-windows 原本的行为。See 窗口参数。
此外,若 ignore-window-parameters 为 nil,该函数不会删除任何 no-delete-other-windows 参数为非 nil 的窗口。
该函数会对所有显示 buffer-or-name 的窗口调用 delete-window,从而删除这些窗口。buffer-or-name 可以是一个缓冲区,也可以是缓冲区名称;若被省略或为 nil,则默认为当前缓冲区。如果没有窗口显示指定的缓冲区,该函数不执行任何操作;若指定的缓冲区是迷你缓冲区,函数会抛出错误。
如果存在一个专用于显示该缓冲区的窗口,且该窗口是其所属框架上的唯一窗口,同时该框架并非终端上的唯一框架,那么该函数还会删除该框架。
可选参数 frame 指定要操作的框架范围:
nil
表示操作所有框架。
t
表示操作当前选中的框架。
visible
表示操作所有可见的框架。
0
表示操作所有可见或已图标化的框架。
注意,该参数的含义与其他遍历所有活动窗口的函数(see 窗口循环顺序)不同。具体来说,此处 t 和 nil 的含义与那些函数中完全相反。