本节介绍可用于为窗口附加额外信息的窗口参数。
该函数返回窗口 window 中参数 parameter 的值。window 默认为当前选中窗口。如果 window 未设置 parameter,函数返回 nil。
该函数返回 window 的所有参数及其值。window 默认为当前选中窗口。返回值为 nil 或一个关联表,其元素格式为 (parameter . value)。
该函数将窗口 window 的参数 parameter 设为 value,并返回 value。window 默认为当前选中窗口。
默认情况下,用于保存和恢复窗口配置或窗口状态的函数(see 窗口配置)不会处理窗口参数。这意味着,如果你在 save-window-excursion 体内修改了某个参数的值,该宏退出时不会恢复原先的值。同时也意味着,当你通过 window-state-put 恢复此前由 window-state-get 保存的窗口状态时,所有克隆出的窗口参数都会被重置为 nil。下面的变量可用于覆盖这一标准行为:
该变量是一个关联表,用于指定哪些参数会被 current-window-configuration 和 window-state-get 保存,并随后被 set-window-configuration 和 window-state-put 恢复。See 窗口配置。
该表中每个条目的 CAR 是一个表示参数的符号。其 CDR 可以是下列值之一:
nil表示该参数既不会被 window-state-get 保存,也不会被 current-window-configuration 保存。
t表示该参数会被 current-window-configuration 保存,并且在 window-state-get 的 writable 参数为 nil 时也会被保存。
writable表示该参数会被 current-window-configuration 和 window-state-get 无条件保存。该值不应用于那些值不具备可读语法的参数,否则在另一个会话中调用 window-state-put 可能会触发 invalid-read-syntax 错误。
部分函数(尤其是 delete-window、delete-other-windows 和 split-window)在其 window 参数指定的窗口拥有与函数名同名的参数时,可能会表现出特殊行为。你可以将下面的变量绑定为非 nil 来覆盖这类特殊行为:
若该变量非 nil,部分标准函数将不会处理窗口参数。当前受影响的函数有 split-window、delete-window、delete-other-windows 和 other-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 单元,其 CAR 与 CDR(若非 nil)分别指定该窗口左右边距的最小列数(see 在边距中显示)。存在该参数时,Emacs 在判断窗口能否水平分割或缩小时,会使用这些值而非实际边距宽度。
Emacs 在分割或调整窗口大小后不会自动调整任何窗口的边距。设置该参数的应用程序需全权负责调整本窗口边距,以及因分割而继承边距的新窗口的边距。为此应使用 window-configuration-change-hook 和 window-size-change-functions(see 窗口滚动与变更的钩子函数)。
该参数在 Emacs 25.1 版本引入,用于支持使用大边距在窗口中居中显示缓冲区文本的应用程序,且应谨慎地仅由这类应用使用。在未来 Emacs 版本中,它可能会被更完善的方案替代。