Below there is a description of a few subtypes of @code{Lisp_Vectorlike}.
Buffer object represents the text to display and edit. Window is the part
-of display structure which shows the buffer or used as a container to
+of display structure which shows the buffer or is used as a container to
recursively place other windows on the same frame. (Do not confuse Emacs Lisp
window object with the window as an entity managed by the user interface
system like X; in Emacs terminology, the latter is called frame.) Finally,
@table @code
@item beg
-The address of the buffer contents.
+The address of the buffer contents. The buffer contents is a linear C
+array of @code{char}, with the gap somewhere in its midst.
@item gpt
@itemx gpt_byte
@code{save_modiff} contains the value of @code{modiff} the last time
the buffer was visited or saved; @code{chars_modiff} counts only
modifications to the characters in the buffer, ignoring all other
-kinds of changes; and @code{overlay_modiff} counts only modifications
-to the overlays.
+kinds of changes (such as text properties); and @code{overlay_modiff}
+counts only modifications to the buffer's overlays.
@item beg_unchanged
@itemx end_unchanged
@item name
A Lisp string that names the buffer. It is guaranteed to be unique.
-@xref{Buffer Names}.
+@xref{Buffer Names}. This and the following fields have their names
+in the C struct definition end in a @code{_} to indicate that they
+should not be accessed directly, but via the @code{BVAR} macro, like
+this:
+
+@example
+ Lisp_Object buf_name = BVAR (buffer, name);
+@end example
@item save_length
The length of the file this buffer is visiting, when last read or
-saved. This and other fields concerned with saving are not kept in
-the @code{buffer_text} structure because indirect buffers are never
-saved.
+saved. It can have 2 special values: @minus{}1 means auto-saving was
+turned off in this buffer, and @minus{}2 means don't turn off
+auto-saving if buffer text shrinks a lot. This and other fields
+concerned with saving are not kept in the @code{buffer_text} structure
+because indirect buffers are never saved.
@item directory
The directory for expanding relative file names. This is the value of
@table @code
@item frame
-The frame that this window is on.
+The frame that this window is on, as a Lisp object.
-@item mini_p
-Non-@code{nil} if this window is a minibuffer window.
+@item mini
+Non-zero if this window is a minibuffer window.
@item parent
Internally, Emacs arranges windows in a tree; each group of siblings has
a parent window whose area includes all the siblings. This field points
-to a window's parent.
+to a window's parent, as a Lisp object.
Parent windows do not display buffers, and play little role in display
except to shape their child windows. Emacs Lisp programs usually have
no access to the parent windows; they operate on the windows at the
leaves of the tree, which actually display buffers.
-@c FIXME: These two slots and the 'buffer' slot below were replaced
-@c with a single slot 'contents' on 2013-03-28. --xfq
-@item hchild
-@itemx vchild
-These fields contain the window's leftmost child and its topmost child
-respectively. @code{hchild} is used if the window is subdivided
-horizontally by child windows, and @code{vchild} if it is subdivided
-vertically. In a live window, only one of @code{hchild}, @code{vchild},
-and @code{buffer} (q.v.@:) is non-@code{nil}.
-
@item next
@itemx prev
The next sibling and previous sibling of this window. @code{next} is
@code{nil} if the window is the right-most or bottom-most in its group;
@code{prev} is @code{nil} if it is the left-most or top-most in its
-group.
+group. Whether the sibling is left/right or up/down is determined by
+the @code{horizontal} field: if it's non-zero, the siblings are
+arranged horizontally.
@item left_col
The left-hand edge of the window, measured in columns, relative to the
respectively. The width includes the scroll bar and fringes, and/or
the separator line on the right of the window (if any).
-@item buffer
-The buffer that the window is displaying.
+@item contents
+For leaf windows, this is the buffer, as a Lisp object, that the
+window is displaying. For an internal (``parent'') window, this is
+its child window. It can also be @code{nil}, for a pseudo-window.
@item start
A marker pointing to the position in the buffer that is the first
-character displayed in the window.
+character (in the logical order, @pxref{Bidirectional Display})
+displayed in the window.
@item pointm
@cindex window point internals
This is the value of point in the current buffer when this window is
selected; when it is not selected, it retains its previous value.
+@item old_pointm
+The value of @code{pointm} at the last redisplay time.
+
@item force_start
If this flag is non-@code{nil}, it says that the window has been
-scrolled explicitly by the Lisp program. This affects what the next
-redisplay does if point is off the screen: instead of scrolling the
-window to show the text around point, it moves point to a location that
-is on the screen.
+scrolled explicitly by the Lisp program, and the value of the the
+window's @code{start} was set for redisplay to honor. This affects
+what the next redisplay does if point is off the screen: instead of
+scrolling the window to show the text around point, it moves point to
+a location that is on the screen.
-@item frozen_window_start_p
-This field is set temporarily to 1 to indicate to redisplay that
-@code{start} of this window should not be changed, even if point
-gets invisible.
+@item optional_new_start
+This is similar to @code{force_start}, but the next redisplay will
+only obey it if point stays visible.
@item start_at_line_beg
Non-@code{nil} means current value of @code{start} was the beginning of a line
in this window.
@item last_had_star
-A non-@code{nil} value means the window's buffer was modified when the
+A non-zero value means the window's buffer was modified when the
window was last updated.
@item vertical_scroll_bar
-This window's vertical scroll bar.
+This window's vertical scroll bar, a Lisp object.
@item left_margin_cols
@itemx right_margin_cols
The widths of the left and right margins in this window. A value of
-@code{nil} means no margin.
+zero means no margin.
@item left_fringe_width
@itemx right_fringe_width
-The widths of the left and right fringes in this window. A value of
-@code{nil} or @code{t} means use the values of the frame.
+The pixel widths of the left and right fringes in this window. A
+value of @minus{}1 means use the values of the frame.
@item fringes_outside_margins
-A non-@code{nil} value means the fringes outside the display margins;
+A non-zero value means the fringes outside the display margins;
othersize they are between the margin and the text.
@item window_end_pos
This is computed as @code{z} minus the buffer position of the last glyph
in the current matrix of the window. The value is only valid if
-@code{window_end_valid} is not @code{nil}.
+@code{window_end_valid} is non-zero.
@item window_end_bytepos
The byte position corresponding to @code{window_end_pos}.
@code{window_end_pos}.
@item window_end_valid
-This field is set to a non-@code{nil} value if @code{window_end_pos} is truly
-valid. This is @code{nil} if nontrivial redisplay is pre-empted, since in that
-case the display that @code{window_end_pos} was computed for did not get
-onto the screen.
+This field is set to a non-zero value if @code{window_end_pos} and
+@code{window_end_vpos} are truly valid. This is zero if nontrivial
+redisplay is pre-empted, since in that case the display that
+@code{window_end_pos} was computed for did not get onto the screen.
@item cursor
A structure describing where the cursor is in this window.
-@item last_cursor
-The value of @code{cursor} as of the last redisplay that finished.
+@item last_cursor_vpos
+The window-relative vertical position of the line showing the cursor
+as of the last redisplay that finished.
@item phys_cursor
A structure describing where the cursor of this window physically is.
This is set to 1 during redisplay when this window must be updated.
@item hscroll
-This is the number of columns that the display in the window is scrolled
-horizontally to the left. Normally, this is 0.
+This is the number of columns that the display in the window is
+scrolled horizontally to the left. Normally, this is 0. When only
+the current line is hscrolled, this describes how much the current
+line is scrolled.
+
+@item min_hscroll
+Minimum value of @code{hscroll}, set by the user via
+@code{set-window-hscroll} (@pxref{Horizontal Scrolling}). When only
+the current line is hscrolled, this describes the horizontal scrolling
+of lines other than the current one.
@item vscroll
Vertical scroll amount, in pixels. Normally, this is 0.
The window's display table, or @code{nil} if none is specified for it.
@item update_mode_line
-Non-@code{nil} means this window's mode line needs to be updated.
+Non-zero means this window's mode line needs to be updated.
+
+@item mode_line_height
+@itemx header_line_height
+The height in pixels of the mode line and the header line, or
+@minus{}1 if not known.
@item base_line_number
-The line number of a certain position in the buffer, or @code{nil}.
+The line number of a certain position in the buffer, or zero.
This is used for displaying the line number of point in the mode line.
@item base_line_pos
The position in the buffer for which the line number is known, or
-@code{nil} meaning none is known. If it is a buffer, don't display
+zero meaning none is known. If it is @minus{}1, don't display
the line number as long as the window shows that buffer.
@item column_number_displayed
-The column number currently displayed in this window's mode line, or @code{nil}
-if column numbers are not being displayed.
+The column number currently displayed in this window's mode line, or
+@minus{}1 if column numbers are not being displayed.
+
+@item pseudo_window_p
+This is non-zero for windows that display the menu bar and the tool
+bar (when Emacs uses toolkits that don't display their own menu bar
+and tool bar).
@item current_matrix
@itemx desired_matrix
@table @code
@item name
-A string, the name of the process.
+A Lisp string, the name of the process.
@item command
A list containing the command arguments that were used to start this
process is running or @code{t} if the process is stopped.
@item filter
-A function used to accept output from the process.
+A Lisp function used to accept output from the process.
@item sentinel
-A function called whenever the state of the process changes.
+A Lisp function called whenever the state of the process changes.
@item buffer
The associated buffer of the process.
The raw process status, as returned by the @code{wait} system call.
@item status
-The process status, as @code{process-status} should return it.
+The process status, as @code{process-status} should return it. This
+is a Lisp symbol, a cons cell, or a list.
@item tick
@itemx update_tick
message in the process buffer.
@item pty_flag
-Non-@code{nil} if communication with the subprocess uses a pty;
-@code{nil} if it uses a pipe.
+Non-zero if communication with the subprocess uses a pty; zero if it
+uses a pipe.
@item infd
The file descriptor for input from the process.