描述框架 X、Y 偏移的参数始终以 像素(pixels) 为单位。 对于普通非子框架,它们指定框架外部位置(outer position)(see 框架几何属性) 相对于显示器原点的偏移;对于子框架(see 子框架), 则指定其外部位置相对于 父框架原生位置 的偏移。 (注意:这些参数在 TTY 框架上均无效。))
left ¶框架左外边缘相对于显示器或父框架左边缘的像素位置。 可以通过以下几种方式指定:
正整数表示框架左边缘对齐显示器/父框架左边缘; 负整数表示框架右边缘对齐显示器/父框架右边缘。
(+ pos)指定框架左边缘相对于显示器/父框架左边缘的位置。 整数 pos 可正可负;负值表示位置超出屏幕/父框架, 或在多显示器环境下位于非主显示器。
(- pos)指定框架右边缘相对于显示器/父框架右边缘的位置。 整数 pos 可正可负;负值表示位置超出屏幕/父框架, 或在多显示器环境下位于非主显示器。
0.0~1.0 之间的浮点数通过 左侧位置比例(left position ratio) 指定左边缘偏移: 即框架外框左边缘相对于工作区(see 多终端) 或父框架原生区域(see 子框架) 扣除自身外框宽度后的比例。 因此,0.0 靠左,0.5 居中,1.0 靠右。 同理,顶部位置比例(top position ratio) 是框架上边缘位置 相对于工作区/父框架高度扣除自身高度后的比例。
如果子框架的 keep-ratio 参数非 nil (see 框架交互参数),
当父框架大小改变时,Emacs 会尽量保持其位置比例不变。
由于框架外框尺寸(see 框架几何属性)通常在框架显示后才能确定, 因此创建带装饰的框架时一般不建议使用浮点数。 浮点数更适合用于让(无装饰)子框架在父框架内美观定位。
部分窗口管理器会忽略程序指定的位置。
若想确保位置生效,可将 user-position 参数设为非 nil,例如:
(modify-frame-parameters nil '((user-position . t) (left . (+ -4))))
通常不建议将框架相对于屏幕右/下边缘定位。 初始框架或新框架的这类定位要么不准确(外框尺寸在显示前未知), 要么会产生额外闪烁(显示后需要重新调整位置)。
另请注意:以右/下边缘为基准的位置、浮点偏移,
在内部都会被存储为相对于显示器/父框架左/上边缘的整数偏移,
frame-parameters 等函数也会如此返回,
top ¶框架上边缘(或下边缘)相对于显示器/父框架上边缘(或下边缘)的像素位置。
用法与 left 完全一致,只是方向为垂直而非水平。
icon-left ¶框架图标化后,其图标左边缘相对于屏幕左边缘的像素位置。
仅在窗口管理器支持该特性时生效。
设置此参数时必须同时设置 icon-top,反之亦然。
icon-top ¶框架图标化后,其图标上边缘相对于屏幕上边缘的像素位置。 仅在窗口管理器支持该特性时生效。
user-position ¶在使用 left、top 创建框架时,
该参数用于说明位置是用户指定(人工明确要求)
还是程序指定(程序自动设置)。
非 nil 值表示由用户指定。
窗口管理器通常会尊重用户指定的位置,部分也会尊重程序指定的位置,
但很多会忽略程序位置,采用默认摆放或让用户用鼠标放置。
包括 twm 在内的一些窗口管理器允许用户选择是否遵循程序位置。
调用 make-frame 时,
如果 left、top 反映用户明确偏好,应设为非 nil;否则为 nil。
z-group ¶指定框架在窗口系统层级(Z-order)中的相对位置。
above:显示在所有未设置 above 的窗口之上。
nil:在所有 above 窗口之下、below 窗口之上。
below:显示在所有未设置 below 的窗口之下。
若要将框架置于某个特定框架之上或之下,使用 frame-restack(see 框架的置顶、置底与堆叠调整)。