/* 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);
-void set_buffer_internal (struct buffer *b);
-void set_buffer_internal_1 (struct buffer *b);
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;
Lisp_Object Qoverlayp;
-Lisp_Object Qpriority, Qwindow, Qevaporate, Qbefore_string, Qafter_string;
+Lisp_Object Qpriority, Qevaporate, Qbefore_string, Qafter_string;
Lisp_Object Qmodification_hooks;
Lisp_Object Qinsert_in_front_hooks;
static void modify_overlay (struct buffer *, EMACS_INT, EMACS_INT);
static Lisp_Object buffer_lisp_local_variables (struct buffer *);
-extern char * emacs_strerror (int);
-
/* For debugging; temporary. See set_buffer_internal. */
/* Lisp_Object Qlisp_mode, Vcheck_symbol; */
Value is nil if OBJECT is not a buffer or if it has been killed. */)
(Lisp_Object object)
{
- return ((BUFFERP (object) && ! NILP (XBUFFER (object)->name))
+ return ((BUFFERP (object) && ! NILP (B_ (XBUFFER (object), name)))
? Qt : Qnil);
}
{
buf = Fcdr (XCAR (tail));
if (!BUFFERP (buf)) continue;
- if (!STRINGP (XBUFFER (buf)->filename)) continue;
- tem = Fstring_equal (XBUFFER (buf)->filename, filename);
+ if (!STRINGP (B_ (XBUFFER (buf), filename))) continue;
+ tem = Fstring_equal (B_ (XBUFFER (buf), filename), filename);
if (!NILP (tem))
return buf;
}
{
buf = Fcdr (XCAR (tail));
if (!BUFFERP (buf)) continue;
- if (!STRINGP (XBUFFER (buf)->file_truename)) continue;
- tem = Fstring_equal (XBUFFER (buf)->file_truename, filename);
+ if (!STRINGP (B_ (XBUFFER (buf), file_truename))) continue;
+ tem = Fstring_equal (B_ (XBUFFER (buf), file_truename), filename);
if (!NILP (tem))
return buf;
}
b->newline_cache = 0;
b->width_run_cache = 0;
- b->width_table = Qnil;
+ B_ (b, width_table) = Qnil;
b->prevent_redisplay_optimizations_p = 1;
/* Put this on the chain of all buffers including killed ones. */
/* An ordinary buffer normally doesn't need markers
to handle BEGV and ZV. */
- b->pt_marker = Qnil;
- b->begv_marker = Qnil;
- b->zv_marker = Qnil;
+ B_ (b, pt_marker) = Qnil;
+ B_ (b, begv_marker) = Qnil;
+ B_ (b, zv_marker) = Qnil;
name = Fcopy_sequence (buffer_or_name);
STRING_SET_INTERVALS (name, NULL_INTERVAL);
- b->name = name;
+ B_ (b, name) = name;
- b->undo_list = (SREF (name, 0) != ' ') ? Qnil : Qt;
+ B_ (b, undo_list) = (SREF (name, 0) != ' ') ? Qnil : Qt;
reset_buffer (b);
reset_buffer_local_variables (b, 1);
- b->mark = Fmake_marker ();
+ B_ (b, mark) = Fmake_marker ();
BUF_MARKERS (b) = NULL;
- b->name = name;
+ B_ (b, name) = name;
/* Put this in the alist of all live buffers. */
XSETBUFFER (buffer, b);
/* Get (a copy of) the alist of Lisp-level local variables of FROM
and install that in TO. */
- to->local_var_alist = buffer_lisp_local_variables (from);
+ B_ (to, local_var_alist) = buffer_lisp_local_variables (from);
}
DEFUN ("make-indirect-buffer", Fmake_indirect_buffer, Smake_indirect_buffer,
base_buffer = Fget_buffer (base_buffer);
if (NILP (base_buffer))
error ("No such buffer: `%s'", SDATA (tem));
- if (NILP (XBUFFER (base_buffer)->name))
+ if (NILP (B_ (XBUFFER (base_buffer), name)))
error ("Base buffer has been killed");
if (SCHARS (name) == 0)
b->newline_cache = 0;
b->width_run_cache = 0;
- b->width_table = Qnil;
+ B_ (b, width_table) = Qnil;
/* Put this on the chain of all buffers including killed ones. */
b->next = all_buffers;
name = Fcopy_sequence (name);
STRING_SET_INTERVALS (name, NULL_INTERVAL);
- b->name = name;
+ B_ (b, name) = name;
reset_buffer (b);
reset_buffer_local_variables (b, 1);
XSETBUFFER (buf, b);
Vbuffer_alist = nconc2 (Vbuffer_alist, Fcons (Fcons (name, buf), Qnil));
- b->mark = Fmake_marker ();
- b->name = name;
+ B_ (b, mark) = Fmake_marker ();
+ B_ (b, name) = name;
/* The multibyte status belongs to the base buffer. */
- b->enable_multibyte_characters = b->base_buffer->enable_multibyte_characters;
+ B_ (b, enable_multibyte_characters) = B_ (b->base_buffer, enable_multibyte_characters);
/* Make sure the base buffer has markers for its narrowing. */
- if (NILP (b->base_buffer->pt_marker))
+ if (NILP (B_ (b->base_buffer, pt_marker)))
{
- b->base_buffer->pt_marker = Fmake_marker ();
- set_marker_both (b->base_buffer->pt_marker, base_buffer,
+ B_ (b->base_buffer, pt_marker) = Fmake_marker ();
+ set_marker_both (B_ (b->base_buffer, pt_marker), base_buffer,
BUF_PT (b->base_buffer),
BUF_PT_BYTE (b->base_buffer));
}
- if (NILP (b->base_buffer->begv_marker))
+ if (NILP (B_ (b->base_buffer, begv_marker)))
{
- b->base_buffer->begv_marker = Fmake_marker ();
- set_marker_both (b->base_buffer->begv_marker, base_buffer,
+ B_ (b->base_buffer, begv_marker) = Fmake_marker ();
+ set_marker_both (B_ (b->base_buffer, begv_marker), base_buffer,
BUF_BEGV (b->base_buffer),
BUF_BEGV_BYTE (b->base_buffer));
}
- if (NILP (b->base_buffer->zv_marker))
+ if (NILP (B_ (b->base_buffer, zv_marker)))
{
- b->base_buffer->zv_marker = Fmake_marker ();
- set_marker_both (b->base_buffer->zv_marker, base_buffer,
+ B_ (b->base_buffer, zv_marker) = Fmake_marker ();
+ set_marker_both (B_ (b->base_buffer, zv_marker), base_buffer,
BUF_ZV (b->base_buffer),
BUF_ZV_BYTE (b->base_buffer));
- XMARKER (b->base_buffer->zv_marker)->insertion_type = 1;
+ XMARKER (B_ (b->base_buffer, zv_marker))->insertion_type = 1;
}
if (NILP (clone))
{
/* Give the indirect buffer markers for its narrowing. */
- b->pt_marker = Fmake_marker ();
- set_marker_both (b->pt_marker, buf, BUF_PT (b), BUF_PT_BYTE (b));
- b->begv_marker = Fmake_marker ();
- set_marker_both (b->begv_marker, buf, BUF_BEGV (b), BUF_BEGV_BYTE (b));
- b->zv_marker = Fmake_marker ();
- set_marker_both (b->zv_marker, buf, BUF_ZV (b), BUF_ZV_BYTE (b));
- XMARKER (b->zv_marker)->insertion_type = 1;
+ B_ (b, pt_marker) = Fmake_marker ();
+ set_marker_both (B_ (b, pt_marker), buf, BUF_PT (b), BUF_PT_BYTE (b));
+ B_ (b, begv_marker) = Fmake_marker ();
+ set_marker_both (B_ (b, begv_marker), buf, BUF_BEGV (b), BUF_BEGV_BYTE (b));
+ B_ (b, zv_marker) = Fmake_marker ();
+ set_marker_both (B_ (b, zv_marker), buf, BUF_ZV (b), BUF_ZV_BYTE (b));
+ XMARKER (B_ (b, zv_marker))->insertion_type = 1;
}
else
{
struct buffer *old_b = current_buffer;
clone_per_buffer_values (b->base_buffer, b);
- b->filename = Qnil;
- b->file_truename = Qnil;
- b->display_count = make_number (0);
- b->backed_up = Qnil;
- b->auto_save_file_name = Qnil;
+ B_ (b, filename) = Qnil;
+ B_ (b, file_truename) = Qnil;
+ B_ (b, display_count) = make_number (0);
+ B_ (b, backed_up) = Qnil;
+ B_ (b, auto_save_file_name) = Qnil;
set_buffer_internal_1 (b);
Fset (intern ("buffer-save-without-query"), Qnil);
Fset (intern ("buffer-file-number"), Qnil);
void
reset_buffer (register struct buffer *b)
{
- b->filename = Qnil;
- b->file_truename = Qnil;
- b->directory = (current_buffer) ? current_buffer->directory : Qnil;
+ B_ (b, filename) = Qnil;
+ B_ (b, file_truename) = Qnil;
+ B_ (b, directory) = (current_buffer) ? B_ (current_buffer, directory) : Qnil;
b->modtime = 0;
b->modtime_size = -1;
- XSETFASTINT (b->save_length, 0);
+ XSETFASTINT (B_ (b, save_length), 0);
b->last_window_start = 1;
/* It is more conservative to start out "changed" than "unchanged". */
b->clip_changed = 0;
b->prevent_redisplay_optimizations_p = 1;
- b->backed_up = Qnil;
+ B_ (b, backed_up) = Qnil;
BUF_AUTOSAVE_MODIFF (b) = 0;
b->auto_save_failure_time = -1;
- b->auto_save_file_name = Qnil;
- b->read_only = Qnil;
+ B_ (b, auto_save_file_name) = Qnil;
+ B_ (b, read_only) = Qnil;
b->overlays_before = NULL;
b->overlays_after = NULL;
b->overlay_center = BEG;
- b->mark_active = Qnil;
- b->point_before_scroll = Qnil;
- b->file_format = Qnil;
- b->auto_save_file_format = Qt;
- b->last_selected_window = Qnil;
- XSETINT (b->display_count, 0);
- b->display_time = Qnil;
- b->enable_multibyte_characters = buffer_defaults.enable_multibyte_characters;
- b->cursor_type = buffer_defaults.cursor_type;
- b->extra_line_spacing = buffer_defaults.extra_line_spacing;
+ B_ (b, mark_active) = Qnil;
+ B_ (b, point_before_scroll) = Qnil;
+ B_ (b, file_format) = Qnil;
+ B_ (b, auto_save_file_format) = Qt;
+ B_ (b, last_selected_window) = Qnil;
+ XSETINT (B_ (b, display_count), 0);
+ B_ (b, display_time) = Qnil;
+ B_ (b, enable_multibyte_characters) = B_ (&buffer_defaults, enable_multibyte_characters);
+ B_ (b, cursor_type) = B_ (&buffer_defaults, cursor_type);
+ B_ (b, extra_line_spacing) = B_ (&buffer_defaults, extra_line_spacing);
b->display_error_modiff = 0;
}
things that depend on the major mode.
default-major-mode is handled at a higher level.
We ignore it here. */
- b->major_mode = Qfundamental_mode;
- b->keymap = Qnil;
- b->mode_name = QSFundamental;
- b->minor_modes = Qnil;
+ B_ (b, major_mode) = Qfundamental_mode;
+ B_ (b, keymap) = Qnil;
+ B_ (b, mode_name) = QSFundamental;
+ B_ (b, minor_modes) = Qnil;
/* If the standard case table has been altered and invalidated,
fix up its insides first. */
&& CHAR_TABLE_P (XCHAR_TABLE (Vascii_downcase_table)->extras[2])))
Fset_standard_case_table (Vascii_downcase_table);
- b->downcase_table = Vascii_downcase_table;
- b->upcase_table = XCHAR_TABLE (Vascii_downcase_table)->extras[0];
- b->case_canon_table = XCHAR_TABLE (Vascii_downcase_table)->extras[1];
- b->case_eqv_table = XCHAR_TABLE (Vascii_downcase_table)->extras[2];
- b->invisibility_spec = Qt;
+ B_ (b, downcase_table) = Vascii_downcase_table;
+ B_ (b, upcase_table) = XCHAR_TABLE (Vascii_downcase_table)->extras[0];
+ B_ (b, case_canon_table) = XCHAR_TABLE (Vascii_downcase_table)->extras[1];
+ B_ (b, case_eqv_table) = XCHAR_TABLE (Vascii_downcase_table)->extras[2];
+ B_ (b, invisibility_spec) = Qt;
#ifndef DOS_NT
- b->buffer_file_type = Qnil;
+ B_ (b, buffer_file_type) = Qnil;
#endif
/* Reset all (or most) per-buffer variables to their defaults. */
if (permanent_too)
- b->local_var_alist = Qnil;
+ B_ (b, local_var_alist) = Qnil;
else
{
Lisp_Object tmp, prop, last = Qnil;
- for (tmp = b->local_var_alist; CONSP (tmp); tmp = XCDR (tmp))
+ for (tmp = B_ (b, local_var_alist); CONSP (tmp); tmp = XCDR (tmp))
if (!NILP (prop = Fget (XCAR (XCAR (tmp)), Qpermanent_local)))
{
/* If permanent-local, keep it. */
}
/* Delete this local variable. */
else if (NILP (last))
- b->local_var_alist = XCDR (tmp);
+ B_ (b, local_var_alist) = XCDR (tmp);
else
XSETCDR (last, XCDR (tmp));
}
(register Lisp_Object buffer)
{
if (NILP (buffer))
- return current_buffer->name;
+ return B_ (current_buffer, name);
CHECK_BUFFER (buffer);
- return XBUFFER (buffer)->name;
+ return B_ (XBUFFER (buffer), name);
}
DEFUN ("buffer-file-name", Fbuffer_file_name, Sbuffer_file_name, 0, 1, 0,
(register Lisp_Object buffer)
{
if (NILP (buffer))
- return current_buffer->filename;
+ return B_ (current_buffer, filename);
CHECK_BUFFER (buffer);
- return XBUFFER (buffer)->filename;
+ return B_ (XBUFFER (buffer), filename);
}
DEFUN ("buffer-base-buffer", Fbuffer_base_buffer, Sbuffer_base_buffer,
{ /* Look in local_var_alist. */
struct Lisp_Buffer_Local_Value *blv = SYMBOL_BLV (sym);
XSETSYMBOL (variable, sym); /* Update In case of aliasing. */
- result = Fassoc (variable, buf->local_var_alist);
+ result = Fassoc (variable, B_ (buf, local_var_alist));
if (!NILP (result))
{
if (blv->fwd)
{
Lisp_Object result = Qnil;
register Lisp_Object tail;
- for (tail = buf->local_var_alist; CONSP (tail); tail = XCDR (tail))
+ for (tail = B_ (buf, local_var_alist); CONSP (tail); tail = XCDR (tail))
{
Lisp_Object val, elt;
/* If buffer becoming modified, lock the file.
If buffer becoming unmodified, unlock the file. */
- fn = current_buffer->file_truename;
+ fn = B_ (current_buffer, file_truename);
/* Test buffer-file-name so that binding it to nil is effective. */
- if (!NILP (fn) && ! NILP (current_buffer->filename))
+ if (!NILP (fn) && ! NILP (B_ (current_buffer, filename)))
{
already = SAVE_MODIFF < MODIFF;
if (!already && !NILP (flag))
/* If buffer becoming modified, lock the file.
If buffer becoming unmodified, unlock the file. */
- fn = current_buffer->file_truename;
+ fn = B_ (current_buffer, file_truename);
/* Test buffer-file-name so that binding it to nil is effective. */
- if (!NILP (fn) && ! NILP (current_buffer->filename))
+ if (!NILP (fn) && ! NILP (B_ (current_buffer, filename)))
{
int already = SAVE_MODIFF < MODIFF;
if (!already && !NILP (flag))
with the original name. It makes UNIQUE equivalent to
(rename-buffer (generate-new-buffer-name NEWNAME)). */
if (NILP (unique) && XBUFFER (tem) == current_buffer)
- return current_buffer->name;
+ return B_ (current_buffer, name);
if (!NILP (unique))
- newname = Fgenerate_new_buffer_name (newname, current_buffer->name);
+ newname = Fgenerate_new_buffer_name (newname, B_ (current_buffer, name));
else
error ("Buffer name `%s' is in use", SDATA (newname));
}
- current_buffer->name = newname;
+ B_ (current_buffer, name) = newname;
/* Catch redisplay's attention. Unless we do this, the mode lines for
any windows displaying current_buffer will stay unchanged. */
XSETBUFFER (buf, current_buffer);
Fsetcar (Frassq (buf, Vbuffer_alist), newname);
- if (NILP (current_buffer->filename)
- && !NILP (current_buffer->auto_save_file_name))
+ if (NILP (B_ (current_buffer, filename))
+ && !NILP (B_ (current_buffer, auto_save_file_name)))
call0 (intern ("rename-auto-save-file"));
/* Refetch since that last call may have done GC. */
- return current_buffer->name;
+ return B_ (current_buffer, name);
}
DEFUN ("other-buffer", Fother_buffer, Sother_buffer, 0, 3, 0,
continue;
if (NILP (buf))
continue;
- if (NILP (XBUFFER (buf)->name))
+ if (NILP (B_ (XBUFFER (buf), name)))
continue;
- if (SREF (XBUFFER (buf)->name, 0) == ' ')
+ if (SREF (B_ (XBUFFER (buf), name), 0) == ' ')
continue;
/* If the selected frame has a buffer_predicate,
disregard buffers that don't fit the predicate. */
nsberror (buffer);
}
- if (EQ (XBUFFER (real_buffer)->undo_list, Qt))
- XBUFFER (real_buffer)->undo_list = Qnil;
+ if (EQ (B_ (XBUFFER (real_buffer), undo_list), Qt))
+ B_ (XBUFFER (real_buffer), undo_list) = Qnil;
return Qnil;
}
/*
- DEFVAR_LISP ("kill-buffer-hook", no_cell, "\
+ DEFVAR_LISP ("kill-buffer-hook", ..., "\
Hook to be run (by `run-hooks', which see) when a buffer is killed.\n\
The buffer being killed will be current while the hook is running.\n\
See `kill-buffer'."
b = XBUFFER (buffer);
/* Avoid trouble for buffer already dead. */
- if (NILP (b->name))
+ if (NILP (B_ (b, name)))
return Qnil;
/* Query if the buffer is still modified. */
- if (INTERACTIVE && !NILP (b->filename)
+ if (INTERACTIVE && !NILP (B_ (b, filename))
&& BUF_MODIFF (b) > BUF_SAVE_MODIFF (b))
{
GCPRO1 (buffer);
tem = do_yes_or_no_p (format2 ("Buffer %s modified; kill anyway? ",
- b->name, make_number (0)));
+ B_ (b, name), make_number (0)));
UNGCPRO;
if (NILP (tem))
return Qnil;
if (EQ (buffer, XWINDOW (minibuf_window)->buffer))
return Qnil;
- if (NILP (b->name))
+ if (NILP (B_ (b, name)))
return Qnil;
/* When we kill a base buffer, kill all its indirect buffers.
for (other = all_buffers; other; other = other->next)
/* all_buffers contains dead buffers too;
don't re-kill them. */
- if (other->base_buffer == b && !NILP (other->name))
+ if (other->base_buffer == b && !NILP (B_ (other, name)))
{
Lisp_Object buffer;
XSETBUFFER (buffer, other);
/* Killing buffer processes may run sentinels which may
have called kill-buffer. */
- if (NILP (b->name))
+ if (NILP (B_ (b, name)))
return Qnil;
clear_charpos_cache (b);
/* Delete any auto-save file, if we saved it in this session.
But not if the buffer is modified. */
- if (STRINGP (b->auto_save_file_name)
+ if (STRINGP (B_ (b, auto_save_file_name))
&& BUF_AUTOSAVE_MODIFF (b) != 0
&& BUF_SAVE_MODIFF (b) < BUF_AUTOSAVE_MODIFF (b)
&& BUF_SAVE_MODIFF (b) < BUF_MODIFF (b)
Lisp_Object tem;
tem = Fsymbol_value (intern ("delete-auto-save-files"));
if (! NILP (tem))
- internal_delete_file (b->auto_save_file_name);
+ internal_delete_file (B_ (b, auto_save_file_name));
}
if (b->base_buffer)
swap_out_buffer_local_variables (b);
reset_buffer_local_variables (b, 1);
- b->name = Qnil;
+ B_ (b, name) = Qnil;
BLOCK_INPUT;
if (! b->base_buffer)
free_region_cache (b->width_run_cache);
b->width_run_cache = 0;
}
- b->width_table = Qnil;
+ B_ (b, width_table) = Qnil;
UNBLOCK_INPUT;
- b->undo_list = Qnil;
+ B_ (b, undo_list) = Qnil;
return Qt;
}
CHECK_BUFFER (buffer);
- if (STRINGP (XBUFFER (buffer)->name)
- && strcmp (SDATA (XBUFFER (buffer)->name), "*scratch*") == 0)
+ if (STRINGP (B_ (XBUFFER (buffer), name))
+ && strcmp (SSDATA (B_ (XBUFFER (buffer), name)), "*scratch*") == 0)
function = find_symbol_value (intern ("initial-major-mode"));
else
{
- function = buffer_defaults.major_mode;
+ function = B_ (&buffer_defaults, major_mode);
if (NILP (function)
- && NILP (Fget (current_buffer->major_mode, Qmode_class)))
- function = current_buffer->major_mode;
+ && NILP (Fget (B_ (current_buffer, major_mode), Qmode_class)))
+ function = B_ (current_buffer, major_mode);
}
if (NILP (function) || EQ (function, Qfundamental_mode))
/* Put the undo list back in the base buffer, so that it appears
that an indirect buffer shares the undo list of its base. */
if (old_buf->base_buffer)
- old_buf->base_buffer->undo_list = old_buf->undo_list;
+ B_ (old_buf->base_buffer, undo_list) = B_ (old_buf, undo_list);
/* If the old current buffer has markers to record PT, BEGV and ZV
when it is not current, update them now. */
- if (! NILP (old_buf->pt_marker))
+ if (! NILP (B_ (old_buf, pt_marker)))
{
Lisp_Object obuf;
XSETBUFFER (obuf, old_buf);
- set_marker_both (old_buf->pt_marker, obuf,
+ set_marker_both (B_ (old_buf, pt_marker), obuf,
BUF_PT (old_buf), BUF_PT_BYTE (old_buf));
}
- if (! NILP (old_buf->begv_marker))
+ if (! NILP (B_ (old_buf, begv_marker)))
{
Lisp_Object obuf;
XSETBUFFER (obuf, old_buf);
- set_marker_both (old_buf->begv_marker, obuf,
+ set_marker_both (B_ (old_buf, begv_marker), obuf,
BUF_BEGV (old_buf), BUF_BEGV_BYTE (old_buf));
}
- if (! NILP (old_buf->zv_marker))
+ if (! NILP (B_ (old_buf, zv_marker)))
{
Lisp_Object obuf;
XSETBUFFER (obuf, old_buf);
- set_marker_both (old_buf->zv_marker, obuf,
+ set_marker_both (B_ (old_buf, zv_marker), obuf,
BUF_ZV (old_buf), BUF_ZV_BYTE (old_buf));
}
}
/* Get the undo list from the base buffer, so that it appears
that an indirect buffer shares the undo list of its base. */
if (b->base_buffer)
- b->undo_list = b->base_buffer->undo_list;
+ B_ (b, undo_list) = B_ (b->base_buffer, undo_list);
/* If the new current buffer has markers to record PT, BEGV and ZV
when it is not current, fetch them now. */
- if (! NILP (b->pt_marker))
+ if (! NILP (B_ (b, pt_marker)))
{
- BUF_PT (b) = marker_position (b->pt_marker);
- BUF_PT_BYTE (b) = marker_byte_position (b->pt_marker);
+ BUF_PT (b) = marker_position (B_ (b, pt_marker));
+ BUF_PT_BYTE (b) = marker_byte_position (B_ (b, pt_marker));
}
- if (! NILP (b->begv_marker))
+ if (! NILP (B_ (b, begv_marker)))
{
- BUF_BEGV (b) = marker_position (b->begv_marker);
- BUF_BEGV_BYTE (b) = marker_byte_position (b->begv_marker);
+ BUF_BEGV (b) = marker_position (B_ (b, begv_marker));
+ BUF_BEGV_BYTE (b) = marker_byte_position (B_ (b, begv_marker));
}
- if (! NILP (b->zv_marker))
+ if (! NILP (B_ (b, zv_marker)))
{
- BUF_ZV (b) = marker_position (b->zv_marker);
- BUF_ZV_BYTE (b) = marker_byte_position (b->zv_marker);
+ BUF_ZV (b) = marker_position (B_ (b, zv_marker));
+ BUF_ZV_BYTE (b) = marker_byte_position (B_ (b, zv_marker));
}
/* Look down buffer's list of local Lisp variables
do
{
- for (tail = b->local_var_alist; CONSP (tail); tail = XCDR (tail))
+ for (tail = B_ (b, local_var_alist); CONSP (tail); tail = XCDR (tail))
{
Lisp_Object var = XCAR (XCAR (tail));
struct Lisp_Symbol *sym = XSYMBOL (var);
{
/* If the old current buffer has markers to record PT, BEGV and ZV
when it is not current, update them now. */
- if (! NILP (old_buf->pt_marker))
+ if (! NILP (B_ (old_buf, pt_marker)))
{
Lisp_Object obuf;
XSETBUFFER (obuf, old_buf);
- set_marker_both (old_buf->pt_marker, obuf,
+ set_marker_both (B_ (old_buf, pt_marker), obuf,
BUF_PT (old_buf), BUF_PT_BYTE (old_buf));
}
- if (! NILP (old_buf->begv_marker))
+ if (! NILP (B_ (old_buf, begv_marker)))
{
Lisp_Object obuf;
XSETBUFFER (obuf, old_buf);
- set_marker_both (old_buf->begv_marker, obuf,
+ set_marker_both (B_ (old_buf, begv_marker), obuf,
BUF_BEGV (old_buf), BUF_BEGV_BYTE (old_buf));
}
- if (! NILP (old_buf->zv_marker))
+ if (! NILP (B_ (old_buf, zv_marker)))
{
Lisp_Object obuf;
XSETBUFFER (obuf, old_buf);
- set_marker_both (old_buf->zv_marker, obuf,
+ set_marker_both (B_ (old_buf, zv_marker), obuf,
BUF_ZV (old_buf), BUF_ZV_BYTE (old_buf));
}
}
/* If the new current buffer has markers to record PT, BEGV and ZV
when it is not current, fetch them now. */
- if (! NILP (b->pt_marker))
+ if (! NILP (B_ (b, pt_marker)))
{
- BUF_PT (b) = marker_position (b->pt_marker);
- BUF_PT_BYTE (b) = marker_byte_position (b->pt_marker);
+ BUF_PT (b) = marker_position (B_ (b, pt_marker));
+ BUF_PT_BYTE (b) = marker_byte_position (B_ (b, pt_marker));
}
- if (! NILP (b->begv_marker))
+ if (! NILP (B_ (b, begv_marker)))
{
- BUF_BEGV (b) = marker_position (b->begv_marker);
- BUF_BEGV_BYTE (b) = marker_byte_position (b->begv_marker);
+ BUF_BEGV (b) = marker_position (B_ (b, begv_marker));
+ BUF_BEGV_BYTE (b) = marker_byte_position (B_ (b, begv_marker));
}
- if (! NILP (b->zv_marker))
+ if (! NILP (B_ (b, zv_marker)))
{
- BUF_ZV (b) = marker_position (b->zv_marker);
- BUF_ZV_BYTE (b) = marker_byte_position (b->zv_marker);
+ BUF_ZV (b) = marker_position (B_ (b, zv_marker));
+ BUF_ZV_BYTE (b) = marker_byte_position (B_ (b, zv_marker));
}
}
buffer = Fget_buffer (buffer_or_name);
if (NILP (buffer))
nsberror (buffer_or_name);
- if (NILP (XBUFFER (buffer)->name))
+ if (NILP (B_ (XBUFFER (buffer), name)))
error ("Selecting deleted buffer");
set_buffer_internal (XBUFFER (buffer));
return buffer;
Lisp_Object
set_buffer_if_live (Lisp_Object buffer)
{
- if (! NILP (XBUFFER (buffer)->name))
+ if (! NILP (B_ (XBUFFER (buffer), name)))
Fset_buffer (buffer);
return Qnil;
}
doc: /* Signal a `buffer-read-only' error if the current buffer is read-only. */)
(void)
{
- if (!NILP (current_buffer->read_only)
+ if (!NILP (B_ (current_buffer, read_only))
&& NILP (Vinhibit_read_only))
xsignal1 (Qbuffer_read_only, Fcurrent_buffer ());
return Qnil;
/* Move buffer to the end of the buffer list. Do nothing if the
buffer is killed. */
- if (!NILP (XBUFFER (buffer)->name))
+ if (!NILP (B_ (XBUFFER (buffer), name)))
{
Lisp_Object aelt, link;
/* Prevent warnings, or suspension of auto saving, that would happen
if future size is less than past size. Use of erase-buffer
implies that the future text is not really related to the past text. */
- XSETFASTINT (current_buffer->save_length, 0);
+ XSETFASTINT (B_ (current_buffer, save_length), 0);
return Qnil;
}
and return the adjusted position. */
static int
-advance_to_char_boundary (int byte_pos)
+advance_to_char_boundary (EMACS_INT byte_pos)
{
int c;
{
/* We should advance BYTE_POS only when C is a constituent of a
multibyte sequence. */
- int orig_byte_pos = byte_pos;
+ EMACS_INT orig_byte_pos = byte_pos;
do
{
CHECK_BUFFER (buffer);
other_buffer = XBUFFER (buffer);
- if (NILP (other_buffer->name))
+ if (NILP (B_ (other_buffer, name)))
error ("Cannot swap a dead buffer's text");
/* Actually, it probably works just fine.
other_buffer->field = current_buffer->field; \
current_buffer->field = tmp##field; \
} while (0)
+#define swapfield_(field, type) \
+ do { \
+ type tmp##field = B_ (other_buffer, field); \
+ B_ (other_buffer, field) = B_ (current_buffer, field); \
+ B_ (current_buffer, field) = tmp##field; \
+ } while (0)
swapfield (own_text, struct buffer_text);
eassert (current_buffer->text == ¤t_buffer->own_text);
swapfield (overlays_before, struct Lisp_Overlay *);
swapfield (overlays_after, struct Lisp_Overlay *);
swapfield (overlay_center, EMACS_INT);
- swapfield (undo_list, Lisp_Object);
- swapfield (mark, Lisp_Object);
- swapfield (enable_multibyte_characters, Lisp_Object);
- swapfield (bidi_display_reordering, Lisp_Object);
- swapfield (bidi_paragraph_direction, Lisp_Object);
+ swapfield_ (undo_list, Lisp_Object);
+ swapfield_ (mark, Lisp_Object);
+ swapfield_ (enable_multibyte_characters, Lisp_Object);
+ swapfield_ (bidi_display_reordering, Lisp_Object);
+ swapfield_ (bidi_paragraph_direction, Lisp_Object);
/* FIXME: Not sure what we should do with these *_marker fields.
Hopefully they're just nil anyway. */
- swapfield (pt_marker, Lisp_Object);
- swapfield (begv_marker, Lisp_Object);
- swapfield (zv_marker, Lisp_Object);
- current_buffer->point_before_scroll = Qnil;
- other_buffer->point_before_scroll = Qnil;
+ swapfield_ (pt_marker, Lisp_Object);
+ swapfield_ (begv_marker, Lisp_Object);
+ swapfield_ (zv_marker, Lisp_Object);
+ B_ (current_buffer, point_before_scroll) = Qnil;
+ B_ (other_buffer, point_before_scroll) = Qnil;
current_buffer->text->modiff++; other_buffer->text->modiff++;
current_buffer->text->chars_modiff++; other_buffer->text->chars_modiff++;
{
struct Lisp_Marker *tail, *markers;
struct buffer *other;
- int begv, zv;
+ EMACS_INT begv, zv;
int narrowed = (BEG != BEGV || Z != ZV);
int modified_p = !NILP (Fbuffer_modified_p (Qnil));
- Lisp_Object old_undo = current_buffer->undo_list;
+ Lisp_Object old_undo = B_ (current_buffer, undo_list);
struct gcpro gcpro1;
if (current_buffer->base_buffer)
error ("Cannot do `set-buffer-multibyte' on an indirect buffer");
/* Do nothing if nothing actually changes. */
- if (NILP (flag) == NILP (current_buffer->enable_multibyte_characters))
+ if (NILP (flag) == NILP (B_ (current_buffer, enable_multibyte_characters)))
return flag;
GCPRO1 (old_undo);
/* Don't record these buffer changes. We will put a special undo entry
instead. */
- current_buffer->undo_list = Qt;
+ B_ (current_buffer, undo_list) = Qt;
/* If the cached position is for this buffer, clear it out. */
clear_charpos_cache (current_buffer);
if (NILP (flag))
{
- int pos, stop;
+ EMACS_INT pos, stop;
unsigned char *p;
/* Do this first, so it can use CHAR_TO_BYTE
to calculate the old correspondences. */
set_intervals_multibyte (0);
- current_buffer->enable_multibyte_characters = Qnil;
+ B_ (current_buffer, enable_multibyte_characters) = Qnil;
Z = Z_BYTE;
BEGV = BEGV_BYTE;
{
c = STRING_CHAR_AND_LENGTH (p, bytes);
/* Delete all bytes for this 8-bit character but the
- last one, and change the last one to the charcter
+ last one, and change the last one to the character
code. */
bytes--;
del_range_2 (pos, pos, pos + bytes, pos + bytes, 0);
}
else
{
- int pt = PT;
- int pos, stop;
+ EMACS_INT pt = PT;
+ EMACS_INT pos, stop;
unsigned char *p, *pend;
/* Be sure not to have a multibyte sequence striding over the GAP.
while (! CHAR_HEAD_P (*p) && p > BEG_ADDR) p--;
if (LEADING_CODE_P (*p))
{
- int new_gpt = GPT_BYTE - (GPT_ADDR - p);
+ EMACS_INT new_gpt = GPT_BYTE - (GPT_ADDR - p);
move_gap_both (new_gpt, new_gpt);
}
*p = tmp[0];
TEMP_SET_PT_BOTH (pos + 1, pos + 1);
bytes--;
- insert_1_both (tmp + 1, bytes, bytes, 1, 0, 0);
+ insert_1_both ((char *) tmp + 1, bytes, bytes, 1, 0, 0);
/* Now the gap is after the just inserted data. */
pos = GPT;
p = GAP_END_ADDR;
/* Do this first, so that chars_in_text asks the right question.
set_intervals_multibyte needs it too. */
- current_buffer->enable_multibyte_characters = Qt;
+ B_ (current_buffer, enable_multibyte_characters) = Qt;
GPT_BYTE = advance_to_char_boundary (GPT_BYTE);
GPT = chars_in_text (BEG_ADDR, GPT_BYTE - BEG_BYTE) + BEG;
ZV = chars_in_text (BEG_ADDR, ZV_BYTE - BEG_BYTE) + BEG;
{
- int pt_byte = advance_to_char_boundary (PT_BYTE);
- int pt;
+ EMACS_INT pt_byte = advance_to_char_boundary (PT_BYTE);
+ EMACS_INT pt;
if (pt_byte > GPT_BYTE)
pt = chars_in_text (GAP_END_ADDR, pt_byte - GPT_BYTE) + GPT;
if (!EQ (old_undo, Qt))
{
/* Represent all the above changes by a special undo entry. */
- extern Lisp_Object Qapply;
- current_buffer->undo_list = Fcons (list3 (Qapply,
+ B_ (current_buffer, undo_list) = Fcons (list3 (Qapply,
intern ("set-buffer-multibyte"),
NILP (flag) ? Qt : Qnil),
old_undo);
/* Copy this buffer's new multibyte status
into all of its indirect buffers. */
for (other = all_buffers; other; other = other->next)
- if (other->base_buffer == current_buffer && !NILP (other->name))
+ if (other->base_buffer == current_buffer && !NILP (B_ (other, name)))
{
- other->enable_multibyte_characters
- = current_buffer->enable_multibyte_characters;
+ B_ (other, enable_multibyte_characters)
+ = B_ (current_buffer, enable_multibyte_characters);
other->prevent_redisplay_optimizations_p = 1;
}
if (!modified_p && !NILP (Fbuffer_modified_p (Qnil)))
Fset_buffer_modified_p (Qnil);
-#ifdef subprocesses
/* Update coding systems of this buffer's process (if any). */
{
Lisp_Object process;
if (PROCESSP (process))
setup_process_coding_systems (process);
}
-#endif /* subprocesses */
return flag;
}
Lisp_Object oalist, alist, buffer;
XSETBUFFER (buffer, b);
- oalist = b->local_var_alist;
+ oalist = B_ (b, local_var_alist);
for (alist = oalist; CONSP (alist); alist = XCDR (alist))
{
int idx = 0;
int len = *len_ptr;
Lisp_Object *vec = *vec_ptr;
- int next = ZV;
- int prev = BEGV;
+ EMACS_INT next = ZV;
+ EMACS_INT prev = BEGV;
int inhibit_storing = 0;
for (tail = current_buffer->overlays_before; tail; tail = tail->next)
{
- int startpos, endpos;
+ EMACS_INT startpos, endpos;
XSETMISC (overlay, tail);
for (tail = current_buffer->overlays_after; tail; tail = tail->next)
{
- int startpos, endpos;
+ EMACS_INT startpos, endpos;
XSETMISC (overlay, tail);
But we still return the total number of overlays. */
static int
-overlays_in (int beg, int end, int extend, Lisp_Object **vec_ptr, int *len_ptr,
- int *next_ptr, int *prev_ptr)
+overlays_in (EMACS_INT beg, EMACS_INT end, int extend,
+ Lisp_Object **vec_ptr, int *len_ptr,
+ EMACS_INT *next_ptr, EMACS_INT *prev_ptr)
{
Lisp_Object overlay, ostart, oend;
struct Lisp_Overlay *tail;
int idx = 0;
int len = *len_ptr;
Lisp_Object *vec = *vec_ptr;
- int next = ZV;
- int prev = BEGV;
+ EMACS_INT next = ZV;
+ EMACS_INT prev = BEGV;
int inhibit_storing = 0;
int end_is_Z = end == Z;
for (tail = current_buffer->overlays_before; tail; tail = tail->next)
{
- int startpos, endpos;
+ EMACS_INT startpos, endpos;
XSETMISC (overlay, tail);
for (tail = current_buffer->overlays_after; tail; tail = tail->next)
{
- int startpos, endpos;
+ EMACS_INT startpos, endpos;
XSETMISC (overlay, tail);
int
mouse_face_overlay_overlaps (Lisp_Object overlay)
{
- int start = OVERLAY_POSITION (OVERLAY_START (overlay));
- int end = OVERLAY_POSITION (OVERLAY_END (overlay));
+ EMACS_INT start = OVERLAY_POSITION (OVERLAY_START (overlay));
+ EMACS_INT end = OVERLAY_POSITION (OVERLAY_END (overlay));
int n, i, size;
Lisp_Object *v, tem;
\f
/* Fast function to just test if we're at an overlay boundary. */
int
-overlay_touches_p (int pos)
+overlay_touches_p (EMACS_INT pos)
{
Lisp_Object overlay;
struct Lisp_Overlay *tail;
for (tail = current_buffer->overlays_before; tail; tail = tail->next)
{
- int endpos;
+ EMACS_INT endpos;
XSETMISC (overlay ,tail);
if (!OVERLAYP (overlay))
for (tail = current_buffer->overlays_after; tail; tail = tail->next)
{
- int startpos;
+ EMACS_INT startpos;
XSETMISC (overlay, tail);
if (!OVERLAYP (overlay))
struct sortvec
{
Lisp_Object overlay;
- int beg, end;
+ EMACS_INT beg, end;
int priority;
};
struct sortstr *buf; /* An array that expands as needed; never freed. */
int size; /* Allocated length of that array. */
int used; /* How much of the array is currently in use. */
- int bytes; /* Total length of the strings in buf. */
+ EMACS_INT bytes; /* Total length of the strings in buf. */
};
/* Buffers for storing information about the overlays touching a given
static unsigned char *overlay_str_buf;
/* Allocated length of overlay_str_buf. */
-static int overlay_str_len;
+static EMACS_INT overlay_str_len;
/* A comparison function suitable for passing to qsort. */
static int
static void
record_overlay_string (struct sortstrlist *ssl, Lisp_Object str, Lisp_Object str2, Lisp_Object pri, int size)
{
- int nbytes;
+ EMACS_INT nbytes;
if (ssl->used == ssl->size)
{
ssl->buf[ssl->used].priority = (INTEGERP (pri) ? XINT (pri) : 0);
ssl->used++;
- if (NILP (current_buffer->enable_multibyte_characters))
+ if (NILP (B_ (current_buffer, enable_multibyte_characters)))
nbytes = SCHARS (str);
else if (! STRING_MULTIBYTE (str))
nbytes = count_size_as_multibyte (SDATA (str),
if (STRINGP (str2))
{
- if (NILP (current_buffer->enable_multibyte_characters))
+ if (NILP (B_ (current_buffer, enable_multibyte_characters)))
nbytes = SCHARS (str2);
else if (! STRING_MULTIBYTE (str2))
nbytes = count_size_as_multibyte (SDATA (str2),
PSTR, if that variable is non-null. The string may be overwritten by
subsequent calls. */
-int
+EMACS_INT
overlay_strings (EMACS_INT pos, struct window *w, unsigned char **pstr)
{
Lisp_Object overlay, window, str;
struct Lisp_Overlay *ov;
- int startpos, endpos;
- int multibyte = ! NILP (current_buffer->enable_multibyte_characters);
+ EMACS_INT startpos, endpos;
+ int multibyte = ! NILP (B_ (current_buffer, enable_multibyte_characters));
overlay_heads.used = overlay_heads.bytes = 0;
overlay_tails.used = overlay_tails.bytes = 0;
if (overlay_heads.bytes || overlay_tails.bytes)
{
Lisp_Object tem;
- int i;
+ EMACS_INT i;
unsigned char *p;
- int total = overlay_heads.bytes + overlay_tails.bytes;
+ EMACS_INT total = overlay_heads.bytes + overlay_tails.bytes;
if (total > overlay_str_len)
{
p = overlay_str_buf;
for (i = overlay_tails.used; --i >= 0;)
{
- int nbytes;
+ EMACS_INT nbytes;
tem = overlay_tails.buf[i].string;
nbytes = copy_text (SDATA (tem), p,
SBYTES (tem),
}
for (i = 0; i < overlay_heads.used; ++i)
{
- int nbytes;
+ EMACS_INT nbytes;
tem = overlay_heads.buf[i].string;
nbytes = copy_text (SDATA (tem), p,
SBYTES (tem),
if (OVERLAY_POSITION (end) > pos)
{
/* OVERLAY needs to be moved. */
- int where = OVERLAY_POSITION (beg);
+ EMACS_INT where = OVERLAY_POSITION (beg);
struct Lisp_Overlay *other, *other_prev;
/* Splice the cons cell TAIL out of overlays_before. */
if (OVERLAY_POSITION (end) <= pos)
{
/* OVERLAY needs to be moved. */
- int where = OVERLAY_POSITION (end);
+ EMACS_INT where = OVERLAY_POSITION (end);
struct Lisp_Overlay *other, *other_prev;
/* Splice the cons cell TAIL out of overlays_after. */
Such an overlay might even have negative size at this point.
If so, we'll make the overlay empty. */
void
-fix_start_end_in_overlays (register int start, register int end)
+fix_start_end_in_overlays (register EMACS_INT start, register EMACS_INT end)
{
Lisp_Object overlay;
struct Lisp_Overlay *before_list, *after_list;
current_buffer->overlays_before or overlays_after, depending
which loop we're in. */
struct Lisp_Overlay *tail, *parent;
- int startpos, endpos;
+ EMACS_INT startpos, endpos;
/* This algorithm shifts links around instead of consing and GCing.
The loop invariant is that before_list (resp. after_list) is a
{
if (start > end)
{
- int temp = start;
+ EMACS_INT temp = start;
start = end;
end = temp;
}
}
\f
-Lisp_Object Fdelete_overlay (Lisp_Object overlay);
-
static struct Lisp_Overlay *
unchain_overlay (struct Lisp_Overlay *list, struct Lisp_Overlay *overlay)
{
/* Redisplay where the overlay was. */
if (!NILP (obuffer))
{
- int o_beg;
- int o_end;
+ EMACS_INT o_beg;
+ EMACS_INT o_end;
o_beg = OVERLAY_POSITION (OVERLAY_START (overlay));
o_end = OVERLAY_POSITION (OVERLAY_END (overlay));
else
/* Redisplay the area the overlay has just left, or just enclosed. */
{
- int o_beg, o_end;
+ EMACS_INT o_beg, o_end;
o_beg = OVERLAY_POSITION (OVERLAY_START (overlay));
o_end = OVERLAY_POSITION (OVERLAY_END (overlay));
/* Put all the overlays we want in a vector in overlay_vec.
Store the length in len. */
noverlays = overlays_in (XINT (beg), XINT (end), 1, &overlay_vec, &len,
- (int *) 0, (int *) 0);
+ NULL, NULL);
/* Make a list of them all. */
result = Flist (noverlays, overlay_vec);
last_overlay_modification_hooks_used = 0;
for (tail = current_buffer->overlays_before; tail; tail = tail->next)
{
- int startpos, endpos;
+ EMACS_INT startpos, endpos;
Lisp_Object ostart, oend;
XSETMISC (overlay, tail);
for (tail = current_buffer->overlays_after; tail; tail = tail->next)
{
- int startpos, endpos;
+ EMACS_INT startpos, endpos;
Lisp_Object ostart, oend;
XSETMISC (overlay, tail);
if (pos <= current_buffer->overlay_center)
for (tail = current_buffer->overlays_before; tail; tail = tail->next)
{
- int endpos;
+ EMACS_INT endpos;
XSETMISC (overlay, tail);
endpos = OVERLAY_POSITION (OVERLAY_END (overlay));
if (endpos < pos)
else
for (tail = current_buffer->overlays_after; tail; tail = tail->next)
{
- int startpos;
+ EMACS_INT startpos;
XSETMISC (overlay, tail);
startpos = OVERLAY_POSITION (OVERLAY_START (overlay));
if (startpos > pos)
/* Make sure all markable slots in buffer_defaults
are initialized reasonably, so mark_buffer won't choke. */
reset_buffer (&buffer_defaults);
- eassert (EQ (buffer_defaults.name, make_number (0)));
+ eassert (EQ (B_ (&buffer_defaults, name), make_number (0)));
reset_buffer_local_variables (&buffer_defaults, 1);
- eassert (EQ (buffer_local_symbols.name, make_number (0)));
+ eassert (EQ (B_ (&buffer_local_symbols, name), make_number (0)));
reset_buffer (&buffer_local_symbols);
reset_buffer_local_variables (&buffer_local_symbols, 1);
/* Prevent GC from getting confused. */
/* Must do these before making the first buffer! */
/* real setup is done in bindings.el */
- buffer_defaults.mode_line_format = make_pure_c_string ("%-");
- buffer_defaults.header_line_format = Qnil;
- buffer_defaults.abbrev_mode = Qnil;
- buffer_defaults.overwrite_mode = Qnil;
- buffer_defaults.case_fold_search = Qt;
- buffer_defaults.auto_fill_function = Qnil;
- buffer_defaults.selective_display = Qnil;
+ B_ (&buffer_defaults, mode_line_format) = make_pure_c_string ("%-");
+ B_ (&buffer_defaults, header_line_format) = Qnil;
+ B_ (&buffer_defaults, abbrev_mode) = Qnil;
+ B_ (&buffer_defaults, overwrite_mode) = Qnil;
+ B_ (&buffer_defaults, case_fold_search) = Qt;
+ B_ (&buffer_defaults, auto_fill_function) = Qnil;
+ B_ (&buffer_defaults, selective_display) = Qnil;
#ifndef old
- buffer_defaults.selective_display_ellipses = Qt;
+ B_ (&buffer_defaults, selective_display_ellipses) = Qt;
#endif
- buffer_defaults.abbrev_table = Qnil;
- buffer_defaults.display_table = Qnil;
- buffer_defaults.undo_list = Qnil;
- buffer_defaults.mark_active = Qnil;
- buffer_defaults.file_format = Qnil;
- buffer_defaults.auto_save_file_format = Qt;
+ B_ (&buffer_defaults, abbrev_table) = Qnil;
+ B_ (&buffer_defaults, display_table) = Qnil;
+ B_ (&buffer_defaults, undo_list) = Qnil;
+ B_ (&buffer_defaults, mark_active) = Qnil;
+ B_ (&buffer_defaults, file_format) = Qnil;
+ B_ (&buffer_defaults, auto_save_file_format) = Qt;
buffer_defaults.overlays_before = NULL;
buffer_defaults.overlays_after = NULL;
buffer_defaults.overlay_center = BEG;
- XSETFASTINT (buffer_defaults.tab_width, 8);
- buffer_defaults.truncate_lines = Qnil;
- buffer_defaults.word_wrap = Qnil;
- buffer_defaults.ctl_arrow = Qt;
- buffer_defaults.bidi_display_reordering = Qnil;
- buffer_defaults.bidi_paragraph_direction = Qnil;
- buffer_defaults.cursor_type = Qt;
- buffer_defaults.extra_line_spacing = Qnil;
- buffer_defaults.cursor_in_non_selected_windows = Qt;
+ XSETFASTINT (B_ (&buffer_defaults, tab_width), 8);
+ B_ (&buffer_defaults, truncate_lines) = Qnil;
+ B_ (&buffer_defaults, word_wrap) = Qnil;
+ B_ (&buffer_defaults, ctl_arrow) = Qt;
+ B_ (&buffer_defaults, bidi_display_reordering) = Qnil;
+ B_ (&buffer_defaults, bidi_paragraph_direction) = Qnil;
+ B_ (&buffer_defaults, cursor_type) = Qt;
+ B_ (&buffer_defaults, extra_line_spacing) = Qnil;
+ B_ (&buffer_defaults, cursor_in_non_selected_windows) = Qt;
#ifdef DOS_NT
- buffer_defaults.buffer_file_type = Qnil; /* TEXT */
+ B_ (&buffer_defaults, buffer_file_type) = Qnil; /* TEXT */
#endif
- buffer_defaults.enable_multibyte_characters = Qt;
- buffer_defaults.buffer_file_coding_system = Qnil;
- XSETFASTINT (buffer_defaults.fill_column, 70);
- XSETFASTINT (buffer_defaults.left_margin, 0);
- buffer_defaults.cache_long_line_scans = Qnil;
- buffer_defaults.file_truename = Qnil;
- XSETFASTINT (buffer_defaults.display_count, 0);
- XSETFASTINT (buffer_defaults.left_margin_cols, 0);
- XSETFASTINT (buffer_defaults.right_margin_cols, 0);
- buffer_defaults.left_fringe_width = Qnil;
- buffer_defaults.right_fringe_width = Qnil;
- buffer_defaults.fringes_outside_margins = Qnil;
- buffer_defaults.scroll_bar_width = Qnil;
- buffer_defaults.vertical_scroll_bar_type = Qt;
- buffer_defaults.indicate_empty_lines = Qnil;
- buffer_defaults.indicate_buffer_boundaries = Qnil;
- buffer_defaults.fringe_indicator_alist = Qnil;
- buffer_defaults.fringe_cursor_alist = Qnil;
- buffer_defaults.scroll_up_aggressively = Qnil;
- buffer_defaults.scroll_down_aggressively = Qnil;
- buffer_defaults.display_time = Qnil;
+ B_ (&buffer_defaults, enable_multibyte_characters) = Qt;
+ B_ (&buffer_defaults, buffer_file_coding_system) = Qnil;
+ XSETFASTINT (B_ (&buffer_defaults, fill_column), 70);
+ XSETFASTINT (B_ (&buffer_defaults, left_margin), 0);
+ B_ (&buffer_defaults, cache_long_line_scans) = Qnil;
+ B_ (&buffer_defaults, file_truename) = Qnil;
+ XSETFASTINT (B_ (&buffer_defaults, display_count), 0);
+ XSETFASTINT (B_ (&buffer_defaults, left_margin_cols), 0);
+ XSETFASTINT (B_ (&buffer_defaults, right_margin_cols), 0);
+ B_ (&buffer_defaults, left_fringe_width) = Qnil;
+ B_ (&buffer_defaults, right_fringe_width) = Qnil;
+ B_ (&buffer_defaults, fringes_outside_margins) = Qnil;
+ B_ (&buffer_defaults, scroll_bar_width) = Qnil;
+ B_ (&buffer_defaults, vertical_scroll_bar_type) = Qt;
+ B_ (&buffer_defaults, indicate_empty_lines) = Qnil;
+ B_ (&buffer_defaults, indicate_buffer_boundaries) = Qnil;
+ B_ (&buffer_defaults, fringe_indicator_alist) = Qnil;
+ B_ (&buffer_defaults, fringe_cursor_alist) = Qnil;
+ B_ (&buffer_defaults, scroll_up_aggressively) = Qnil;
+ B_ (&buffer_defaults, scroll_down_aggressively) = Qnil;
+ B_ (&buffer_defaults, display_time) = Qnil;
/* Assign the local-flags to the slots that have default values.
The local flag is a bit that is used in the buffer
/* 0 means not a lisp var, -1 means always local, else mask */
memset (&buffer_local_flags, 0, sizeof buffer_local_flags);
- XSETINT (buffer_local_flags.filename, -1);
- XSETINT (buffer_local_flags.directory, -1);
- XSETINT (buffer_local_flags.backed_up, -1);
- XSETINT (buffer_local_flags.save_length, -1);
- XSETINT (buffer_local_flags.auto_save_file_name, -1);
- XSETINT (buffer_local_flags.read_only, -1);
- XSETINT (buffer_local_flags.major_mode, -1);
- XSETINT (buffer_local_flags.mode_name, -1);
- XSETINT (buffer_local_flags.undo_list, -1);
- XSETINT (buffer_local_flags.mark_active, -1);
- XSETINT (buffer_local_flags.point_before_scroll, -1);
- XSETINT (buffer_local_flags.file_truename, -1);
- XSETINT (buffer_local_flags.invisibility_spec, -1);
- XSETINT (buffer_local_flags.file_format, -1);
- XSETINT (buffer_local_flags.auto_save_file_format, -1);
- XSETINT (buffer_local_flags.display_count, -1);
- XSETINT (buffer_local_flags.display_time, -1);
- XSETINT (buffer_local_flags.enable_multibyte_characters, -1);
+ XSETINT (B_ (&buffer_local_flags, filename), -1);
+ XSETINT (B_ (&buffer_local_flags, directory), -1);
+ XSETINT (B_ (&buffer_local_flags, backed_up), -1);
+ XSETINT (B_ (&buffer_local_flags, save_length), -1);
+ XSETINT (B_ (&buffer_local_flags, auto_save_file_name), -1);
+ XSETINT (B_ (&buffer_local_flags, read_only), -1);
+ XSETINT (B_ (&buffer_local_flags, major_mode), -1);
+ XSETINT (B_ (&buffer_local_flags, mode_name), -1);
+ XSETINT (B_ (&buffer_local_flags, undo_list), -1);
+ XSETINT (B_ (&buffer_local_flags, mark_active), -1);
+ XSETINT (B_ (&buffer_local_flags, point_before_scroll), -1);
+ XSETINT (B_ (&buffer_local_flags, file_truename), -1);
+ XSETINT (B_ (&buffer_local_flags, invisibility_spec), -1);
+ XSETINT (B_ (&buffer_local_flags, file_format), -1);
+ XSETINT (B_ (&buffer_local_flags, auto_save_file_format), -1);
+ XSETINT (B_ (&buffer_local_flags, display_count), -1);
+ XSETINT (B_ (&buffer_local_flags, display_time), -1);
+ XSETINT (B_ (&buffer_local_flags, enable_multibyte_characters), -1);
idx = 1;
- XSETFASTINT (buffer_local_flags.mode_line_format, idx); ++idx;
- XSETFASTINT (buffer_local_flags.abbrev_mode, idx); ++idx;
- XSETFASTINT (buffer_local_flags.overwrite_mode, idx); ++idx;
- XSETFASTINT (buffer_local_flags.case_fold_search, idx); ++idx;
- XSETFASTINT (buffer_local_flags.auto_fill_function, idx); ++idx;
- XSETFASTINT (buffer_local_flags.selective_display, idx); ++idx;
+ XSETFASTINT (B_ (&buffer_local_flags, mode_line_format), idx); ++idx;
+ XSETFASTINT (B_ (&buffer_local_flags, abbrev_mode), idx); ++idx;
+ XSETFASTINT (B_ (&buffer_local_flags, overwrite_mode), idx); ++idx;
+ XSETFASTINT (B_ (&buffer_local_flags, case_fold_search), idx); ++idx;
+ XSETFASTINT (B_ (&buffer_local_flags, auto_fill_function), idx); ++idx;
+ XSETFASTINT (B_ (&buffer_local_flags, selective_display), idx); ++idx;
#ifndef old
- XSETFASTINT (buffer_local_flags.selective_display_ellipses, idx); ++idx;
+ XSETFASTINT (B_ (&buffer_local_flags, selective_display_ellipses), idx); ++idx;
#endif
- XSETFASTINT (buffer_local_flags.tab_width, idx); ++idx;
- XSETFASTINT (buffer_local_flags.truncate_lines, idx); ++idx;
- XSETFASTINT (buffer_local_flags.word_wrap, idx); ++idx;
- XSETFASTINT (buffer_local_flags.ctl_arrow, idx); ++idx;
- XSETFASTINT (buffer_local_flags.fill_column, idx); ++idx;
- XSETFASTINT (buffer_local_flags.left_margin, idx); ++idx;
- XSETFASTINT (buffer_local_flags.abbrev_table, idx); ++idx;
- XSETFASTINT (buffer_local_flags.display_table, idx); ++idx;
+ XSETFASTINT (B_ (&buffer_local_flags, tab_width), idx); ++idx;
+ XSETFASTINT (B_ (&buffer_local_flags, truncate_lines), idx); ++idx;
+ XSETFASTINT (B_ (&buffer_local_flags, word_wrap), idx); ++idx;
+ XSETFASTINT (B_ (&buffer_local_flags, ctl_arrow), idx); ++idx;
+ XSETFASTINT (B_ (&buffer_local_flags, fill_column), idx); ++idx;
+ XSETFASTINT (B_ (&buffer_local_flags, left_margin), idx); ++idx;
+ XSETFASTINT (B_ (&buffer_local_flags, abbrev_table), idx); ++idx;
+ XSETFASTINT (B_ (&buffer_local_flags, display_table), idx); ++idx;
#ifdef DOS_NT
- XSETFASTINT (buffer_local_flags.buffer_file_type, idx);
+ XSETFASTINT (B_ (&buffer_local_flags, buffer_file_type), idx);
/* Make this one a permanent local. */
buffer_permanent_local_flags[idx++] = 1;
#endif
- XSETFASTINT (buffer_local_flags.syntax_table, idx); ++idx;
- XSETFASTINT (buffer_local_flags.cache_long_line_scans, idx); ++idx;
- XSETFASTINT (buffer_local_flags.category_table, idx); ++idx;
- XSETFASTINT (buffer_local_flags.bidi_display_reordering, idx); ++idx;
- XSETFASTINT (buffer_local_flags.bidi_paragraph_direction, idx); ++idx;
- XSETFASTINT (buffer_local_flags.buffer_file_coding_system, idx);
+ XSETFASTINT (B_ (&buffer_local_flags, syntax_table), idx); ++idx;
+ XSETFASTINT (B_ (&buffer_local_flags, cache_long_line_scans), idx); ++idx;
+ XSETFASTINT (B_ (&buffer_local_flags, category_table), idx); ++idx;
+ XSETFASTINT (B_ (&buffer_local_flags, bidi_display_reordering), idx); ++idx;
+ XSETFASTINT (B_ (&buffer_local_flags, bidi_paragraph_direction), idx); ++idx;
+ XSETFASTINT (B_ (&buffer_local_flags, buffer_file_coding_system), idx);
/* Make this one a permanent local. */
buffer_permanent_local_flags[idx++] = 1;
- XSETFASTINT (buffer_local_flags.left_margin_cols, idx); ++idx;
- XSETFASTINT (buffer_local_flags.right_margin_cols, idx); ++idx;
- XSETFASTINT (buffer_local_flags.left_fringe_width, idx); ++idx;
- XSETFASTINT (buffer_local_flags.right_fringe_width, idx); ++idx;
- XSETFASTINT (buffer_local_flags.fringes_outside_margins, idx); ++idx;
- XSETFASTINT (buffer_local_flags.scroll_bar_width, idx); ++idx;
- XSETFASTINT (buffer_local_flags.vertical_scroll_bar_type, idx); ++idx;
- XSETFASTINT (buffer_local_flags.indicate_empty_lines, idx); ++idx;
- XSETFASTINT (buffer_local_flags.indicate_buffer_boundaries, idx); ++idx;
- XSETFASTINT (buffer_local_flags.fringe_indicator_alist, idx); ++idx;
- XSETFASTINT (buffer_local_flags.fringe_cursor_alist, idx); ++idx;
- XSETFASTINT (buffer_local_flags.scroll_up_aggressively, idx); ++idx;
- XSETFASTINT (buffer_local_flags.scroll_down_aggressively, idx); ++idx;
- XSETFASTINT (buffer_local_flags.header_line_format, idx); ++idx;
- XSETFASTINT (buffer_local_flags.cursor_type, idx); ++idx;
- XSETFASTINT (buffer_local_flags.extra_line_spacing, idx); ++idx;
- XSETFASTINT (buffer_local_flags.cursor_in_non_selected_windows, idx); ++idx;
+ XSETFASTINT (B_ (&buffer_local_flags, left_margin_cols), idx); ++idx;
+ XSETFASTINT (B_ (&buffer_local_flags, right_margin_cols), idx); ++idx;
+ XSETFASTINT (B_ (&buffer_local_flags, left_fringe_width), idx); ++idx;
+ XSETFASTINT (B_ (&buffer_local_flags, right_fringe_width), idx); ++idx;
+ XSETFASTINT (B_ (&buffer_local_flags, fringes_outside_margins), idx); ++idx;
+ XSETFASTINT (B_ (&buffer_local_flags, scroll_bar_width), idx); ++idx;
+ XSETFASTINT (B_ (&buffer_local_flags, vertical_scroll_bar_type), idx); ++idx;
+ XSETFASTINT (B_ (&buffer_local_flags, indicate_empty_lines), idx); ++idx;
+ XSETFASTINT (B_ (&buffer_local_flags, indicate_buffer_boundaries), idx); ++idx;
+ XSETFASTINT (B_ (&buffer_local_flags, fringe_indicator_alist), idx); ++idx;
+ XSETFASTINT (B_ (&buffer_local_flags, fringe_cursor_alist), idx); ++idx;
+ XSETFASTINT (B_ (&buffer_local_flags, scroll_up_aggressively), idx); ++idx;
+ XSETFASTINT (B_ (&buffer_local_flags, scroll_down_aggressively), idx); ++idx;
+ XSETFASTINT (B_ (&buffer_local_flags, header_line_format), idx); ++idx;
+ XSETFASTINT (B_ (&buffer_local_flags, cursor_type), idx); ++idx;
+ XSETFASTINT (B_ (&buffer_local_flags, extra_line_spacing), idx); ++idx;
+ XSETFASTINT (B_ (&buffer_local_flags, cursor_in_non_selected_windows), idx); ++idx;
/* Need more room? */
if (idx >= MAX_PER_BUFFER_VARS)
QSFundamental = make_pure_c_string ("Fundamental");
Qfundamental_mode = intern_c_string ("fundamental-mode");
- buffer_defaults.major_mode = Qfundamental_mode;
+ B_ (&buffer_defaults, major_mode) = Qfundamental_mode;
Qmode_class = intern_c_string ("mode-class");
#endif /* USE_MMAP_FOR_BUFFERS */
Fset_buffer (Fget_buffer_create (build_string ("*scratch*")));
- if (NILP (buffer_defaults.enable_multibyte_characters))
+ if (NILP (B_ (&buffer_defaults, enable_multibyte_characters)))
Fset_buffer_multibyte (Qnil);
pwd = get_current_dir_name ();
pwd[len + 1] = '\0';
}
- current_buffer->directory = make_unibyte_string (pwd, strlen (pwd));
- if (! NILP (buffer_defaults.enable_multibyte_characters))
+ B_ (current_buffer, directory) = make_unibyte_string (pwd, strlen (pwd));
+ if (! NILP (B_ (&buffer_defaults, enable_multibyte_characters)))
/* At this moment, we still don't know how to decode the
directory name. So, we keep the bytes in multibyte form so
that ENCODE_FILE correctly gets the original bytes. */
- current_buffer->directory
- = string_to_multibyte (current_buffer->directory);
+ B_ (current_buffer, directory)
+ = string_to_multibyte (B_ (current_buffer, directory));
/* Add /: to the front of the name
if it would otherwise be treated as magic. */
- temp = Ffind_file_name_handler (current_buffer->directory, Qt);
+ temp = Ffind_file_name_handler (B_ (current_buffer, directory), Qt);
if (! NILP (temp)
/* If the default dir is just /, TEMP is non-nil
because of the ange-ftp completion handler.
However, it is not necessary to turn / into /:/.
So avoid doing that. */
- && strcmp ("/", SDATA (current_buffer->directory)))
- current_buffer->directory
- = concat2 (build_string ("/:"), current_buffer->directory);
+ && strcmp ("/", SSDATA (B_ (current_buffer, directory))))
+ B_ (current_buffer, directory)
+ = concat2 (build_string ("/:"), B_ (current_buffer, directory));
temp = get_minibuffer (0);
- XBUFFER (temp)->directory = current_buffer->directory;
+ B_ (XBUFFER (temp), directory) = B_ (current_buffer, directory);
free (pwd);
}
} while (0)
static void
-defvar_per_buffer (struct Lisp_Buffer_Objfwd *bo_fwd, char *namestring,
+defvar_per_buffer (struct Lisp_Buffer_Objfwd *bo_fwd, const char *namestring,
Lisp_Object *address, Lisp_Object type, char *doc)
{
struct Lisp_Symbol *sym;
staticpro (&Qget_file_buffer);
Qpriority = intern_c_string ("priority");
staticpro (&Qpriority);
- Qwindow = intern_c_string ("window");
- staticpro (&Qwindow);
Qbefore_string = intern_c_string ("before-string");
staticpro (&Qbefore_string);
Qafter_string = intern_c_string ("after-string");
/* 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). */);
DEFVAR_PER_BUFFER ("header-line-format",
- ¤t_buffer->header_line_format,
+ &B_ (current_buffer, header_line_format),
Qnil,
doc: /* Analogous to `mode-line-format', but controls the header line.
The header line appears, optionally, at the top of a window;
the mode line appears at the bottom. */);
- DEFVAR_PER_BUFFER ("mode-line-format", ¤t_buffer->mode_line_format,
+ DEFVAR_PER_BUFFER ("mode-line-format", &B_ (current_buffer, mode_line_format),
Qnil,
doc: /* Template for displaying mode line for current buffer.
Each buffer has its own value of this variable.
%% -- 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,
+ DEFVAR_PER_BUFFER ("major-mode", &B_ (current_buffer, major_mode),
make_number (Lisp_Symbol),
doc: /* Symbol for current buffer's major mode.
The default value (normally `fundamental-mode') affects new buffers.
variables such as `buffer-read-only' and `buffer-file-coding-system'
to be set up. */);
- DEFVAR_PER_BUFFER ("mode-name", ¤t_buffer->mode_name,
+ DEFVAR_PER_BUFFER ("mode-name", &B_ (current_buffer, mode_name),
Qnil,
doc: /* Pretty name of current buffer's major mode.
Usually a string, but can use any of the constructs for `mode-line-format',
which see.
Format with `format-mode-line' to produce a string value. */);
- DEFVAR_PER_BUFFER ("local-abbrev-table", ¤t_buffer->abbrev_table, Qnil,
+ DEFVAR_PER_BUFFER ("local-abbrev-table", &B_ (current_buffer, abbrev_table), Qnil,
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. */);
+ DEFVAR_PER_BUFFER ("abbrev-mode", &B_ (current_buffer, abbrev_mode), Qnil,
+ 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,
+ DEFVAR_PER_BUFFER ("case-fold-search", &B_ (current_buffer, case_fold_search),
Qnil,
doc: /* *Non-nil if searches and matches should ignore case. */);
- DEFVAR_PER_BUFFER ("fill-column", ¤t_buffer->fill_column,
+ DEFVAR_PER_BUFFER ("fill-column", &B_ (current_buffer, fill_column),
make_number (LISP_INT_TAG),
doc: /* *Column beyond which automatic line-wrapping should happen.
Interactively, you can set the buffer local value using \\[set-fill-column]. */);
- DEFVAR_PER_BUFFER ("left-margin", ¤t_buffer->left_margin,
+ DEFVAR_PER_BUFFER ("left-margin", &B_ (current_buffer, left_margin),
make_number (LISP_INT_TAG),
doc: /* *Column for the default `indent-line-function' to indent to.
Linefeed indents to this column in Fundamental mode. */);
- DEFVAR_PER_BUFFER ("tab-width", ¤t_buffer->tab_width,
+ DEFVAR_PER_BUFFER ("tab-width", &B_ (current_buffer, tab_width),
make_number (LISP_INT_TAG),
doc: /* *Distance between tab stops (for display of tab characters), in columns. */);
- DEFVAR_PER_BUFFER ("ctl-arrow", ¤t_buffer->ctl_arrow, Qnil,
+ DEFVAR_PER_BUFFER ("ctl-arrow", &B_ (current_buffer, ctl_arrow), Qnil,
doc: /* *Non-nil means display control chars with uparrow.
A value of nil means use backslash and octal digits.
This variable does not apply to characters whose display is specified
in the current display table (if there is one). */);
DEFVAR_PER_BUFFER ("enable-multibyte-characters",
- ¤t_buffer->enable_multibyte_characters,
+ &B_ (current_buffer, enable_multibyte_characters),
Qnil,
doc: /* Non-nil means the buffer contents are regarded as multi-byte characters.
Otherwise they are regarded as unibyte. This affects the display,
XSYMBOL (intern_c_string ("enable-multibyte-characters"))->constant = 1;
DEFVAR_PER_BUFFER ("buffer-file-coding-system",
- ¤t_buffer->buffer_file_coding_system, Qnil,
+ &B_ (current_buffer, buffer_file_coding_system), Qnil,
doc: /* Coding system to be used for encoding the buffer contents on saving.
This variable applies to saving the buffer, and also to `write-region'
and other functions that use `write-region'.
This variable is never applied to a way of decoding a file while reading it. */);
DEFVAR_PER_BUFFER ("bidi-display-reordering",
- ¤t_buffer->bidi_display_reordering, Qnil,
+ &B_ (current_buffer, bidi_display_reordering), Qnil,
doc: /* Non-nil means reorder bidirectional text for display in the visual order. */);
DEFVAR_PER_BUFFER ("bidi-paragraph-direction",
- ¤t_buffer->bidi_paragraph_direction, Qnil,
+ &B_ (current_buffer, bidi_paragraph_direction), Qnil,
doc: /* *If non-nil, forces directionality of text paragraphs in the buffer.
If this is nil (the default), the direction of each paragraph is
This variable has no effect unless the buffer's value of
\`bidi-display-reordering' is non-nil. */);
- DEFVAR_PER_BUFFER ("truncate-lines", ¤t_buffer->truncate_lines, Qnil,
+ DEFVAR_PER_BUFFER ("truncate-lines", &B_ (current_buffer, truncate_lines), Qnil,
doc: /* *Non-nil means do not display continuation lines.
Instead, give each line of text just one screen line.
`truncate-partial-width-windows' if that variable is non-nil
and this buffer is not full-frame width. */);
- DEFVAR_PER_BUFFER ("word-wrap", ¤t_buffer->word_wrap, Qnil,
+ DEFVAR_PER_BUFFER ("word-wrap", &B_ (current_buffer, word_wrap), Qnil,
doc: /* *Non-nil means to use word-wrapping for continuation lines.
When word-wrapping is on, continuation lines are wrapped at the space
or tab character nearest to the right window edge.
in narrower windows. */);
#ifdef DOS_NT
- DEFVAR_PER_BUFFER ("buffer-file-type", ¤t_buffer->buffer_file_type,
+ DEFVAR_PER_BUFFER ("buffer-file-type", &B_ (current_buffer, buffer_file_type),
Qnil,
doc: /* Non-nil if the visited file is a binary file.
This variable is meaningful on MS-DOG and Windows NT.
On other systems, this variable is normally always nil. */);
#endif
- DEFVAR_PER_BUFFER ("default-directory", ¤t_buffer->directory,
+ DEFVAR_PER_BUFFER ("default-directory", &B_ (current_buffer, directory),
make_number (Lisp_String),
doc: /* Name of default directory of current buffer. Should end with slash.
To interactively change the default directory, use command `cd'. */);
- DEFVAR_PER_BUFFER ("auto-fill-function", ¤t_buffer->auto_fill_function,
+ DEFVAR_PER_BUFFER ("auto-fill-function", &B_ (current_buffer, auto_fill_function),
Qnil,
doc: /* Function called (if non-nil) to perform auto-fill.
It is called after self-inserting any character specified in
NOTE: This variable is not a hook;
its value may not be a list of functions. */);
- DEFVAR_PER_BUFFER ("buffer-file-name", ¤t_buffer->filename,
+ DEFVAR_PER_BUFFER ("buffer-file-name", &B_ (current_buffer, filename),
make_number (Lisp_String),
doc: /* Name of file visited in current buffer, or nil if not visiting a file. */);
- DEFVAR_PER_BUFFER ("buffer-file-truename", ¤t_buffer->file_truename,
+ DEFVAR_PER_BUFFER ("buffer-file-truename", &B_ (current_buffer, file_truename),
make_number (Lisp_String),
doc: /* Abbreviated truename of file visited in current buffer, or nil if none.
The truename of a file is calculated by `file-truename'
and then abbreviated with `abbreviate-file-name'. */);
DEFVAR_PER_BUFFER ("buffer-auto-save-file-name",
- ¤t_buffer->auto_save_file_name,
+ &B_ (current_buffer, auto_save_file_name),
make_number (Lisp_String),
doc: /* Name of file for auto-saving current buffer.
If it is nil, that means don't auto-save this buffer. */);
- DEFVAR_PER_BUFFER ("buffer-read-only", ¤t_buffer->read_only, Qnil,
+ DEFVAR_PER_BUFFER ("buffer-read-only", &B_ (current_buffer, read_only), Qnil,
doc: /* Non-nil if this buffer is read-only. */);
- DEFVAR_PER_BUFFER ("buffer-backed-up", ¤t_buffer->backed_up, Qnil,
+ DEFVAR_PER_BUFFER ("buffer-backed-up", &B_ (current_buffer, backed_up), Qnil,
doc: /* Non-nil if this buffer's file has been backed up.
Backing up is done before the first time the file is saved. */);
- DEFVAR_PER_BUFFER ("buffer-saved-size", ¤t_buffer->save_length,
+ DEFVAR_PER_BUFFER ("buffer-saved-size", &B_ (current_buffer, save_length),
make_number (LISP_INT_TAG),
doc: /* Length of current buffer when last read in, saved or auto-saved.
0 initially.
if its text size shrinks. If you use `buffer-swap-text' on a buffer,
you probably should set this to -2 in that buffer. */);
- DEFVAR_PER_BUFFER ("selective-display", ¤t_buffer->selective_display,
+ DEFVAR_PER_BUFFER ("selective-display", &B_ (current_buffer, selective_display),
Qnil,
doc: /* Non-nil enables selective display.
An integer N as value means display only lines
#ifndef old
DEFVAR_PER_BUFFER ("selective-display-ellipses",
- ¤t_buffer->selective_display_ellipses,
+ &B_ (current_buffer, selective_display_ellipses),
Qnil,
doc: /* Non-nil means display ... on previous line when a line is invisible. */);
#endif
- DEFVAR_PER_BUFFER ("overwrite-mode", ¤t_buffer->overwrite_mode, Qnil,
+ DEFVAR_PER_BUFFER ("overwrite-mode", &B_ (current_buffer, overwrite_mode), Qnil,
doc: /* Non-nil if self-insertion should replace existing text.
The value should be one of `overwrite-mode-textual',
`overwrite-mode-binary', or nil.
until the tab is filled in.
If `overwrite-mode-binary', self-insertion replaces newlines and tabs too. */);
- DEFVAR_PER_BUFFER ("buffer-display-table", ¤t_buffer->display_table,
+ DEFVAR_PER_BUFFER ("buffer-display-table", &B_ (current_buffer, display_table),
Qnil,
doc: /* Display table that controls display of the contents of current buffer.
See also the functions `display-table-slot' and `set-display-table-slot'. */);
- DEFVAR_PER_BUFFER ("left-margin-width", ¤t_buffer->left_margin_cols,
+ DEFVAR_PER_BUFFER ("left-margin-width", &B_ (current_buffer, left_margin_cols),
Qnil,
doc: /* *Width of left marginal area for display of a buffer.
A value of nil means no marginal area. */);
- DEFVAR_PER_BUFFER ("right-margin-width", ¤t_buffer->right_margin_cols,
+ DEFVAR_PER_BUFFER ("right-margin-width", &B_ (current_buffer, right_margin_cols),
Qnil,
doc: /* *Width of right marginal area for display of a buffer.
A value of nil means no marginal area. */);
- DEFVAR_PER_BUFFER ("left-fringe-width", ¤t_buffer->left_fringe_width,
+ DEFVAR_PER_BUFFER ("left-fringe-width", &B_ (current_buffer, left_fringe_width),
Qnil,
doc: /* *Width of this buffer's left fringe (in pixels).
A value of 0 means no left fringe is shown in this buffer's window.
A value of nil means to use the left fringe width from the window's frame. */);
- DEFVAR_PER_BUFFER ("right-fringe-width", ¤t_buffer->right_fringe_width,
+ DEFVAR_PER_BUFFER ("right-fringe-width", &B_ (current_buffer, right_fringe_width),
Qnil,
doc: /* *Width of this buffer's right fringe (in pixels).
A value of 0 means no right fringe is shown in this buffer's window.
A value of nil means to use the right fringe width from the window's frame. */);
- DEFVAR_PER_BUFFER ("fringes-outside-margins", ¤t_buffer->fringes_outside_margins,
+ DEFVAR_PER_BUFFER ("fringes-outside-margins", &B_ (current_buffer, fringes_outside_margins),
Qnil,
doc: /* *Non-nil means to display fringes outside display margins.
A value of nil means to display fringes between margins and buffer text. */);
- DEFVAR_PER_BUFFER ("scroll-bar-width", ¤t_buffer->scroll_bar_width,
+ DEFVAR_PER_BUFFER ("scroll-bar-width", &B_ (current_buffer, scroll_bar_width),
Qnil,
doc: /* *Width of this buffer's scroll bars in pixels.
A value of nil means to use the scroll bar width from the window's frame. */);
- DEFVAR_PER_BUFFER ("vertical-scroll-bar", ¤t_buffer->vertical_scroll_bar_type,
+ DEFVAR_PER_BUFFER ("vertical-scroll-bar", &B_ (current_buffer, vertical_scroll_bar_type),
Qnil,
doc: /* *Position of this buffer's vertical scroll bar.
The value takes effect whenever you tell a window to display this buffer;
A value of t (the default) means do whatever the window's frame specifies. */);
DEFVAR_PER_BUFFER ("indicate-empty-lines",
- ¤t_buffer->indicate_empty_lines, Qnil,
+ &B_ (current_buffer, indicate_empty_lines), Qnil,
doc: /* *Visually indicate empty lines after the buffer end.
If non-nil, a bitmap is displayed in the left fringe of a window on
window-systems. */);
DEFVAR_PER_BUFFER ("indicate-buffer-boundaries",
- ¤t_buffer->indicate_buffer_boundaries, Qnil,
+ &B_ (current_buffer, indicate_buffer_boundaries), Qnil,
doc: /* *Visually indicate buffer boundaries and scrolling.
If non-nil, the first and last line of the buffer are marked in the fringe
of a window on window-systems with angle bitmaps, or if the window can be
fringe, but no arrow bitmaps, use ((top . left) (bottom . left)). */);
DEFVAR_PER_BUFFER ("fringe-indicator-alist",
- ¤t_buffer->fringe_indicator_alist, Qnil,
+ &B_ (current_buffer, fringe_indicator_alist), Qnil,
doc: /* *Mapping from logical to physical fringe indicator bitmaps.
The value is an alist where each element (INDICATOR . BITMAPS)
specifies the fringe bitmaps used to display a specific logical
INDICATOR specifies the logical indicator type which is one of the
following symbols: `truncation' , `continuation', `overlay-arrow',
-`top', `bottom', `up', `down', `one-line', `empty-line', or `unknown'.
+`top', `bottom', `top-bottom', `up', `down', empty-line', or `unknown'.
-BITMAPS is list of symbols (LEFT RIGHT [LEFT1 RIGHT1]) which specifies
+BITMAPS is a list of symbols (LEFT RIGHT [LEFT1 RIGHT1]) which specifies
the actual bitmap shown in the left or right fringe for the logical
indicator. LEFT and RIGHT are the bitmaps shown in the left and/or
right fringe for the specific indicator. The LEFT1 or RIGHT1 bitmaps
-are used only for the `bottom' and `one-line' indicators when the last
-\(only) line in has no final newline. BITMAPS may also be a single
+are used only for the `bottom' and `top-bottom' indicators when the
+last (only) line has no final newline. BITMAPS may also be a single
symbol which is used in both left and right fringes. */);
DEFVAR_PER_BUFFER ("fringe-cursor-alist",
- ¤t_buffer->fringe_cursor_alist, Qnil,
+ &B_ (current_buffer, fringe_cursor_alist), Qnil,
doc: /* *Mapping from logical to physical fringe cursor bitmaps.
The value is an alist where each element (CURSOR . BITMAP)
specifies the fringe bitmaps used to display a specific logical
cursor type. */);
DEFVAR_PER_BUFFER ("scroll-up-aggressively",
- ¤t_buffer->scroll_up_aggressively, Qnil,
+ &B_ (current_buffer, scroll_up_aggressively), Qnil,
doc: /* How far to scroll windows upward.
If you move point off the bottom, the window scrolls automatically.
This variable controls how far it scrolls. The value nil, the default,
between 0.0 and 1.0, inclusive. */);
DEFVAR_PER_BUFFER ("scroll-down-aggressively",
- ¤t_buffer->scroll_down_aggressively, Qnil,
+ &B_ (current_buffer, scroll_down_aggressively), Qnil,
doc: /* How far to scroll windows downward.
If you move point off the top, the window scrolls automatically.
This variable controls how far it scrolls. The value nil, the default,
"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.
Buffer changes made while executing the `before-change-functions'
don't call any before-change or after-change functions.
-That's because these variables are temporarily set to nil.
-As a result, a hook function cannot straightforwardly alter the
-value of these variables. See the Emacs Lisp manual for a way of
-accomplishing an equivalent result by using other variables.
+That's because `inhibit-modification-hooks' is temporarily set non-nil.
If an unhandled error happens in running these functions,
the variable's value remains nil. That prevents the error
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,
Buffer changes made while executing the `after-change-functions'
don't call any before-change or after-change functions.
-That's because these variables are temporarily set to nil.
-As a result, a hook function cannot straightforwardly alter the
-value of these variables. See the Emacs Lisp manual for a way of
-accomplishing an equivalent result by using other variables.
+That's because `inhibit-modification-hooks' is temporarily set non-nil.
If an unhandled error happens in running these functions,
the variable's value remains nil. That prevents the error
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;
- DEFVAR_PER_BUFFER ("buffer-undo-list", ¤t_buffer->undo_list, Qnil,
+ DEFVAR_PER_BUFFER ("buffer-undo-list", &B_ (current_buffer, undo_list), Qnil,
doc: /* List of undo entries in current buffer.
Recent changes come first; older changes follow newer.
If the value of the variable is t, undo information is not recorded. */);
- DEFVAR_PER_BUFFER ("mark-active", ¤t_buffer->mark_active, Qnil,
+ DEFVAR_PER_BUFFER ("mark-active", &B_ (current_buffer, mark_active), Qnil,
doc: /* Non-nil means the mark and region are currently active in this buffer. */);
- DEFVAR_PER_BUFFER ("cache-long-line-scans", ¤t_buffer->cache_long_line_scans, Qnil,
+ DEFVAR_PER_BUFFER ("cache-long-line-scans", &B_ (current_buffer, cache_long_line_scans), Qnil,
doc: /* Non-nil means that Emacs should use caches to handle long lines more quickly.
Normally, the line-motion functions work by scanning the buffer for
the cache should not affect the behavior of any of the motion
functions; it should only affect their performance. */);
- DEFVAR_PER_BUFFER ("point-before-scroll", ¤t_buffer->point_before_scroll, Qnil,
+ DEFVAR_PER_BUFFER ("point-before-scroll", &B_ (current_buffer, point_before_scroll), Qnil,
doc: /* Value of point before the last series of scroll operations, or nil. */);
- DEFVAR_PER_BUFFER ("buffer-file-format", ¤t_buffer->file_format, Qnil,
+ DEFVAR_PER_BUFFER ("buffer-file-format", &B_ (current_buffer, file_format), Qnil,
doc: /* List of formats to use when saving this buffer.
Formats are defined by `format-alist'. This variable is
set when a file is visited. */);
DEFVAR_PER_BUFFER ("buffer-auto-save-file-format",
- ¤t_buffer->auto_save_file_format, Qnil,
+ &B_ (current_buffer, auto_save_file_format), Qnil,
doc: /* *Format in which to write auto-save files.
Should be a list of symbols naming formats that are defined in `format-alist'.
If it is t, which is the default, auto-save files are written in the
same format as a regular save would use. */);
DEFVAR_PER_BUFFER ("buffer-invisibility-spec",
- ¤t_buffer->invisibility_spec, Qnil,
+ &B_ (current_buffer, invisibility_spec), Qnil,
doc: /* Invisibility spec of this buffer.
The default is t, which means that text is invisible
if it has a non-nil `invisible' property.
and they have an ellipsis as well if ELLIPSIS is non-nil. */);
DEFVAR_PER_BUFFER ("buffer-display-count",
- ¤t_buffer->display_count, Qnil,
+ &B_ (current_buffer, display_count), Qnil,
doc: /* A number incremented each time this buffer is displayed in a window.
The function `set-window-buffer' increments it. */);
DEFVAR_PER_BUFFER ("buffer-display-time",
- ¤t_buffer->display_time, Qnil,
+ &B_ (current_buffer, display_time), Qnil,
doc: /* Time stamp updated each time this buffer is displayed in a window.
The function `set-window-buffer' updates this variable
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'
is a member of the list. */);
Vinhibit_read_only = Qnil;
- DEFVAR_PER_BUFFER ("cursor-type", ¤t_buffer->cursor_type, Qnil,
+ DEFVAR_PER_BUFFER ("cursor-type", &B_ (current_buffer, cursor_type), Qnil,
doc: /* Cursor to use when this buffer is in the selected window.
Values are interpreted as follows:
`cursor-in-non-selected-windows'. */);
DEFVAR_PER_BUFFER ("line-spacing",
- ¤t_buffer->extra_line_spacing, Qnil,
+ &B_ (current_buffer, extra_line_spacing), Qnil,
doc: /* Additional space to put between lines when displaying a buffer.
The space is measured in pixels, and put below lines on graphic displays,
see `display-graphic-p'.
to the default frame line height. A value of nil means add no extra space. */);
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,
+ &B_ (current_buffer, cursor_in_non_selected_windows), Qnil,
+ 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) */