Циклический порядок окон
При использовании команды 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, как и уnilаргумента minibuf кnext-window.Эта функция не выбирает окно, у которого параметр non-
nilno-other-window(см. Параметры окон), при условии, чтоignore-window-parametersявляетсяnil.Если параметр
other-windowвыбранного окна является функцией, иignore-window-parametersестьnil, эта функция будет вызвана с аргументами count и all-frames вместо обычной работы этой функции.
- Функция: 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, означает, что никогда не возвращается окно, у которого параметрno-other-windowявляется не-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-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Cyclic-Window-Ordering.html