30.3.3 框架位置

在图形系统中,普通顶层框架的位置由其外部框架的绝对位置指定(see 框架几何属性)。 子框架(see 子框架)的位置通过其外边缘相对于父框架原生位置的像素偏移来指定。

你可以使用框架参数 lefttop 读取或修改框架位置(see 位置参数)。 下面是另外两个用于操作已存在、可见框架位置的函数。 对这两个函数而言,参数 frame 必须是一个可用框架,默认为当前选中框架。

Function: frame-position &optional frame

对于普通非子框架,该函数返回其外部位置(see 框架布局) 相对于显示器原点 (0, 0) 的像素坐标 cons 对。 对于子框架(see 子框架),该函数返回其外部位置 相对于父框架原生位置作为原点 (0, 0) 的像素坐标。

负值永远不表示相对于显示器或父框架右边缘、下边缘的偏移。 相反,它们意味着 frame 的外部位置位于显示器原点 或父框架原生位置的左侧和/或上方。 这通常表示该框架只部分可见(或完全不可见)。 不过,在显示器原点与左上角不重合的系统上,框架可能显示在副显示器上。

在文本终端框架上,两个坐标值均为 0。

Function: set-frame-position frame x y

该函数将 frame 的外部框架位置设置为 (x, y)。 后两个参数以像素为单位,通常从框架显示器的原点 (0, 0) 开始计算。 对于子框架,则从其父框架的原生位置开始计算。

负的参数值会将外部框架的右边缘放置在屏幕(或父框架原生矩形) 右边缘左侧 -x 像素处,并将下边缘放置在屏幕(或父框架原生矩形) 下边缘上方 -y 像素处。

注意,负值无法让框架的右边缘或下边缘精确对齐显示器或父框架的右、下边缘, 也不能指定一个超出显示器或父框架边缘的位置。 框架参数 lefttop(see 位置参数) 可以实现这些效果,但在初始框架或新框架上可能效果不佳。

该函数对文本终端框架无效。

Variable: move-frame-functions

该钩子指定了当 Emacs 框架被窗口系统或窗口管理器移动(分配新位置)时运行的函数。 这些函数接收一个参数,即被移动的框架。 对于子框架(see 子框架),仅当框架相对于父框架的位置发生变化时才会运行。