Commit 0d59ae3f authored by Eli Zaretskii's avatar Eli Zaretskii
Browse files

Update the docs of object internals

* doc/lispref/internals.texi (Buffer Internals)
(Window Internals, Process Internals): Update the descriptions
of Lisp objects.
parent d667318a
Pipeline #102 passed with stage
in 25 minutes and 13 seconds
......@@ -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.
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment