/* Buffer manipulation primitives for GNU Emacs.
- Copyright (C) 1985, 1986, 1987, 1988, 1989, 1993, 1994,
- 1995, 1997, 1998, 1999, 2000, 2001, 2002,
- 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
- Free Software Foundation, Inc.
+
+Copyright (C) 1985-1989, 1993-1995, 1997-2011 Free Software Foundation, Inc.
This file is part of GNU Emacs.
#include <errno.h>
#include <stdio.h>
#include <setjmp.h>
-
-#ifdef HAVE_UNISTD_H
#include <unistd.h>
-#endif
#include "lisp.h"
#include "intervals.h"
int last_per_buffer_idx;
-EXFUN (Fset_buffer, 1);
static void call_overlay_mod_hooks (Lisp_Object list, Lisp_Object overlay,
int after, Lisp_Object arg1,
Lisp_Object arg2, Lisp_Object arg3);
to prevent lossage due to user rplac'ing this alist or its elements. */
Lisp_Object Vbuffer_alist;
-/* Functions to call before and after each text change. */
-Lisp_Object Vbefore_change_functions;
-Lisp_Object Vafter_change_functions;
-
-Lisp_Object Vtransient_mark_mode;
-
-/* t means ignore all read-only text properties.
- A list means ignore such a property if its value is a member of the list.
- Any non-nil value means ignore buffer-read-only. */
-Lisp_Object Vinhibit_read_only;
-
-/* List of functions to call that can query about killing a buffer.
- If any of these functions returns nil, we don't kill it. */
-Lisp_Object Vkill_buffer_query_functions;
Lisp_Object Qkill_buffer_query_functions;
/* Hook run before changing a major mode. */
-Lisp_Object Vchange_major_mode_hook, Qchange_major_mode_hook;
-
-/* List of functions to call before changing an unmodified buffer. */
-Lisp_Object Vfirst_change_hook;
+Lisp_Object Qchange_major_mode_hook;
Lisp_Object Qfirst_change_hook;
Lisp_Object Qbefore_change_functions;
Lisp_Object Qafter_change_functions;
Lisp_Object Qucs_set_table_for_input;
-/* If nonzero, all modification hooks are suppressed. */
-int inhibit_modification_hooks;
-
Lisp_Object Qfundamental_mode, Qmode_class, Qpermanent_local;
Lisp_Object Qpermanent_local_hook;
CHECK_BUFFER (buffer);
if (STRINGP (XBUFFER (buffer)->name)
- && strcmp (SDATA (XBUFFER (buffer)->name), "*scratch*") == 0)
+ && strcmp (SSDATA (XBUFFER (buffer)->name), "*scratch*") == 0)
function = find_symbol_value (intern ("initial-major-mode"));
else
{
}
\f
-Lisp_Object Fdelete_overlay (Lisp_Object overlay);
-
static struct Lisp_Overlay *
unchain_overlay (struct Lisp_Overlay *list, struct Lisp_Overlay *overlay)
{
because of the ange-ftp completion handler.
However, it is not necessary to turn / into /:/.
So avoid doing that. */
- && strcmp ("/", SDATA (current_buffer->directory)))
+ && strcmp ("/", SSDATA (current_buffer->directory)))
current_buffer->directory
= concat2 (build_string ("/:"), current_buffer->directory);
/* All these use DEFVAR_LISP_NOPRO because the slots in
buffer_defaults will all be marked via Vbuffer_defaults. */
- DEFVAR_LISP_NOPRO ("default-mode-line-format",
- &buffer_defaults.mode_line_format,
- doc: /* Default value of `mode-line-format' for buffers that don't override it.
+ DEFVAR_BUFFER_DEFAULTS ("default-mode-line-format",
+ mode_line_format,
+ doc: /* Default value of `mode-line-format' for buffers that don't override it.
This is the same as (default-value 'mode-line-format). */);
- DEFVAR_LISP_NOPRO ("default-header-line-format",
- &buffer_defaults.header_line_format,
- doc: /* Default value of `header-line-format' for buffers that don't override it.
+ DEFVAR_BUFFER_DEFAULTS ("default-header-line-format",
+ header_line_format,
+ doc: /* Default value of `header-line-format' for buffers that don't override it.
This is the same as (default-value 'header-line-format). */);
- DEFVAR_LISP_NOPRO ("default-cursor-type", &buffer_defaults.cursor_type,
- doc: /* Default value of `cursor-type' for buffers that don't override it.
+ DEFVAR_BUFFER_DEFAULTS ("default-cursor-type", cursor_type,
+ doc: /* Default value of `cursor-type' for buffers that don't override it.
This is the same as (default-value 'cursor-type). */);
- DEFVAR_LISP_NOPRO ("default-line-spacing",
- &buffer_defaults.extra_line_spacing,
- doc: /* Default value of `line-spacing' for buffers that don't override it.
+ DEFVAR_BUFFER_DEFAULTS ("default-line-spacing",
+ extra_line_spacing,
+ doc: /* Default value of `line-spacing' for buffers that don't override it.
This is the same as (default-value 'line-spacing). */);
- DEFVAR_LISP_NOPRO ("default-cursor-in-non-selected-windows",
- &buffer_defaults.cursor_in_non_selected_windows,
- doc: /* Default value of `cursor-in-non-selected-windows'.
+ DEFVAR_BUFFER_DEFAULTS ("default-cursor-in-non-selected-windows",
+ cursor_in_non_selected_windows,
+ doc: /* Default value of `cursor-in-non-selected-windows'.
This is the same as (default-value 'cursor-in-non-selected-windows). */);
- DEFVAR_LISP_NOPRO ("default-abbrev-mode",
- &buffer_defaults.abbrev_mode,
- doc: /* Default value of `abbrev-mode' for buffers that do not override it.
+ DEFVAR_BUFFER_DEFAULTS ("default-abbrev-mode",
+ abbrev_mode,
+ doc: /* Default value of `abbrev-mode' for buffers that do not override it.
This is the same as (default-value 'abbrev-mode). */);
- DEFVAR_LISP_NOPRO ("default-ctl-arrow",
- &buffer_defaults.ctl_arrow,
- doc: /* Default value of `ctl-arrow' for buffers that do not override it.
+ DEFVAR_BUFFER_DEFAULTS ("default-ctl-arrow",
+ ctl_arrow,
+ doc: /* Default value of `ctl-arrow' for buffers that do not override it.
This is the same as (default-value 'ctl-arrow). */);
- DEFVAR_LISP_NOPRO ("default-enable-multibyte-characters",
- &buffer_defaults.enable_multibyte_characters,
- doc: /* *Default value of `enable-multibyte-characters' for buffers not overriding it.
+ DEFVAR_BUFFER_DEFAULTS ("default-enable-multibyte-characters",
+ enable_multibyte_characters,
+ doc: /* *Default value of `enable-multibyte-characters' for buffers not overriding it.
This is the same as (default-value 'enable-multibyte-characters). */);
- DEFVAR_LISP_NOPRO ("default-buffer-file-coding-system",
- &buffer_defaults.buffer_file_coding_system,
- doc: /* Default value of `buffer-file-coding-system' for buffers not overriding it.
+ DEFVAR_BUFFER_DEFAULTS ("default-buffer-file-coding-system",
+ buffer_file_coding_system,
+ doc: /* Default value of `buffer-file-coding-system' for buffers not overriding it.
This is the same as (default-value 'buffer-file-coding-system). */);
- DEFVAR_LISP_NOPRO ("default-truncate-lines",
- &buffer_defaults.truncate_lines,
- doc: /* Default value of `truncate-lines' for buffers that do not override it.
+ DEFVAR_BUFFER_DEFAULTS ("default-truncate-lines",
+ truncate_lines,
+ doc: /* Default value of `truncate-lines' for buffers that do not override it.
This is the same as (default-value 'truncate-lines). */);
- DEFVAR_LISP_NOPRO ("default-fill-column",
- &buffer_defaults.fill_column,
- doc: /* Default value of `fill-column' for buffers that do not override it.
+ DEFVAR_BUFFER_DEFAULTS ("default-fill-column",
+ fill_column,
+ doc: /* Default value of `fill-column' for buffers that do not override it.
This is the same as (default-value 'fill-column). */);
- DEFVAR_LISP_NOPRO ("default-left-margin",
- &buffer_defaults.left_margin,
- doc: /* Default value of `left-margin' for buffers that do not override it.
+ DEFVAR_BUFFER_DEFAULTS ("default-left-margin",
+ left_margin,
+ doc: /* Default value of `left-margin' for buffers that do not override it.
This is the same as (default-value 'left-margin). */);
- DEFVAR_LISP_NOPRO ("default-tab-width",
- &buffer_defaults.tab_width,
- doc: /* Default value of `tab-width' for buffers that do not override it.
+ DEFVAR_BUFFER_DEFAULTS ("default-tab-width",
+ tab_width,
+ doc: /* Default value of `tab-width' for buffers that do not override it.
This is the same as (default-value 'tab-width). */);
- DEFVAR_LISP_NOPRO ("default-case-fold-search",
- &buffer_defaults.case_fold_search,
- doc: /* Default value of `case-fold-search' for buffers that don't override it.
+ DEFVAR_BUFFER_DEFAULTS ("default-case-fold-search",
+ case_fold_search,
+ doc: /* Default value of `case-fold-search' for buffers that don't override it.
This is the same as (default-value 'case-fold-search). */);
#ifdef DOS_NT
- DEFVAR_LISP_NOPRO ("default-buffer-file-type",
- &buffer_defaults.buffer_file_type,
- doc: /* Default file type for buffers that do not override it.
+ DEFVAR_BUFFER_DEFAULTS ("default-buffer-file-type",
+ buffer_file_type,
+ doc: /* Default file type for buffers that do not override it.
This is the same as (default-value 'buffer-file-type).
The file type is nil for text, t for binary. */);
#endif
- DEFVAR_LISP_NOPRO ("default-left-margin-width",
- &buffer_defaults.left_margin_cols,
- doc: /* Default value of `left-margin-width' for buffers that don't override it.
+ DEFVAR_BUFFER_DEFAULTS ("default-left-margin-width",
+ left_margin_cols,
+ doc: /* Default value of `left-margin-width' for buffers that don't override it.
This is the same as (default-value 'left-margin-width). */);
- DEFVAR_LISP_NOPRO ("default-right-margin-width",
- &buffer_defaults.right_margin_cols,
- doc: /* Default value of `right-margin-width' for buffers that don't override it.
+ DEFVAR_BUFFER_DEFAULTS ("default-right-margin-width",
+ right_margin_cols,
+ doc: /* Default value of `right-margin-width' for buffers that don't override it.
This is the same as (default-value 'right-margin-width). */);
- DEFVAR_LISP_NOPRO ("default-left-fringe-width",
- &buffer_defaults.left_fringe_width,
- doc: /* Default value of `left-fringe-width' for buffers that don't override it.
+ DEFVAR_BUFFER_DEFAULTS ("default-left-fringe-width",
+ left_fringe_width,
+ doc: /* Default value of `left-fringe-width' for buffers that don't override it.
This is the same as (default-value 'left-fringe-width). */);
- DEFVAR_LISP_NOPRO ("default-right-fringe-width",
- &buffer_defaults.right_fringe_width,
- doc: /* Default value of `right-fringe-width' for buffers that don't override it.
+ DEFVAR_BUFFER_DEFAULTS ("default-right-fringe-width",
+ right_fringe_width,
+ doc: /* Default value of `right-fringe-width' for buffers that don't override it.
This is the same as (default-value 'right-fringe-width). */);
- DEFVAR_LISP_NOPRO ("default-fringes-outside-margins",
- &buffer_defaults.fringes_outside_margins,
- doc: /* Default value of `fringes-outside-margins' for buffers that don't override it.
+ DEFVAR_BUFFER_DEFAULTS ("default-fringes-outside-margins",
+ fringes_outside_margins,
+ doc: /* Default value of `fringes-outside-margins' for buffers that don't override it.
This is the same as (default-value 'fringes-outside-margins). */);
- DEFVAR_LISP_NOPRO ("default-scroll-bar-width",
- &buffer_defaults.scroll_bar_width,
- doc: /* Default value of `scroll-bar-width' for buffers that don't override it.
+ DEFVAR_BUFFER_DEFAULTS ("default-scroll-bar-width",
+ scroll_bar_width,
+ doc: /* Default value of `scroll-bar-width' for buffers that don't override it.
This is the same as (default-value 'scroll-bar-width). */);
- DEFVAR_LISP_NOPRO ("default-vertical-scroll-bar",
- &buffer_defaults.vertical_scroll_bar_type,
- doc: /* Default value of `vertical-scroll-bar' for buffers that don't override it.
+ DEFVAR_BUFFER_DEFAULTS ("default-vertical-scroll-bar",
+ vertical_scroll_bar_type,
+ doc: /* Default value of `vertical-scroll-bar' for buffers that don't override it.
This is the same as (default-value 'vertical-scroll-bar). */);
- DEFVAR_LISP_NOPRO ("default-indicate-empty-lines",
- &buffer_defaults.indicate_empty_lines,
- doc: /* Default value of `indicate-empty-lines' for buffers that don't override it.
+ DEFVAR_BUFFER_DEFAULTS ("default-indicate-empty-lines",
+ indicate_empty_lines,
+ doc: /* Default value of `indicate-empty-lines' for buffers that don't override it.
This is the same as (default-value 'indicate-empty-lines). */);
- DEFVAR_LISP_NOPRO ("default-indicate-buffer-boundaries",
- &buffer_defaults.indicate_buffer_boundaries,
- doc: /* Default value of `indicate-buffer-boundaries' for buffers that don't override it.
+ DEFVAR_BUFFER_DEFAULTS ("default-indicate-buffer-boundaries",
+ indicate_buffer_boundaries,
+ doc: /* Default value of `indicate-buffer-boundaries' for buffers that don't override it.
This is the same as (default-value 'indicate-buffer-boundaries). */);
- DEFVAR_LISP_NOPRO ("default-fringe-indicator-alist",
- &buffer_defaults.fringe_indicator_alist,
- doc: /* Default value of `fringe-indicator-alist' for buffers that don't override it.
+ DEFVAR_BUFFER_DEFAULTS ("default-fringe-indicator-alist",
+ fringe_indicator_alist,
+ doc: /* Default value of `fringe-indicator-alist' for buffers that don't override it.
This is the same as (default-value 'fringe-indicator-alist'). */);
- DEFVAR_LISP_NOPRO ("default-fringe-cursor-alist",
- &buffer_defaults.fringe_cursor_alist,
- doc: /* Default value of `fringe-cursor-alist' for buffers that don't override it.
+ DEFVAR_BUFFER_DEFAULTS ("default-fringe-cursor-alist",
+ fringe_cursor_alist,
+ doc: /* Default value of `fringe-cursor-alist' for buffers that don't override it.
This is the same as (default-value 'fringe-cursor-alist'). */);
- DEFVAR_LISP_NOPRO ("default-scroll-up-aggressively",
- &buffer_defaults.scroll_up_aggressively,
- doc: /* Default value of `scroll-up-aggressively'.
+ DEFVAR_BUFFER_DEFAULTS ("default-scroll-up-aggressively",
+ scroll_up_aggressively,
+ doc: /* Default value of `scroll-up-aggressively'.
This value applies in buffers that don't have their own local values.
This is the same as (default-value 'scroll-up-aggressively). */);
- DEFVAR_LISP_NOPRO ("default-scroll-down-aggressively",
- &buffer_defaults.scroll_down_aggressively,
- doc: /* Default value of `scroll-down-aggressively'.
+ DEFVAR_BUFFER_DEFAULTS ("default-scroll-down-aggressively",
+ scroll_down_aggressively,
+ doc: /* Default value of `scroll-down-aggressively'.
This value applies in buffers that don't have their own local values.
This is the same as (default-value 'scroll-down-aggressively). */);
%% -- print %. %- -- print infinitely many dashes.
Decimal digits after the % specify field width to which to pad. */);
- DEFVAR_LISP_NOPRO ("default-major-mode", &buffer_defaults.major_mode,
- doc: /* *Value of `major-mode' for new buffers. */);
+ DEFVAR_BUFFER_DEFAULTS ("default-major-mode", major_mode,
+ doc: /* *Value of `major-mode' for new buffers. */);
DEFVAR_PER_BUFFER ("major-mode", ¤t_buffer->major_mode,
make_number (Lisp_Symbol),
doc: /* Local (mode-specific) abbrev table of current buffer. */);
DEFVAR_PER_BUFFER ("abbrev-mode", ¤t_buffer->abbrev_mode, Qnil,
- doc: /* Non-nil turns on automatic expansion of abbrevs as they are inserted. */);
+ doc: /* Non-nil if Abbrev mode is enabled.
+Use the command `abbrev-mode' to change this variable. */);
DEFVAR_PER_BUFFER ("case-fold-search", ¤t_buffer->case_fold_search,
Qnil,
"Don't ask.");
*/
- DEFVAR_LISP ("before-change-functions", &Vbefore_change_functions,
+ DEFVAR_LISP ("before-change-functions", Vbefore_change_functions,
doc: /* List of functions to call before each text change.
Two arguments are passed to each function: the positions of
the beginning and end of the range of old text to be changed.
from happening repeatedly and making Emacs nonfunctional. */);
Vbefore_change_functions = Qnil;
- DEFVAR_LISP ("after-change-functions", &Vafter_change_functions,
+ DEFVAR_LISP ("after-change-functions", Vafter_change_functions,
doc: /* List of functions to call after each text change.
Three arguments are passed to each function: the positions of
the beginning and end of the range of changed text,
from happening repeatedly and making Emacs nonfunctional. */);
Vafter_change_functions = Qnil;
- DEFVAR_LISP ("first-change-hook", &Vfirst_change_hook,
+ DEFVAR_LISP ("first-change-hook", Vfirst_change_hook,
doc: /* A list of functions to call before changing a buffer which is unmodified.
The functions are run using the `run-hooks' function. */);
Vfirst_change_hook = Qnil;
to the value obtained by calling `current-time'.
If the buffer has never been shown in a window, the value is nil. */);
- DEFVAR_LISP ("transient-mark-mode", &Vtransient_mark_mode,
- doc: /* */);
+ DEFVAR_LISP ("transient-mark-mode", Vtransient_mark_mode,
+ doc: /* Non-nil if Transient Mark mode is enabled.
+See the command `transient-mark-mode' for a description of this minor mode.
+
+Non-nil also enables highlighting of the region whenever the mark is active.
+The variable `highlight-nonselected-windows' controls whether to highlight
+all windows or just the selected window.
+
+Lisp programs may give this variable certain special values:
+
+- A value of `lambda' enables Transient Mark mode temporarily.
+ It is disabled again after any subsequent action that would
+ normally deactivate the mark (e.g. buffer modification).
+
+- A value of (only . OLDVAL) enables Transient Mark mode
+ temporarily. After any subsequent point motion command that is
+ not shift-translated, or any other action that would normally
+ deactivate the mark (e.g. buffer modification), the value of
+ `transient-mark-mode' is set to OLDVAL. */);
Vtransient_mark_mode = Qnil;
- /* The docstring is in simple.el. If we put it here, it would be
- overwritten when transient-mark-mode is defined using
- define-minor-mode. */
- DEFVAR_LISP ("inhibit-read-only", &Vinhibit_read_only,
+ DEFVAR_LISP ("inhibit-read-only", Vinhibit_read_only,
doc: /* *Non-nil means disregard read-only status of buffers or characters.
If the value is t, disregard `buffer-read-only' and all `read-only'
text properties. If the value is a list, disregard `buffer-read-only'
DEFVAR_PER_BUFFER ("cursor-in-non-selected-windows",
¤t_buffer->cursor_in_non_selected_windows, Qnil,
- doc: /* *Cursor type to display in non-selected windows.
-The value t means to use hollow box cursor. See `cursor-type' for other values. */);
-
- DEFVAR_LISP ("kill-buffer-query-functions", &Vkill_buffer_query_functions,
+ doc: /* *Non-nil means show a cursor in non-selected windows.
+If nil, only shows a cursor in the selected window.
+If t, displays a cursor related to the usual cursor type
+\(a solid box becomes hollow, a bar becomes a narrower bar).
+You can also specify the cursor type as in the `cursor-type' variable.
+Use Custom to set this variable and update the display." */);
+
+ DEFVAR_LISP ("kill-buffer-query-functions", Vkill_buffer_query_functions,
doc: /* List of functions called with no args to query before killing a buffer.
The buffer being killed will be current while the functions are running.
If any of them returns nil, the buffer is not killed. */);
Vkill_buffer_query_functions = Qnil;
- DEFVAR_LISP ("change-major-mode-hook", &Vchange_major_mode_hook,
+ DEFVAR_LISP ("change-major-mode-hook", Vchange_major_mode_hook,
doc: /* Normal hook run before changing the major mode of a buffer.
The function `kill-all-local-variables' runs this before doing anything else. */);
Vchange_major_mode_hook = Qnil;
initialized when that function gets called. */
Fput (intern_c_string ("erase-buffer"), Qdisabled, Qt);
}
-
-/* arch-tag: e48569bf-69a9-4b65-a23b-8e68769436e1
- (do not change this comment) */