Внутреннее устройство окна
Поля окна (полный список см. в определении struct window в window.h) включают:
frame-
Рамка, на которой расположено это окно, как объект Lisp.
mini-
Не равно нулю, если это окно — окно минибуфера, окно, отображающее минибуфер или область эха.
pseudo_window_p-
Не равно нулю, если это окно — псевдоокно. Псевдоокно — это либо окно, используемое для отображения панели меню или панели инструментов (когда Emacs использует инструменты, которые не отображают собственную панель меню и панель инструментов), либо панель вкладок, либо окно, отображающее всплывающую подсказку на рамке всплывающих подсказок. Псевдоокна, как правило, недоступны из кода Lisp.
parent-
Внутри Emacs окна организованы в дерево; каждая группа потомков имеет родительское окно, область которого включает всех потомков. Это поле указывает на родительское окно в этом дереве, как объект Lisp. Для корневого окна дерева и окна минибуфера это всегда
nil.Родительские окна не отображают буферы и играют незначительную роль в отображении, кроме того, чтобы сформировать свои дочерние окна. Программы Emacs Lisp не могут напрямую манипулировать родительскими окнами; они работают с окнами на листьях дерева, которые фактически отображают буферы.
contents-
Для листового окна и окон, отображающих всплывающую подсказку, это буфер, как объект Lisp, который отображает окно. Для внутреннего («родительского») окна это его первое дочернее окно. Для псевдоокна, отображающего меню или панель инструментов, это
nil. Это такжеnilдля окна, которое было удалено. nextprev-
Следующее и предыдущее окно-потомок этого окна как объекты Lisp.
nextравноnil, если окно является самым правым или самым нижним в своей группе;prevравноnil, если оно является самым левым или самым верхним в своей группе. Будет ли потомок слева/справа или сверху/снизу определяется полемhorizontalродителя потомка: если оно не равно нулю, потомки расположены горизонтально.В качестве особого случая,
nextкорневого окна рамки указывает на окно минибуфера рамки, при условии, что это не рамка только для минибуфера или без минибуфера. В таких рамкахprevокна минибуфера указывает на корневое окно этой рамки. В любом другом случае поляnextкорневого окна и (если присутствует)prevокна минибуфера равныnil. left_col-
Левый край окна, измеренный в столбцах, относительно левого столбца (столбец 0) родной рамки окна.
top_line-
Верхний край окна, измеренный в строках, относительно самой верхней строки (строка 0) родной рамки окна.
pixel_leftpixel_top-
Левый и верхний края этого окна, измеренные в пикселях, относительно верхнего левого угла (0, 0) родной рамки окна.
total_colstotal_lines-
Общий размер окна, измеренный в столбцах и строках соответственно. Значения включают полосы прокрутки и рамки, разделители и/или разделительную линию справа от окна (если таковая имеется).
pixel_width;pixel_height;-
Общий размер окна, измеренный в пикселях.
start-
Маркер, указывающий на позицию в буфере, которая является первой символом (в логическом порядке, см. Бинариальное отображение) отображаемой в окне.
pointm-
Это значение точки в текущем буфере, когда это окно выбрано; когда оно не выбрано, оно сохраняет предыдущее значение.
old_pointm-
Значение
pointmв момент последнего перерисовки. force_start-
Если этот флаг не равен
nil, это означает, что окно было явно прокручено программой Lisp, и значениеstartокна было установлено для перерисовки. Это влияет на то, что делает следующая перерисовка, если точка находится вне экрана: вместо прокрутки окна для показа текста вокруг точки, она перемещает точку в положение, которое находится на экране. optional_new_start-
Это аналогично
force_start, но следующая перерисовка будет соблюдать ее только в том случае, если точка останется видимой. start_at_line_beg-
Не равно нулю означает, что текущее значение
startбыло началом строки при выборе. use_time-
Это последний момент, когда окно было выбрано. Функция
get-lru-windowиспользует это поле. sequence_number-
Уникальный номер, присвоенный этому окну при его создании.
last_modified-
Поле
modiffбуфера окна по состоянию на последний завершенный перерисовку в этом окне. last_overlay_modified-
Поле
overlay_modiffбуфера окна по состоянию на последний завершенный перерисовку в этом окне. last_point-
Значение точки буфера, по состоянию на последний завершенный перерисовку в этом окне.
last_had_star-
Значение не равно нулю означает, что буфер окна был изменен при последнем обновлении окна.
vertical_scroll_bar_typehorizontal_scroll_bar_type-
Типы вертикальной и горизонтальной полосы прокрутки этого окна.
scroll_bar_widthscroll_bar_height-
Ширина вертикальной полосы прокрутки этого окна и высота горизонтальной полосы прокрутки этого окна в пикселях.
left_margin_colsright_margin_cols-
Ширина левого и правого отступов в этом окне. Значение ноль означает отсутствие отступа.
left_fringe_widthright_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_typephys_cursor_heightphys_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-
Не равно нулю, если это окно предназначено для своего буфера.
combination_limit-
Предел комбинации этого окна, имеющий смысл только для родительского окна. Если это
t, то не разрешается удалять это окно и повторно объединять его дочерние окна с другими потомками этого окна. window_parameters-
Список параметров этого окна.
display_table-
Таблица отображения окна или
nil, если для него не указана. update_mode_line-
Не равно нулю означает, что строка состояния этого окна должна быть обновлена.
mode_line_heightheader_line_height-
Высота строки состояния и заголовка в пикселях, или -1, если неизвестна.
base_line_number-
Номер строки определённой позиции в буфере или ноль. Это используется для отображения номера строки точки в строке состояния.
base_line_pos-
Позиция в буфере, для которой известен номер строки, или ноль, что означает, что он неизвестен. Если это -1, не отображать номер строки, пока окно показывает этот буфер.
column_number_displayed-
Номер столбца, в данный момент отображаемый в строке состояния этого окна, или -1, если номера столбцов не отображаются.
current_matrixdesired_matrixМатрицы глифов, описывающие текущее и желаемое отображение этого окна.
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/Window-Internals.html