窗口的字段(完整列表参见 window.h 中 struct window 的定义)包括:
frame此窗口所在的框架,以 Lisp 对象形式表示。
mini若此窗口为微型缓冲区窗口、显示微型缓冲区或回显区的窗口,则值非零。
pseudo_window_p ¶若此窗口为 伪窗口(pseudo window),则值非零。伪窗口是指用于显示菜单栏或工具栏的窗口(当 Emacs 使用不自带菜单栏与工具栏的工具包时)、标签栏窗口,或是在提示框框架上显示提示信息的窗口。伪窗口通常无法从 Lisp 代码中访问。
parent在内部,Emacs 以树形结构组织窗口;每一组同级窗口都有一个父窗口,其区域包含所有同级窗口。此字段以 Lisp 对象形式指向该树中此窗口的父节点。对于树的根窗口与微型缓冲区窗口,该值始终为 nil。
父窗口不显示缓冲区,除了调整子窗口形状外,在显示中作用很小。Emacs Lisp 程序无法直接操作父窗口;它们只对树的叶节点窗口进行操作,这些窗口才实际显示缓冲区。
contents对于叶窗口与显示提示信息的窗口,此为该窗口所显示的缓冲区(Lisp 对象)。对于内部(“父(parent)”)窗口,此为其第一个子窗口。对于显示菜单或工具栏的伪窗口,此值为 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一个标记,指向缓冲区中窗口显示的第一个字符所在位置(逻辑顺序,see 双向显示)。
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_typehorizontal_scroll_bar_type此窗口垂直与水平滚动条的类型。
scroll_bar_widthscroll_bar_height此窗口垂直滚动条宽度与水平滚动条高度,以像素计量。
left_margin_colsright_margin_cols此窗口左右边距的宽度。值为 0 表示无边距。
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 确实有效,则此字段设为非零值。若复杂重绘被抢占,则该值为 0,因为此时为计算 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_hscrollhscroll 的最小值,由用户通过 set-window-hscroll 设置 (see 水平滚动)。当仅当前行水平滚动时,该值描述除当前行外其他行的水平滚动量。
vscroll垂直滚动量,以像素计量。通常为 0。
dedicated若此窗口专用于其所属缓冲区,则非 nil。
combination_limit此窗口的合并限制,仅对父窗口有意义。若为 t,则不允许删除此窗口并将其子窗口与此窗口的其他同级窗口重新合并。
window_parameters此窗口参数的关联列表。
display_table此窗口的显示表;若未指定,则为 nil。
update_mode_line非零表示此窗口的模式行需要更新。
mode_line_heightheader_line_height模式行与标题行的像素高度;若未知则为 −1。
base_line_number缓冲区中某一位置的行号,或 0。用于在模式行中显示点的行号。
base_line_pos缓冲区中已知行号的位置;0 表示未知。若为 −1,则只要窗口显示该缓冲区就不显示行号。
column_number_displayed此窗口模式行中当前显示的列号;若不显示列号则为 −1。
current_matrixdesired_matrix描述此窗口当前与目标显示状态的字形矩阵。