E.9.2 Внутреннее устройство окон

Поля окна (полный список см. в определении struct window в файле window.h) включают:

frame

Фрейм, к которому принадлежит это окно, в виде объекта Lisp.

mini

Ненулевое значение, если это окно является окном минибуфера, окном, показывающим минибуфер или область эхо.

pseudo_window_p

Ненулевое значение, если это окно является псевдоокном. Псевдоокно — это либо окно, используемое для отображения строки меню или панели инструментов (когда Emacs использует наборы инструментов, которые не отображают собственные строку меню и панель инструментов), либо окно вкладок, либо окно, показывающее всплывающую подсказку на фрейме подсказки. Псевдоокна, как правило, недоступны из кода Lisp.

parent

Внутренне Emacs организует окна в дерево; каждая группа родственных окон имеет родительское окно, область которого включает все дочерние окна. Это поле указывает на родителя окна в этом дереве в виде объекта Lisp. Для корневого окна дерева и окна минибуфера это всегда nil.

Родительские окна не отображают буферы и играют небольшую роль в отображении, кроме как для формирования своих дочерних окон. Программы на Emacs Lisp не могут напрямую управлять родительскими окнами; они работают с окнами, находящимися в листьях дерева, которые фактически отображают буферы.

contents

Для листового окна и окон, показывающих всплывающую подсказку, это буфер в виде объекта Lisp, который отображает окно. Для внутреннего («родительского») окна — это его первый дочерний элемент. Для псевдоокна, показывающего меню или панель инструментов, это nil. Также nil для окна, которое было удалено.

next
prev

Следующий и предыдущий родственные элементы этого окна в виде объектов Lisp. next равен nil, если окно является крайним справа или снизу в своей группе; prev равен nil, если оно крайнее слева или сверху в своей группе. Определяется ли родственность как лево/право или верх/низ полем horizontal родителя родственного окна: если оно ненулевое, родственные окна расположены горизонтально.

В качестве особого случая next корневого окна фрейма указывает на окно минибуфера этого фрейма, если только это не фрейм только с минибуфером или без минибуфера. На таких фреймах prev окна минибуфера указывает на корневое окно этого фрейма. В любом другом случае поля next корневого окна и prev окна минибуфера (если оно есть) равны nil.

left_col

Левая граница окна, измеряемая в колонках, относительно крайней левой колонки (колонка 0) собственного фрейма окна.

top_line

Верхняя граница окна, измеряемая в строках, относительно самой верхней строки (строка 0) собственного фрейма окна.

pixel_left
pixel_top

Левая и верхняя границы этого окна, измеряемые в пикселях, относительно верхнего левого угла (0, 0) собственного фрейма окна.

total_cols
total_lines

Общая ширина и высота окна, измеряемые соответственно в колонках и строках. Значения включают полосы прокрутки, поля, разделители и/или линию-разделитель справа от окна (если есть).

pixel_width;
pixel_height;

Общая ширина и высота окна, измеряемые в пикселях.

start

Маркер, указывающий на позицию в буфере, которая является первым символом (в логическом порядке, см. Двунаправленное отображение), отображаемым в окне.

pointm

Это значение точки в текущем буфере, когда это окно выбрано; когда оно не выбрано, оно сохраняет своё предыдущее значение.

old_pointm

Значение pointm во время последнего перерисовывания.

force_start

Если этот флаг не равен nil, это означает, что окно было явно прокручено программой на Lisp, и значение start окна было установлено для выполнения при перерисовывании. Это влияет на то, что делает следующее перерисовывание, если точка находится за пределами экрана: вместо прокрутки окна для показа текста вокруг точки, оно перемещает точку в место, которое находится на экране.

optional_new_start

Аналогично force_start, но следующее перерисовывание подчинится этому, только если точка останется видимой.

start_at_line_beg

Не nil означает, что текущее значение start было началом строки на момент его выбора.

use_time

Это время последнего выбора окна. Функция get-lru-window использует это поле.

sequence_number

Уникальный номер, присвоенный этому окну при его создании.

last_modified

Поле modiff буфера окна по состоянию на момент последнего завершённого перерисовывания в этом окне.

last_overlay_modified

Поле overlay_modiff буфера окна по состоянию на момент последнего завершённого перерисовывания в этом окне.

last_point

Значение точки в буфере по состоянию на момент последнего завершённого перерисовывания в этом окне.

last_had_star

Ненулевое значение означает, что буфер окна был изменён при последнем обновлении окна.

vertical_scroll_bar_type
horizontal_scroll_bar_type

Типы вертикальной и горизонтальной полос прокрутки этого окна.

scroll_bar_width
scroll_bar_height

Ширина вертикальной полосы прокрутки и высота горизонтальной полосы прокрутки этого окна в пикселях.

left_margin_cols
right_margin_cols

Ширина левого и правого полей в этом окне. Нулевое значение означает отсутствие поля.

left_fringe_width
right_fringe_width

Ширина левой и правой каймы в этом окне в пикселях. Значение –1 означает использование значений фрейма.

fringes_outside_margins

Ненулевое значение означает, что кайма находится за пределами полей отображения; в противном случае она находится между полем и текстом.

window_end_pos

Вычисляется как z минус позиция в буфере последнего глифа в текущей матрице окна. Значение действительно только если window_end_valid не равен нулю.

window_end_bytepos

Байтовая позиция, соответствующая window_end_pos.

window_end_vpos

Относительная вертикальная позиция строки, содержащей window_end_pos, внутри окна.

window_end_valid

Это поле устанавливается в ненулевое значение, если window_end_pos и window_end_vpos действительно достоверны. Оно равно нулю, если нетривиальное перерисовывание было прервано, поскольку в этом случае отображение, для которого вычислялось window_end_pos, не попало на экран.

cursor

Структура, описывающая, где в этом окне находится курсор.

last_cursor_vpos

Относительная вертикальная позиция строки, показывающей курсор, по состоянию на последнее завершённое перерисовывание.

phys_cursor

Структура, описывающая физическое положение курсора в этом окне.

phys_cursor_type
phys_cursor_height
phys_cursor_width

Тип, высота и ширина курсора, который последним отображался в этом окне.

phys_cursor_on_p

Это поле не равно нулю, если курсор физически включён.

cursor_off_p

Ненулевое значение означает, что курсор в этом окне логически выключен. Используется для мигания курсора.

last_cursor_off_p

Это поле содержит значение cursor_off_p по состоянию на момент последнего перерисовывания.

must_be_updated_p

Устанавливается в 1 во время перерисовывания, когда это окно должно быть обновлено.

hscroll

Это количество колонок, на которое отображение в окне прокручивается горизонтально влево. Обычно равно 0. Когда прокручивается только текущая строка, это описывает, насколько прокручена текущая строка.

min_hscroll

Минимальное значение hscroll, установленное пользователем через set-window-hscroll (см. Горизонтальная прокрутка). Когда прокручивается только текущая строка, это описывает горизонтальную прокрутку строк, отличных от текущей.

vscroll

Величина вертикальной прокрутки в пикселях. Обычно равна 0.

dedicated

Не nil, если это окно выделено для своего буфера.

combination_limit

Ограничение комбинирования этого окна, имеет смысл только для родительского окна. Если равно t, то запрещено удалять это окно и перекомбинировать его дочерние окна с другими родственными окнами этого окна.

window_parameters

Ассоциативный список параметров этого окна.

display_table

Таблица отображения окна или nil, если для него не задана отдельная.

update_mode_line

Ненулевое значение означает, что строку режима этого окна необходимо обновить.

mode_line_height
header_line_height

Высота строки режима и заголовка в пикселях или –1, если неизвестна.

base_line_number

Номер строки для определённой позиции в буфере или ноль. Используется для отображения номера строки точки в строке режима.

base_line_pos

Позиция в буфере, для которой известен номер строки, или ноль, если ничего не известно. Если равно –1, не отображать номер строки, пока окно показывает этот буфер.

column_number_displayed

Номер колонки, отображаемый в данный момент в строке режима этого окна, или –1, если номера колонок не отображаются.

current_matrix
desired_matrix

Глифовые матрицы, описывающие текущее и желаемое отображение этого окна.