Copyright (C) 2000-2012 |
GNU Info (elisp)Buffer InternalsBuffer Internals ---------------- Buffers contain fields not directly accessible by the Lisp programmer. We describe them here, naming them by the names used in the C code. Many are accessible indirectly in Lisp programs via Lisp primitives. Two structures are used to represent buffers in C. The `buffer_text' structure contains fields describing the text of a buffer; the `buffer' structure holds other fields. In the case of indirect buffers, two or more `buffer' structures reference the same `buffer_text' structure. Here is a list of the `struct buffer_text' fields: `beg' This field contains the actual address of the buffer contents. `gpt' This holds the character position of the gap in the buffer. `z' This field contains the character position of the end of the buffer text. `gpt_byte' Contains the byte position of the gap. `z_byte' Holds the byte position of the end of the buffer text. `gap_size' Contains the size of buffer's gap. `modiff' This field counts buffer-modification events for this buffer. It is incremented for each such event, and never otherwise changed. `save_modiff' Contains the previous value of `modiff', as of the last time a buffer was visited or saved in a file. `overlay_modiff' Counts modifications to overlays analogous to `modiff'. `beg_unchanged' Holds the number of characters at the start of the text that are known to be unchanged since the last redisplay that finished. `end_unchanged' Holds the number of characters at the end of the text that are known to be unchanged since the last redisplay that finished. `unchanged_modified' Contains the value of `modiff' at the time of the last redisplay that finished. If this value matches `modiff', `beg_unchanged' and `end_unchanged' contain no useful information. `overlay_unchanged_modified' Contains the value of `overlay_modiff' at the time of the last redisplay that finished. If this value matches `overlay_modiff', `beg_unchanged' and `end_unchanged' contain no useful information. `markers' The markers that refer to this buffer. This is actually a single marker, and successive elements in its marker `chain' are the other markers referring to this buffer text. `intervals' Contains the interval tree which records the text properties of this buffer. The fields of `struct buffer' are: `next' Points to the next buffer, in the chain of all buffers including killed buffers. This chain is used only for garbage collection, in order to collect killed buffers properly. Note that vectors, and most kinds of objects allocated as vectors, are all on one chain, but buffers are on a separate chain of their own. `own_text' This is a `struct buffer_text' structure. In an ordinary buffer, it holds the buffer contents. In indirect buffers, this field is not used. `text' This points to the `buffer_text' structure that is used for this buffer. In an ordinary buffer, this is the `own_text' field above. In an indirect buffer, this is the `own_text' field of the base buffer. `pt' Contains the character position of point in a buffer. `pt_byte' Contains the byte position of point in a buffer. `begv' This field contains the character position of the beginning of the accessible range of text in the buffer. `begv_byte' This field contains the byte position of the beginning of the accessible range of text in the buffer. `zv' This field contains the character position of the end of the accessible range of text in the buffer. `zv_byte' This field contains the byte position of the end of the accessible range of text in the buffer. `base_buffer' In an indirect buffer, this points to the base buffer. In an ordinary buffer, it is null. `local_var_flags' This field contains flags indicating that certain variables are local in this buffer. Such variables are declared in the C code using `DEFVAR_PER_BUFFER', and their buffer-local bindings are stored in fields in the buffer structure itself. (Some of these fields are described in this table.) `modtime' This field contains the modification time of the visited file. It is set when the file is written or read. Before writing the buffer into a file, this field is compared to the modification time of the file to see if the file has changed on disk. Note: Buffer Modification. `auto_save_modified' This field contains the time when the buffer was last auto-saved. `auto_save_failure_time' The time at which we detected a failure to auto-save, or -1 if we didn't have a failure. `last_window_start' This field contains the `window-start' position in the buffer as of the last time the buffer was displayed in a window. `clip_changed' This flag is set when narrowing changes in a buffer. `prevent_redisplay_optimizations_p' this flag indicates that redisplay optimizations should not be used to display this buffer. `undo_list' This field points to the buffer's undo list. Note: Undo. `name' The buffer name is a string that names the buffer. It is guaranteed to be unique. Note: Buffer Names. `filename' The name of the file visited in this buffer, or `nil'. `directory' The directory for expanding relative file names. `save_length' 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 `buffer_text' structure because indirect buffers are never saved. `auto_save_file_name' File name used for auto-saving this buffer. This is not in the `buffer_text' because it's not used in indirect buffers at all. `read_only' Non-`nil' means this buffer is read-only. `mark' This field contains the mark for the buffer. The mark is a marker, hence it is also included on the list `markers'. Note: The Mark. `local_var_alist' This field contains the association list describing the buffer-local variable bindings of this buffer, not including the built-in buffer-local bindings that have special slots in the buffer object. (Those slots are omitted from this table.) Note: Buffer-Local Variables. `major_mode' Symbol naming the major mode of this buffer, e.g., `lisp-mode'. `mode_name' Pretty name of major mode, e.g., `"Lisp"'. `mode_line_format' Mode line element that controls the format of the mode line. If this is `nil', no mode line will be displayed. `header_line_format' This field is analoguous to `mode_line_format' for the mode line displayed at the top of windows. `keymap' This field holds the buffer's local keymap. Note: Keymaps. `abbrev_table' This buffer's local abbrevs. `syntax_table' This field contains the syntax table for the buffer. Note: Syntax Tables. `category_table' This field contains the category table for the buffer. `case_fold_search' The value of `case-fold-search' in this buffer. `tab_width' The value of `tab-width' in this buffer. `fill_column' The value of `fill-column' in this buffer. `left_margin' The value of `left-margin' in this buffer. `auto_fill_function' The value of `auto-fill-function' in this buffer. `downcase_table' This field contains the conversion table for converting text to lower case. Note: Case Tables. `upcase_table' This field contains the conversion table for converting text to upper case. Note: Case Tables. `case_canon_table' This field contains the conversion table for canonicalizing text for case-folding search. Note: Case Tables. `case_eqv_table' This field contains the equivalence table for case-folding search. Note: Case Tables. `truncate_lines' The value of `truncate-lines' in this buffer. `ctl_arrow' The value of `ctl-arrow' in this buffer. `selective_display' The value of `selective-display' in this buffer. `selective_display_ellipsis' The value of `selective-display-ellipsis' in this buffer. `minor_modes' An alist of the minor modes of this buffer. `overwrite_mode' The value of `overwrite_mode' in this buffer. `abbrev_mode' The value of `abbrev-mode' in this buffer. `display_table' This field contains the buffer's display table, or `nil' if it doesn't have one. Note: Display Tables. `save_modified' This field contains the time when the buffer was last saved, as an integer. Note: Buffer Modification. `mark_active' This field is non-`nil' if the buffer's mark is active. `overlays_before' This field holds a list of the overlays in this buffer that end at or before the current overlay center position. They are sorted in order of decreasing end position. `overlays_after' This field holds a list of the overlays in this buffer that end after the current overlay center position. They are sorted in order of increasing beginning position. `overlay_center' This field holds the current overlay center position. Note: Overlays. `enable_multibyte_characters' This field holds the buffer's local value of `enable-multibyte-characters'--either `t' or `nil'. `buffer_file_coding_system' The value of `buffer-file-coding-system' in this buffer. `file_format' The value of `buffer-file-format' in this buffer. `pt_marker' In an indirect buffer, or a buffer that is the base of an indirect buffer, this holds a marker that records point for this buffer when the buffer is not current. `begv_marker' In an indirect buffer, or a buffer that is the base of an indirect buffer, this holds a marker that records `begv' for this buffer when the buffer is not current. `zv_marker' In an indirect buffer, or a buffer that is the base of an indirect buffer, this holds a marker that records `zv' for this buffer when the buffer is not current. `file_truename' The truename of the visited file, or `nil'. `invisibility_spec' The value of `buffer-invisibility-spec' in this buffer. `last_selected_window' This is the last window that was selected with this buffer in it, or `nil' if that window no longer displays this buffer. `display_count' This field is incremented each time the buffer is displayed in a window. `left_margin_width' The value of `left-margin-width' in this buffer. `right_margin_width' The value of `right-margin-width' in this buffer. `indicate_empty_lines' Non-`nil' means indicate empty lines (lines with no text) with a small bitmap in the fringe, when using a window system that can do it. `display_time' This holds a time stamp that is updated each time this buffer is displayed in a window. `scroll_up_aggressively' The value of `scroll-up-aggressively' in this buffer. `scroll_down_aggressively' The value of `scroll-down-aggressively' in this buffer. |