在 Emacs 内部指定 size of a frame 框架尺寸 的标准方式, 是设置它的 text size 文本尺寸—即框架文本区域的宽度与高度组成的数值对 (see 框架布局)。它既可以用像素度量,也可以用框架的标准字符尺寸度量 (see 框架字体)。
对于带有内部菜单栏或工具栏的框架,在框架实际绘制之前,
无法精确得知其原生高度。这意味着通常不能用原生尺寸指定框架的初始大小。
一旦你知道了可见框架的原生尺寸,就可以通过 frame-geometry
返回值中的其余组成部分相加,计算出它的外部尺寸(see 框架布局)。
但对于不可见框架或尚未创建的框架,外部尺寸只能估算。
这也意味着无法通过屏幕右边缘或下边缘偏移量
(see 框架位置)精确计算框架的初始位置。
任何框架的文本尺寸都可以借助 height 和 width 框架参数
进行设置和获取(see 尺寸参数)。初始框架的文本尺寸
也可以通过 X 风格的几何规格设置。See Command Line Arguments for Emacs Invocation in The GNU Emacs Manual.
下面列出一些用于访问和设置已存在可见框架尺寸的函数,默认操作当前选中框架。
这些函数返回 frame 文本区域的高度和宽度,
以该框架默认字体的高度和宽度为单位(see 框架字体)。
它们只是 (frame-parameter frame 'height) 和
(frame-parameter frame 'width) 的简便写法。
如果 frame 文本区域的像素尺寸不是默认字体尺寸的整数倍, 这些函数返回的值会向下取整为能完全放入文本区域的默认字体字符数量。
接下来的函数返回指定框架的原生、外部、内部框架 以及文本区域的像素宽度和高度(see 框架布局)。 对于文本终端,结果以字符为单位而非像素。
这些函数以像素为单位返回 frame 的外部宽度和高度。
这些函数以像素为单位返回 frame 的原生宽度和高度。
这些函数以像素为单位返回 frame 的内部宽度和高度。
这些函数以像素为单位返回 frame 文本区域的宽度和高度。
在支持该特性的窗口系统上,Emacs 默认会让框架以像素计量的文本尺寸 保持为框架字符尺寸的整数倍。但这通常意味着,拖动外部边框调整框架大小时, 只能按字符尺寸步进。这也可能导致真正最大化框架、 或让其“全屏高(fullheight)”、“全屏宽(fullwidth)” 时失效(see 尺寸参数), 在框架下方和/或右侧留下空白。下面的选项可用于解决该问题。
如果该选项为 nil(默认值),则每次调整框架大小时,
其文本像素尺寸通常会取整为该框架当前 frame-char-height
和 frame-char-width 的整数倍。如果为非 nil,
则不进行取整,因此框架尺寸可以逐像素增减。
设置该变量通常会让下一次调整尺寸操作向窗口管理器传递相应的尺寸提示。 这意味着该变量只应在用户初始化文件中设置;程序不应临时绑定它。
该选项为 nil 的确切含义取决于所用工具包。
只要窗口管理器愿意处理对应的尺寸提示,用鼠标拖动外部边框就会按字符步进。
但以非字符尺寸整数倍的参数调用 set-frame-size(见下文)时,
结果可能是:被忽略、触发取整(GTK+)或被直接接受(Lucid、Motif、MS-Windows)。
在某些窗口管理器下,你可能需要将其设为非 nil,
才能让框架真正最大化或全屏显示。
该函数设置 frame 文本区域的尺寸, 以该框架上字符的标准高度和宽度为单位计量(see 框架字体)。
可选参数 pixelwise 为非 nil 时,
表示新的宽度和高度以像素为单位。
注意,如果 frame-resize-pixelwise 为 nil,
某些工具包可能会拒绝接受未按字符尺寸整数倍增减的尺寸请求。
该函数将 frame 的文本区域高度调整为 height 行。 框架内现有窗口的尺寸会按比例适配。
如果 pretend 为非 nil,
Emacs 会在 frame 中显示 height 行输出,
但不改变框架实际高度的内部值。这仅对文本终端有用。
使用比终端实际尺寸更小的高度,
可用于复现小屏幕上的行为,或在终端全屏使用时出现异常时规避问题。
直接设置框架高度并不总是有效,因为在文本终端上,
正确的光标定位可能需要知道确切的实际尺寸。
可选的第四个参数 pixelwise 为非 nil 时,
表示 frame 高度为 height 像素。
注意,如果 frame-resize-pixelwise 为 nil,
某些窗口管理器可能会拒绝接受未按字符高度整数倍增减的高度请求。
交互式使用时,该命令会询问用户要将当前选中框架设置为多少行高度。 你也可以通过数字前缀传入该值。
该函数以字符为单位设置 frame 文本区域的宽度。
参数 pretend 的含义与 set-frame-height 中相同。
可选的第四个参数 pixelwise 为非 nil 时,
表示 frame 宽度为 width 像素。
注意,如果 frame-resize-pixelwise 为 nil,
某些窗口管理器可能会拒绝接受未按字符宽度整数倍增减的宽度请求。
交互式使用时,该命令会询问用户要将当前选中框架设置为多少列宽度。 你也可以通过数字前缀传入该值。
这三个函数都不会把框架缩小到不足以显示其所有窗口
(包含滚动条、fringe、边距、分隔线、模式行和标题行)的程度。
这与窗口管理器触发的调整请求不同——例如用鼠标拖动框架外部边框时,
系统总会接受请求,必要时通过裁剪框架右下角无法显示的部分来实现。
从 Emacs 内部调整框架大小时,可使用参数 min-width 和 min-height
(see 尺寸参数)实现类似行为。
异常钩子 window-size-change-functions(see 窗口滚动与变更的钩子函数)
会跟踪框架内部尺寸的所有变化,包括由窗口系统或窗口管理器请求引发的变化。
为了排除仅调整框架内窗口大小、但未实际改变内部框架尺寸时可能出现的误判,
可使用下面的函数。
该函数在 frame 的内部宽度或高度
自上次为其运行 window-size-change-functions 以来发生变化时,
返回非 nil。在为 frame 运行完 window-size-change-functions 后,
它会立即返回 nil。