大多数窗口系统都使用桌面隐喻。该隐喻的一部分是指,系统级窗口(例如代表 Emacs 框架的窗口)在垂直于屏幕表面的假想第三维度中进行堆叠。由此产生的顺序是全序的,通常称为堆叠顺序(或 Z 序)。当两个窗口的区域重叠时,堆叠顺序中位置更高的窗口会(部分)覆盖下方的窗口。
你可以使用函数 raise-frame 和 lower-frame 将一个框架 置顶(raise) 到该顺序的顶端,或将其 置底(lower) 到该顺序的底端。你可以使用函数 frame-restack 将一个框架直接 调整堆叠位置(restack) 至另一个框架的上方或下方。
请注意,下述所有函数都会遵循框架(以及所有其他窗口系统窗口)所属的 Z 组规则 (see 位置参数)。例如,你通常无法将一个框架置于桌面窗口之下,也无法将 z-group 参数为 nil 的框架置顶到窗口系统的任务栏或提示窗口之上。
此函数将框架 frame(默认为选中框架)置顶到所有属于相同或更低 Z 组的其他框架之上。如果 frame 不可见或已图标化,该操作会使其变为可见。如果 frame 是子框架 (see 子框架),该函数会将其置顶到其父框架的所有其他子框架之上。
此函数将框架 frame(默认为选中框架)置底到所有属于相同或更高 Z 组的其他框架之下。如果 frame 是子框架 (see 子框架),该函数会将其置底到其父框架的所有其他子框架之下。
此函数将 frame1 调整堆叠至 frame2 下方。这意味着,如果两个框架均可见且显示区域重叠,frame2 会(部分)遮挡 frame1。如果可选的第三个参数 above 为非 nil,该函数会将 frame1 调整堆叠至 frame2 上方。这意味着,如果两个框架均可见且显示区域重叠,frame1 会(部分)遮挡 frame2。
从技术上讲,该函数可被视为一个分两步执行的原子操作:第一步将 frame1 对应的窗口系统窗口从显示中移除;第二步将 frame1 的窗口重新插入显示中,位置在 frame2 之下(若 above 为真则在之上)。因此,除 frame1 外,frame2 在显示的 Z(堆叠)序中相对于其他所有框架的位置保持不变。
部分窗口管理器可能拒绝调整窗口堆叠顺序。
请注意,堆叠调整的效果仅在相关框架均未被图标化或设为不可见时有效。你可以使用 z-group 框架参数 (see 位置参数) 将一个框架加入永久显示在其他框架之上或之下的组。只要框架属于此类组,对其堆叠调整仅会影响它在组内的相对堆叠位置。对属于不同 Z 组的框架进行堆叠调整的效果是未定义的。你可以使用函数 frame-list-z-order 按当前堆叠顺序列出框架 (see 查找所有框架)。
如果该选项为非 nil,激活迷你缓冲区时会自动将该迷你缓冲区窗口所在的框架置顶。
在窗口系统上,你还可以通过框架参数启用自动置顶(选中框架时)或自动置底(取消选中框架时)功能。See 窗口管理参数。
框架置顶与置底的概念同样适用于文本终端框架。在每个文本终端上,同一时刻只会显示最顶层的框架。
此函数返回 terminal 上的顶层框架。terminal 应为一个终端对象、一个框架(代表该框架所属的终端)或 nil(代表选中框架所属的终端)。如果它不指向文本终端,则返回值为 nil。