]> git.eshelyaron.com Git - emacs.git/commitdiff
Update the docs of object internals
authorEli Zaretskii <eliz@gnu.org>
Tue, 20 Nov 2018 18:45:07 +0000 (20:45 +0200)
committerEli Zaretskii <eliz@gnu.org>
Tue, 20 Nov 2018 18:45:07 +0000 (20:45 +0200)
* doc/lispref/internals.texi (Buffer Internals)
(Window Internals, Process Internals): Update the descriptions
of Lisp objects.

doc/lispref/internals.texi

index b68c94d5c7807b012ff24af1149d89ce9582950e..6c9bba126e39ecfe71eeb750830eb8a6ce076532 100644 (file)
@@ -1746,7 +1746,7 @@ and form the set of subtypes of @code{Lisp_Misc}.
 
   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,
@@ -1773,7 +1773,8 @@ Here are some of the fields in @code{struct buffer_text}:
 
 @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
@@ -1797,8 +1798,8 @@ buffer-modification event, and is never otherwise changed;
 @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
@@ -1906,13 +1907,22 @@ position.
 
 @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
@@ -2036,37 +2046,29 @@ if that window no longer displays this buffer.
 
 @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
@@ -2082,29 +2084,35 @@ The width and height of the window, measured in columns and lines
 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
@@ -2130,30 +2138,30 @@ The buffer's value of point, as of the last time a redisplay completed
 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}.
@@ -2163,16 +2171,17 @@ The window-relative vertical position of the line containing
 @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.
@@ -2200,8 +2209,16 @@ the last redisplay.
 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.
@@ -2213,20 +2230,30 @@ Non-@code{nil} if this window is dedicated to its buffer.
 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
@@ -2243,7 +2270,7 @@ Glyph matrices describing the current and desired display of this window.
 
 @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
@@ -2251,10 +2278,10 @@ process.  For a network or serial process, it is @code{nil} if the
 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.
@@ -2281,7 +2308,8 @@ does not ask for confirmation about killing 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
@@ -2290,8 +2318,8 @@ needs to be reported, either by running the sentinel or by inserting a
 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.