29.27 窗口参数

本节介绍可用于为窗口附加额外信息的窗口参数。

Function: window-parameter window parameter

该函数返回窗口 window 中参数 parameter 的值。window 默认为当前选中窗口。如果 window 未设置 parameter,函数返回 nil

Function: window-parameters &optional window

该函数返回 window 的所有参数及其值。window 默认为当前选中窗口。返回值为 nil 或一个关联表,其元素格式为 (parameter . value)

Function: set-window-parameter window parameter value

该函数将窗口 window 的参数 parameter 设为 value,并返回 valuewindow 默认为当前选中窗口。

默认情况下,用于保存和恢复窗口配置或窗口状态的函数(see 窗口配置)不会处理窗口参数。这意味着,如果你在 save-window-excursion 体内修改了某个参数的值,该宏退出时不会恢复原先的值。同时也意味着,当你通过 window-state-put 恢复此前由 window-state-get 保存的窗口状态时,所有克隆出的窗口参数都会被重置为 nil。下面的变量可用于覆盖这一标准行为:

Variable: window-persistent-parameters

该变量是一个关联表,用于指定哪些参数会被 current-window-configurationwindow-state-get 保存,并随后被 set-window-configurationwindow-state-put 恢复。See 窗口配置

该表中每个条目的 CAR 是一个表示参数的符号。其 CDR 可以是下列值之一:

nil

表示该参数既不会被 window-state-get 保存,也不会被 current-window-configuration 保存。

t

表示该参数会被 current-window-configuration 保存,并且在 window-state-getwritable 参数为 nil 时也会被保存。

writable

表示该参数会被 current-window-configurationwindow-state-get 无条件保存。该值不应用于那些值不具备可读语法的参数,否则在另一个会话中调用 window-state-put 可能会触发 invalid-read-syntax 错误。

部分函数(尤其是 delete-windowdelete-other-windowssplit-window)在其 window 参数指定的窗口拥有与函数名同名的参数时,可能会表现出特殊行为。你可以将下面的变量绑定为非 nil 来覆盖这类特殊行为:

Variable: ignore-window-parameters

若该变量非 nil,部分标准函数将不会处理窗口参数。当前受影响的函数有 split-windowdelete-windowdelete-other-windowsother-window

应用程序可在调用这些函数时将该变量绑定为非 nil。这样做之后,应用程序需全权负责在函数退出时正确设置所有相关窗口的参数。

下面是目前窗口管理代码所使用的参数:

delete-window

该参数会影响 delete-window 的执行行为(see 删除窗口)。

delete-other-windows

该参数会影响 delete-other-windows 的执行行为(see 删除窗口)。

no-delete-other-windows

该参数将窗口标记为不可被 delete-other-windows 删除(see 删除窗口)。

split-window

该参数会影响 split-window 的执行行为(see 拆分窗口)。

other-window

该参数会影响 other-window 的执行行为(see 窗口循环顺序)。

no-other-window

该参数将窗口标记为不可被 other-window 选中(see 窗口循环顺序)。

clone-of

该参数指明当前窗口是从哪个窗口克隆而来。它由 window-state-get 设置(see 窗口配置)。

window-preserved-size

该参数指定一个缓冲区、一个方向(nil 表示垂直,t 表示水平)以及一个以像素为单位的尺寸。如果当前窗口显示指定缓冲区,且其在对应方向上的尺寸与该参数指定的尺寸一致,Emacs 会尝试在该方向上保留窗口大小。该参数由 window-preserve-size 函数设置并更新(see 保留窗口尺寸)。

quit-restore

该参数由缓冲区显示函数设置(see 为显示缓冲区选择窗口),并由 quit-restore-window 读取(see 退出窗口)。它是一个包含四个元素的列表,详细说明见 退出窗口 中对 quit-restore-window 的描述。

window-side
window-slot

这些参数内部用于实现侧边窗口(see 侧边窗口)。

window-atom

该参数内部用于实现原子窗口,详见 原子窗口

mode-line-format

每当该窗口显示时,该参数会替换窗口所属缓冲区的缓冲区局部变量 mode-line-format 的值(see 模式行基础)。符号 none 表示为此窗口隐藏模式行。显示同一缓冲区的其他窗口的模式行显示与内容不受影响。

header-line-format

每当该窗口显示时,该参数会替换窗口所属缓冲区的缓冲区局部变量 header-line-format 的值(see 模式行基础)。符号 none 表示为此窗口隐藏标题行。显示同一缓冲区的其他窗口的标题行显示与内容不受影响。

tab-line-format

每当该窗口显示时,该参数会替换窗口所属缓冲区的缓冲区局部变量 tab-line-format 的值(see 模式行基础)。符号 none 表示为此窗口隐藏标签行。显示同一缓冲区的其他窗口的标签行显示与内容不受影响。

min-margins

该参数的值为一个 cons 单元,其 CARCDR(若非 nil)分别指定该窗口左右边距的最小列数(see 在边距中显示)。存在该参数时,Emacs 在判断窗口能否水平分割或缩小时,会使用这些值而非实际边距宽度。

Emacs 在分割或调整窗口大小后不会自动调整任何窗口的边距。设置该参数的应用程序需全权负责调整本窗口边距,以及因分割而继承边距的新窗口的边距。为此应使用 window-configuration-change-hookwindow-size-change-functions(see 窗口滚动与变更的钩子函数)。

该参数在 Emacs 25.1 版本引入,用于支持使用大边距在窗口中居中显示缓冲区文本的应用程序,且应谨慎地仅由这类应用使用。在未来 Emacs 版本中,它可能会被更完善的方案替代。