Spec-Zone.ru › Elisp

Циклический порядок окон

При использовании команды 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API