Окна и кадры
Каждое окно принадлежит ровно одному кадру (см. Кадры). Для всех окон, принадлежащих определённому кадру, мы иногда также говорим, что эти окна принадлежат этому кадру или просто находятся в этом кадре.
- Функция: window-frame &optional window
Эта функция возвращает кадр указанного window — кадр, которому принадлежит window. Если window не указан или равен
nil, по умолчанию используется выбранное окно (см. Выбор окон).
- Функция: window-list &optional frame minibuffer window
-
Эта функция возвращает список всех активных окон, принадлежащих указанному frame. Если frame не указан или равен
nil, по умолчанию используется выбранный кадр (см. Фокус ввода).Необязательный аргумент minibuffer указывает, следует ли включить в список окно минибуфера (см. Окна минибуфера). Если minibuffer равен
t, окно минибуфера включается. Еслиnilили аргумент не указан, окно минибуфера включается, только если оно активно. Если minibuffer не равен ниnil, ниt, окно минибуфера никогда не включается.Необязательный аргумент window, если он не равен
nil, должен быть активным окном указанного кадра; тогда window будет первым элементом возвращаемого списка. Если window не указан или равенnil, первым элементом будет окно, выбранное в frame (см. Выбор окон).
Окна одного кадра организованы в дерево окон, листьями которого являются активные окна. Внутренние узлы дерева окон не являются активными; они существуют для организации связей между активными окнами. Корневой узел дерева окон называется корневым окном. Это либо активное окно, либо внутреннее окно. Если это активное окно, то в кадре есть только одно окно помимо окна минибуфера либо кадр предназначен только для минибуфера; см. Компоновка кадра.
Окно минибуфера (см. Окна минибуфера), которое не является единственным в своём кадре, не имеет родительского окна и, строго говоря, не входит в дерево окон кадра. Тем не менее оно является соседним окном корневого окна кадра, а значит, до него можно добраться от корневого окна с помощью window-next-sibling; см. ниже. Кроме того, функция window-tree, описанная в конце этого раздела, перечисляет окно минибуфера вместе с собственно деревом окон.
- Функция: frame-root-window &optional frame-or-window
Эта функция возвращает корневое окно для frame-or-window. Аргумент frame-or-window должен быть окном или кадром; если он не указан или равен
nil, по умолчанию используется выбранный кадр. Если frame-or-window — окно, возвращаемым значением будет корневое окно кадра этого окна.
Когда активное окно разделяется (см. Разделение окон), вместо одного окна появляются два активных окна. Одно из них представлено тем же объектом окна Lisp, что и исходное окно, а другое — новым объектом окна Lisp. Оба активных окна становятся листьями дерева окон и дочерними окнами одного внутреннего окна. При необходимости Emacs автоматически создаёт это внутреннее окно, которое также называется родительским окном, и помещает его в соответствующую позицию дерева окон. Окна с одним и тем же родителем называются соседними.
- Функция: window-parent &optional window
Эта функция возвращает родительское окно для window. Если window не указан или равен
nil, по умолчанию используется выбранное окно. Возвращаемое значение равноnil, если у window нет родителя (то есть если это окно минибуфера или корневое окно своего кадра).
У родительского окна всегда есть не менее двух дочерних окон. Если в результате удаления окна (см. Удаление окон) их число уменьшится до одного, Emacs автоматически удалит и родительское окно, а его единственное оставшееся дочернее окно займёт его место в дереве окон.
Дочернее окно может быть активным или внутренним (у которого, в свою очередь, могут быть собственные дочерние окна). Поэтому каждое внутреннее окно можно считать занимающим определённую прямоугольную область экрана — объединение областей, занимаемых активными окнами, которые в конечном счёте являются его потомками.
Для каждого внутреннего окна области экрана его непосредственных дочерних окон располагаются либо вертикально, либо горизонтально (но не одновременно). Если дочерние окна расположены одно над другим, говорят, что они образуют вертикальную комбинацию; если они расположены рядом, говорят, что они образуют горизонтальную комбинацию. Рассмотрим следующий пример:
______________________________________
| ______ ____________________________ |
|| || __________________________ ||
|| ||| |||
|| ||| |||
|| ||| |||
|| |||____________W4____________|||
|| || __________________________ ||
|| ||| |||
|| ||| |||
|| |||____________W5____________|||
||__W2__||_____________W3_____________ |
|__________________W1__________________|
Корневое окно этого кадра — внутреннее окно W1. Его дочерние окна образуют горизонтальную комбинацию, состоящую из активного окна W2 и внутреннего окна W3. Дочерние окна W3 образуют вертикальную комбинацию, состоящую из активных окон W4 и W5. Таким образом, активными окнами в этом дереве окон являются W2, W4 и W5.
Следующие функции позволяют получить дочернее окно внутреннего окна и соседние окна дочернего окна. Их аргумент window по умолчанию всегда равен выбранному окну (см. Выбор окон).
- Функция: window-top-child &optional window
Эта функция возвращает самое верхнее дочернее окно window, если window — внутреннее окно, дочерние окна которого образуют вертикальную комбинацию. Для окон любого другого типа возвращаемое значение равно
nil.
- Функция: window-left-child &optional window
Эта функция возвращает самое левое дочернее окно window, если window — внутреннее окно, дочерние окна которого образуют горизонтальную комбинацию. Для окон любого другого типа возвращаемое значение равно
nil.
- Функция: window-child window
Эта функция возвращает первое дочернее окно внутреннего окна window — самое верхнее дочернее окно для вертикальной комбинации или самое левое дочернее окно для горизонтальной комбинации. Если window — активное окно, возвращаемое значение равно
nil.
- Функция: window-combined-p &optional window horizontal
-
Эта функция возвращает значение, не равное
nil, тогда и только тогда, когда window является частью вертикальной комбинации.Если необязательный аргумент horizontal не равен
nil, функция возвращает значение, не равноеnil, тогда и только тогда, когда window является частью горизонтальной комбинации.
- Функция: window-next-sibling &optional window
Эта функция возвращает следующее соседнее окно для указанного window. Возвращаемое значение равно
nil, если window — последнее дочернее окно своего родителя.
- Функция: window-prev-sibling &optional window
Эта функция возвращает предыдущее соседнее окно для указанного window. Возвращаемое значение равно
nil, если window — первое дочернее окно своего родителя.
Функции window-next-sibling и window-prev-sibling не следует путать с функциями next-window и previous-window, которые возвращают следующее и предыдущее окно в циклическом порядке окон (см. Циклический порядок окон).
Следующие функции могут пригодиться для определения положения окна в кадре.
- Функция: frame-first-window &optional frame-or-window
Эта функция возвращает активное окно в верхнем левом углу кадра, заданного аргументом frame-or-window. Аргумент frame-or-window должен обозначать окно или активный кадр; по умолчанию используется выбранный кадр. Если frame-or-window задаёт окно, эта функция возвращает первое окно в кадре этого окна. Если выбран кадр из нашего канонического примера,
(frame-first-window)возвращает W2.
- Функция: window-at-side-p &optional window side
-
Эта функция возвращает
t, если window находится у side содержащего его кадра. Аргумент window должен быть допустимым окном; по умолчанию используется выбранное окно. Аргумент side может принимать любое из значенийleft,top,rightилиbottom. Значение по умолчаниюnilобрабатывается так же, какbottom.Обратите внимание, что эта функция не учитывает окно минибуфера (см. Окна минибуфера). Поэтому при значении side, равном
bottom, она может вернутьt, даже если окно минибуфера находится непосредственно под window.
- Функция: window-in-direction direction &optional window ignore sign wrap minibuf
-
Эта функция возвращает ближайшее активное окно в направлении direction, если смотреть от положения точки window (см. Окна и точка). Аргумент direction должен быть одним из значений
above,below,leftилиright. Необязательный аргумент window должен обозначать активное окно; по умолчанию используется выбранное окно.Эта функция не возвращает окно, для которого
window-no-other-p(см. Циклический порядок окон) возвращает значение, не равноеnil. Если параметрno-other-windowближайшего окна не равенnil, функция пытается найти другое окно в указанном направлении, параметрno-other-windowкоторого равенnil. Однако если необязательный аргумент ignore не равенnil, может быть возвращено окно, даже если его параметрno-other-windowне равенnil.Если необязательный аргумент sign — отрицательное число, это означает, что в качестве опорного положения следует использовать правый или нижний край window вместо
window-point. Если sign — положительное число, в качестве опорного положения используется левый или верхний край window.Если необязательный аргумент wrap не равен
nil, это означает, что направление direction следует зациклить на границах кадра. Например, если window находится вверху кадра, а direction равенabove, эта функция обычно возвращает окно минибуфера кадра, если оно активно, и окно внизу кадра в противном случае.Если необязательный аргумент minibuf равен
t, эта функция может вернуть окно минибуфера, даже если оно неактивно. Если необязательный аргумент minibuf равенnil, это означает, что окно минибуфера возвращается тогда и только тогда, когда оно активно в данный момент. Если minibuf не равен ниnil, ниt, эта функция никогда не возвращает окно минибуфера. Однако если wrap не равенnil, функция всегда ведёт себя так, как если бы minibuf был равенnil.Если подходящее окно не найдено, эта функция возвращает
nil.Не используйте эту функцию, чтобы проверить, что в направлении direction нет окна. Для этого гораздо эффективнее вызвать описанную выше функцию
window-at-side-p.
Следующая функция возвращает всё дерево окон кадра:
- Функция: window-tree &optional frame
-
Эта функция возвращает список, представляющий дерево окон кадра frame. Если frame не указан или равен
nil, по умолчанию используется выбранный кадр.Возвращаемое значение — список вида
(root mini), где root представляет дерево окон корневого окна кадра, а mini — окно минибуфера кадра.Если корневое окно активно, root — это само окно. В противном случае root — список
(dir edges w1 w2 ...), где dir равноnilдля горизонтальной комбинации иtдля вертикальной комбинации, edges задаёт размер и положение комбинации, а оставшиеся элементы — дочерние окна. Каждое дочернее окно, в свою очередь, может быть объектом окна (для активного окна) или списком в том же формате, что и выше (для внутреннего окна). Элемент edges — это список(left top right bottom), подобный значению, возвращаемому функциейwindow-edges(см. Координаты и окна).
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/Windows-and-Frames.html