当你使用命令 C-x o(other-window)选择其他窗口时,它会按照固定顺序遍历活动窗口。对于任意给定的窗口布局,该顺序始终不变,这被称为窗口的 循环顺序(cyclic ordering of windows)。
该顺序由对每个框架的窗口树进行深度优先遍历确定,遍历会提取作为树叶子节点的活动窗口(see 窗口与框架)。如果迷你缓冲区处于激活状态,迷你缓冲区窗口也会被包含在内。该顺序是循环的,因此序列中的最后一个窗口之后会回到第一个窗口。
该函数返回一个活动窗口,即窗口循环顺序中 window 的下一个窗口。window 应为活动窗口;若被省略或为 nil,则默认为当前选中窗口。
可选参数 minibuf 指定是否将迷你缓冲区窗口纳入循环顺序。通常,当 minibuf 为 nil 时,仅当迷你缓冲区窗口当前激活时才会被包含;这与 C-x o 的行为一致。(注意,只要迷你缓冲区正在使用,其窗口即为激活状态;参见 迷你缓冲区)。
若 minibuf 为 t,循环顺序将包含所有迷你缓冲区窗口。若 minibuf 既非 t 也非 nil,则即使迷你缓冲区窗口激活也不会被纳入。
可选参数 all-frames 指定要考虑的框架范围:
nil
表示仅考虑 window 所在框架上的窗口。若迷你缓冲区窗口被纳入(由 minibuf 参数指定),则共享该迷你缓冲区窗口的框架也会被一并考虑。
t
表示考虑所有已存在框架上的窗口。
visible
表示考虑所有可见框架上的窗口。
若需要考虑多个框架,循环顺序由这些框架各自的顺序按所有活动框架的列表顺序拼接而成(see 查找所有框架)。
该函数返回一个活动窗口,即窗口循环顺序中 window 的上一个窗口。其余参数的处理方式与 next-window 相同。
该函数选中一个活动窗口,即在窗口循环顺序中距离当前选中窗口 count 个位置的窗口。若 count 为正数,向前跳过 count 个窗口;若为负数,向后跳过 −count 个窗口;若 count 为 0,则重新选中当前窗口。交互式调用时,count 为数值前缀参数。
可选参数 all-frames 的含义与 next-window 中一致,相当于为 next-window 传入 nil 作为 minibuf 参数。交互式调用时,all-frames 始终为 nil,因此仅能选中当前框架上的窗口。
若 ignore-window-parameters 为 nil,该函数不会选中 no-other-window 窗口参数为非 nil 的窗口(see 窗口参数)。
若当前选中窗口的 other-window 参数为一个函数,且 ignore-window-parameters 为 nil,则会调用该函数并传入 count 与 all-frames 参数,替代本函数的常规行为。
该函数对每个活动窗口依次调用函数 fun,并将对应窗口作为参数传入。
遍历遵循窗口循环顺序。可选参数 minibuf 与 all-frames 指定纳入的窗口集合,含义与 next-window 相同。若 all-frames 指定了某个框架,遍历的第一个窗口为该框架上的第一个窗口(即 frame-first-window 返回的窗口),而非一定是当前选中窗口。
若 fun 通过拆分或删除窗口改变了窗口布局,不会改变遍历的窗口集合,该集合在首次调用 fun 前已确定。
若当前选中窗口是唯一的活动窗口,该函数返回 t,否则返回 nil。
若迷你缓冲区窗口激活,通常会被计入(因此函数会返回 nil)。但如果可选参数 no-mini 为非 nil,则即使迷你缓冲区窗口激活也会被忽略。可选参数 all-frames 的含义与 next-window 相同。
以下函数会返回满足特定条件的窗口,但不会选中它:
该函数返回一个根据启发式规则判定的最近最少使用的活动窗口。最近最少使用窗口(least recently used window) 是最近最少被选中的窗口——其使用时间早于所有其他活动窗口(see 选中窗口)。可选参数 all-frames 含义与 next-window 相同。
若存在全宽窗口,则仅在这类窗口中筛选。迷你缓冲区窗口永远不会成为候选。专用窗口(see 专用窗口)永远不会成为候选,除非可选参数 dedicated 为非 nil。除非是唯一候选,否则不会返回当前选中窗口。但若可选参数 not-selected 为非 nil,此时函数会返回 nil。可选参数 no-other 若为非 nil,表示永远不会返回 no-other-window 参数为非 nil 的窗口。
该函数与 get-lru-window 类似,但返回最近最常使用的窗口。最近最常使用窗口(most recently used window) 是最近被选中的窗口—其使用时间晚于所有其他活动窗口(see 选中窗口)。参数含义与 get-lru-window 相同。
由于实际中最近最常使用的窗口通常就是当前选中窗口,该函数一般只在传入非 nil 的 not-selected 参数时才有意义。
该函数返回面积最大(高度 × 宽度)的窗口。若存在两个大小相同的候选窗口,优先选择从当前选中窗口开始、在窗口循环顺序中靠前的一个。参数含义与 get-lru-window 相同。
该函数按窗口循环顺序依次对每个窗口调用函数 predicate,并将窗口作为参数传入。若某个窗口使谓词返回非 nil,函数立即停止并返回该窗口。若未找到符合条件的窗口,返回值为 default(默认为 nil)。
可选参数 minibuf 与 all-frames 指定搜索的窗口范围,含义与 next-window 相同。