默认情况下,当切换菜单栏或工具栏、修改默认字体、 设置任意滚动条宽度等操作时,Emacs 会尽量保持框架文本区域的行数和列数不变。 这意味着在这些情况下,Emacs 必须请求窗口管理器调整框架窗口大小, 以适应尺寸变化。
有时,这种 implied frame resizing 框架隐式调整大小 是不希望发生的, 例如当框架已最大化或全屏时(默认会关闭此行为)。 通常,用户可以通过下面的选项禁用隐式调整:
如果该选项为 nil,修改框架字体、菜单栏、工具栏、内边框、
fringe 或滚动条时,可能会调整外部框架大小,以保持文本区域的行列数不变。
如果该选项为 t,则不会进行此类调整。
该选项的值也可以是一个框架参数列表。
此时,修改列表中出现的参数时,会禁止隐式调整。
当前受该选项控制的参数有:font、font-backend、
internal-border-width、menu-bar-lines 和 tool-bar-lines。
修改 scroll-bar-width、scroll-bar-height、
vertical-scroll-bars、horizontal-scroll-bars、
left-fringe 和 right-fringe 等框架参数时,
处理方式等同于框架只包含一个可用窗口。
例如,在一个包含多个并排窗口的框架上移除垂直滚动条时,
如果该选项为 nil,外部框架宽度会缩小一个滚动条的宽度;
如果该选项为 t 或列表包含 vertical-scroll-bars,则宽度保持不变。
默认值:
Lucid、Motif 和 MS-Windows 下为 (tab-bar-lines tool-bar-lines)
(表示添加/移除工具栏或标签栏不会改变外部框架高度);
包括 GTK+ 在内的其他窗口系统下为 (tab-bar-lines)
(表示除 tab-bar-lines 外,修改上述其他参数都可能改变外部框架大小);
无窗口系统支持时为 t
(表示外部框架大小永远不会隐式变化)。
注意,如果框架本身不够大,无法容纳上述任一参数的修改,
即使该选项非 nil,Emacs 仍可能尝试放大框架。
另请注意,当窗口管理器改变外部菜单栏或工具栏所占行数时, 通常不会请求调整框架大小。 典型场景是用户水平缩小框架,导致无法完整显示菜单或工具栏所有元素,从而触发“换行”。 主模式切换改变菜单或工具栏项目数量时也可能出现这种情况。 此类换行可能隐式改变框架文本区域的行数,且不受该选项设置影响。