Spec-Zone.ru › Elisp

Окна и кадры

Каждое окно принадлежит ровно одному кадру (см. Кадры). Для всех окон, принадлежащих определённому кадру, мы иногда также говорим, что эти окна принадлежат этому кадру или просто находятся в этом кадре.

Функция: 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

Spec-Zone.ru

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