Циклический порядок окон
При использовании команды C-x o (other-window) для выбора другого окна команда проходит по активным окнам в определённом порядке. Для любой конфигурации окон этот порядок остаётся неизменным. Он называется циклическим порядком окон.
Порядок определяется обходом в глубину дерева окон каждого фрейма с получением активных окон, являющихся листовыми узлами дерева (см. Окна и фреймы). Если активен минибуфер, в обход включается и его окно. Порядок циклический, поэтому за последним окном в последовательности следует первое.
- Функция: next-window &optional window minibuf all-frames
-
Эта функция возвращает активное окно, следующее за window в циклическом порядке окон. window должно быть активным окном; если аргумент опущен или равен
nil, по умолчанию используется выбранное окно.Необязательный аргумент minibuf указывает, следует ли включать окна минибуфера в циклический порядок. Обычно, если minibuf равен
nil, окно минибуфера включается, только если оно активно в данный момент; это соответствует поведению команды C-x o. (Обратите внимание, что окно минибуфера активно, пока используется сам минибуфер; см. Минибуферы.)Если minibuf равен
t, в циклический порядок включаются все окна минибуфера. Если minibuf не равен ниt, ниnil, окна минибуфера не включаются, даже если они активны.Необязательный аргумент all-frames указывает, какие фреймы следует учитывать:
-
nilозначает, что учитываются окна фрейма window. Если учитывается окно минибуфера (как указано аргументом minibuf), также учитываются фреймы, использующие это окно минибуфера. -
tозначает, что учитываются окна всех существующих фреймов. -
visibleозначает, что учитываются окна всех видимых фреймов. - 0 означает, что учитываются окна всех видимых или свёрнутых в значки фреймов.
- Фрейм означает, что учитываются окна только указанного фрейма.
- Любое другое значение означает, что учитываются окна фрейма window и никакие другие.
Если учитывается несколько фреймов, циклический порядок формируется добавлением порядков этих фреймов в том же порядке, в котором они расположены в списке всех активных фреймов (см. Поиск всех фреймов).
-
- Функция: previous-window &optional window minibuf all-frames
Эта функция возвращает активное окно, предшествующее window в циклическом порядке окон. Обработка остальных аргументов аналогична
next-window.
- Команда: other-window count &optional all-frames
-
Эта функция выбирает активное окно, расположенное на count позиций от выбранного окна в циклическом порядке окон. Если count — положительное число, функция пропускает count окон вперёд; если count отрицательно, она пропускает −count окон назад; если count равно нулю, просто повторно выбирается выбранное окно. При интерактивном вызове count — это числовой префиксный аргумент.
Необязательный аргумент all-frames имеет то же значение, что и в
next-window, как и аргумент minibuf со значениемnilдляnext-window. При интерактивном вызове all-frames всегда равенnil, поэтому можно выбрать только окна выбранного фрейма.Если параметр
other-windowвыбранного окна является функцией, аignore-window-parametersравенnil, эта функция будет вызвана с аргументами count и all-frames вместо обычного выполнения этой функции.В противном случае эта функция не выбирает окно, для которого функция
window-no-other-p(см. ниже) возвращаетnil.
- Функция: window-no-other-p &optional window
-
Эта функция возвращает значение, не равное
nil, если окно window не следует использовать как «другое» окно для таких команд, какother-window, или таких функций, какget-lru-window(см. ниже). Она также вызывается при удалении выбранного окна (см. Удаление окон), когда необходимо выбрать новое окно.Точнее, эта функция возвращает значение, не равное
nil, если параметрno-other-windowокна window не равенnil, аignore-window-parametersравенnil. Во всех остальных случаях она возвращаетnil.Обратите внимание: если эта функция возвращает
nil, это не обязательно означает, что окно window можно выбрать. Например, по умолчанию параметруno-other-windowокна всплывающей подсказки (см. Основные понятия об окнах Emacs) присвоено значениеt, но такое окно выбрать нельзя.
- Функция: walk-windows fun &optional minibuf all-frames
-
Эта функция вызывает функцию fun один раз для каждого активного окна, передавая окно в качестве аргумента.
Она следует циклическому порядку окон. Необязательные аргументы minibuf и all-frames задают набор включаемых окон; они принимают те же значения, что и соответствующие аргументы в
next-window. Если all-frames указывает фрейм, первым обходится первое окно этого фрейма (возвращаемое функциейframe-first-window), а не обязательно выбранное окно.Если функция fun изменяет конфигурацию окон, разделяя или удаляя окна, это не влияет на набор обходящихся окон, который определяется до первого вызова fun.
- Функция: one-window-p &optional no-mini all-frames
-
Эта функция возвращает
t, если выбранное окно — единственное активное окно, иnilв противном случае.Если окно минибуфера активно, обычно оно учитывается (так что эта функция возвращает
nil). Однако если необязательный аргумент no-mini не равенnil, окно минибуфера игнорируется, даже если оно активно. Необязательный аргумент all-frames имеет то же значение, что и дляnext-window.
Следующие функции возвращают окно, соответствующее некоторому критерию, не выбирая его:
- Функция: get-lru-window &optional all-frames dedicated not-selected no-other
-
Эта функция возвращает активное окно, которое, согласно эвристической оценке, использовалось давнее всего. Наименее недавно использовавшееся окно — это окно, выбранное давнее всего: время его использования меньше, чем время использования любого другого активного окна (см. Выбор окон). Необязательный аргумент all-frames имеет то же значение, что и в
next-window.Если имеются окна на всю ширину, учитываются только они. Окно минибуфера никогда не рассматривается как кандидат. Окно с фиксированным назначением (см. Окна с фиксированным назначением) никогда не рассматривается как кандидат, если только необязательный аргумент dedicated не равен
nil. Выбранное окно никогда не возвращается, если только оно не является единственным кандидатом. Однако если необязательный аргумент not-selected не равенnil, в этом случае функция возвращаетnil. Необязательный аргумент no-other, если он не равенnil, означает, что никогда не возвращается окно, для которогоwindow-no-other-p(см. Циклический порядок окон) возвращает значение, не равноеnil.
- Функция: get-mru-window &optional all-frames dedicated not-selected no-other
-
Эта функция похожа на
get-lru-window, но вместо этого возвращает окно, использовавшееся наиболее недавно. Наиболее недавно использовавшееся окно — это окно, выбранное последним: время его использования больше, чем время использования любого другого активного окна (см. Выбор окон). Аргументы имеют те же значения, что и вget-lru-window.Поскольку на практике наиболее недавно использовавшееся окно всегда является выбранным, обычно имеет смысл вызывать эту функцию, указав только аргумент not-selected, не равный
nil.
- Функция: get-largest-window &optional all-frames dedicated not-selected no-other
Эта функция возвращает окно с наибольшей площадью (высота, умноженная на ширину). Если есть два окна-кандидата одинакового размера, предпочтение отдаётся тому, которое первым встречается в циклическом порядке окон, начиная с выбранного окна. Аргументы имеют те же значения, что и в
get-lru-window.
- Функция: get-window-with-predicate predicate &optional minibuf all-frames default
-
Эта функция по очереди вызывает функцию predicate для каждого окна в циклическом порядке окон, передавая ей окно в качестве аргумента. Если предикат возвращает значение, не равное
nil, для какого-либо окна, функция останавливается и возвращает это окно. Если такое окно не найдено, возвращается значение default (по умолчаниюnil).Необязательные аргументы minibuf и all-frames задают окна для поиска и имеют те же значения, что и в
next-window.
Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Cyclic-Window-Ordering.html