X-Git-Url: https://git.hcoop.net/bpt/emacs.git/blobdiff_plain/5842a27bbfb7efa6872824e501bc7ec98b631553..16d2ff891446b821ef348d451f73683a0d3a21f6:/src/buffer.c diff --git a/src/buffer.c b/src/buffer.c index 46e1b90ac3..49ae4bbede 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -1,8 +1,6 @@ /* 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. @@ -27,10 +25,7 @@ along with GNU Emacs. If not, see . */ #include #include #include - -#ifdef HAVE_UNISTD_H #include -#endif #include "lisp.h" #include "intervals.h" @@ -105,9 +100,6 @@ static char buffer_permanent_local_flags[MAX_PER_BUFFER_VARS]; 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); @@ -119,36 +111,16 @@ static void reset_buffer_local_variables (struct buffer *b, int permanent_too); 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; @@ -162,7 +134,7 @@ Lisp_Object Qget_file_buffer; 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; @@ -174,8 +146,6 @@ static struct Lisp_Overlay * copy_overlays (struct buffer *, struct Lisp_Overlay 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; */ @@ -192,7 +162,7 @@ DEFUN ("buffer-live-p", Fbuffer_live_p, Sbuffer_live_p, 1, 1, 0, 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); } @@ -296,8 +266,8 @@ See also `find-buffer-visiting'. */) { 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; } @@ -313,8 +283,8 @@ get_truename_buffer (register Lisp_Object filename) { 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; } @@ -383,7 +353,7 @@ even if it is dead. The return value is never nil. */) 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. */ @@ -392,22 +362,22 @@ even if it is dead. The return value is never nil. */) /* 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); @@ -516,7 +486,7 @@ clone_per_buffer_values (struct buffer *from, struct buffer *to) /* 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, @@ -542,7 +512,7 @@ CLONE nil means the indirect buffer's state is reset to default values. */) 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) @@ -566,7 +536,7 @@ CLONE nil means the indirect buffer's state is reset to default values. */) 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; @@ -574,7 +544,7 @@ CLONE nil means the indirect buffer's state is reset to default values. */) 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); @@ -583,57 +553,57 @@ CLONE nil means the indirect buffer's state is reset to default values. */) 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); @@ -677,34 +647,34 @@ delete_all_overlays (struct buffer *b) 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; } @@ -728,10 +698,10 @@ reset_buffer_local_variables (register struct buffer *b, int permanent_too) 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. */ @@ -740,22 +710,22 @@ reset_buffer_local_variables (register struct buffer *b, int permanent_too) && 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. */ @@ -785,7 +755,7 @@ reset_buffer_local_variables (register struct buffer *b, int permanent_too) } /* 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)); } @@ -860,9 +830,9 @@ Return nil if BUFFER has been killed. */) (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, @@ -871,9 +841,9 @@ No argument or nil as argument means use the current buffer. */) (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, @@ -925,7 +895,7 @@ is the default binding of the variable. */) { /* 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) @@ -974,7 +944,7 @@ buffer_lisp_local_variables (struct buffer *buf) { 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; @@ -1073,9 +1043,9 @@ A non-nil FLAG means mark the buffer modified. */) /* 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)) @@ -1140,9 +1110,9 @@ state of the current buffer. Use with care. */) /* 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)) @@ -1229,14 +1199,14 @@ This does not change the name of the visited file (if any). */) 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. */ @@ -1244,11 +1214,11 @@ This does not change the name of the visited file (if any). */) 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, @@ -1293,9 +1263,9 @@ If BUFFER is omitted or nil, some interesting buffer is returned. */) 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. */ @@ -1343,14 +1313,14 @@ No argument or nil as argument means do this for the current buffer. */) 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'." @@ -1389,16 +1359,16 @@ with SIGHUP. */) 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; @@ -1432,7 +1402,7 @@ with SIGHUP. */) 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. @@ -1447,7 +1417,7 @@ with SIGHUP. */) 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); @@ -1492,7 +1462,7 @@ with SIGHUP. */) /* 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); @@ -1506,7 +1476,7 @@ with SIGHUP. */) /* 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) @@ -1515,7 +1485,7 @@ with SIGHUP. */) 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) @@ -1555,7 +1525,7 @@ with SIGHUP. */) 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) @@ -1571,9 +1541,9 @@ with SIGHUP. */) 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; } @@ -1667,15 +1637,15 @@ the current buffer's major mode. */) 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)) @@ -1825,29 +1795,29 @@ set_buffer_internal_1 (register struct buffer *b) /* 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)); } } @@ -1855,24 +1825,24 @@ set_buffer_internal_1 (register struct buffer *b) /* 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 @@ -1880,7 +1850,7 @@ set_buffer_internal_1 (register struct buffer *b) 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); @@ -1913,45 +1883,45 @@ set_buffer_temp (struct buffer *b) { /* 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)); } } @@ -1968,7 +1938,7 @@ ends when the current command terminates. Use `switch-to-buffer' or 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; @@ -1979,7 +1949,7 @@ ends when the current command terminates. Use `switch-to-buffer' or 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; } @@ -1989,7 +1959,7 @@ DEFUN ("barf-if-buffer-read-only", Fbarf_if_buffer_read_only, 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; @@ -2038,7 +2008,7 @@ its frame, iconify that frame. */) /* 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; @@ -2071,7 +2041,7 @@ so the buffer is truly empty after this. */) /* 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; } @@ -2096,7 +2066,7 @@ validate_region (register Lisp_Object *b, register Lisp_Object *e) and return the adjusted position. */ static int -advance_to_char_boundary (int byte_pos) +advance_to_char_boundary (EMACS_INT byte_pos) { int c; @@ -2109,7 +2079,7 @@ advance_to_char_boundary (int byte_pos) { /* 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 { @@ -2141,7 +2111,7 @@ DEFUN ("buffer-swap-text", Fbuffer_swap_text, Sbuffer_swap_text, 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. @@ -2168,6 +2138,12 @@ DEFUN ("buffer-swap-text", Fbuffer_swap_text, Sbuffer_swap_text, 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); @@ -2195,18 +2171,18 @@ DEFUN ("buffer-swap-text", Fbuffer_swap_text, Sbuffer_swap_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++; @@ -2277,24 +2253,24 @@ current buffer is cleared. */) { 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); @@ -2309,14 +2285,14 @@ current buffer is cleared. */) 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; @@ -2349,7 +2325,7 @@ current buffer is cleared. */) { 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); @@ -2373,8 +2349,8 @@ current buffer is cleared. */) } 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. @@ -2390,7 +2366,7 @@ current buffer is cleared. */) 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); } @@ -2431,7 +2407,7 @@ current buffer is cleared. */) *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; @@ -2454,7 +2430,7 @@ current buffer is cleared. */) /* 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; @@ -2474,8 +2450,8 @@ current buffer is cleared. */) 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; @@ -2512,8 +2488,7 @@ current buffer is cleared. */) 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); @@ -2529,10 +2504,10 @@ current buffer is cleared. */) /* 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; } @@ -2540,7 +2515,6 @@ current buffer is cleared. */) 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; @@ -2549,7 +2523,6 @@ current buffer is cleared. */) if (PROCESSP (process)) setup_process_coding_systems (process); } -#endif /* subprocesses */ return flag; } @@ -2601,7 +2574,7 @@ swap_out_buffer_local_variables (struct buffer *b) 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)) { @@ -2649,13 +2622,13 @@ overlays_at (EMACS_INT pos, int extend, Lisp_Object **vec_ptr, int *len_ptr, 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); @@ -2706,7 +2679,7 @@ overlays_at (EMACS_INT pos, int extend, Lisp_Object **vec_ptr, int *len_ptr, for (tail = current_buffer->overlays_after; tail; tail = tail->next) { - int startpos, endpos; + EMACS_INT startpos, endpos; XSETMISC (overlay, tail); @@ -2780,22 +2753,23 @@ overlays_at (EMACS_INT pos, int extend, Lisp_Object **vec_ptr, int *len_ptr, 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); @@ -2845,7 +2819,7 @@ overlays_in (int beg, int end, int extend, Lisp_Object **vec_ptr, int *len_ptr, for (tail = current_buffer->overlays_after; tail; tail = tail->next) { - int startpos, endpos; + EMACS_INT startpos, endpos; XSETMISC (overlay, tail); @@ -2904,8 +2878,8 @@ overlays_in (int beg, int end, int extend, Lisp_Object **vec_ptr, int *len_ptr, 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; @@ -2931,14 +2905,14 @@ mouse_face_overlay_overlaps (Lisp_Object overlay) /* 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)) @@ -2953,7 +2927,7 @@ overlay_touches_p (int pos) for (tail = current_buffer->overlays_after; tail; tail = tail->next) { - int startpos; + EMACS_INT startpos; XSETMISC (overlay, tail); if (!OVERLAYP (overlay)) @@ -2971,7 +2945,7 @@ overlay_touches_p (int pos) struct sortvec { Lisp_Object overlay; - int beg, end; + EMACS_INT beg, end; int priority; }; @@ -3058,7 +3032,7 @@ struct sortstrlist 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 @@ -3069,7 +3043,7 @@ static struct sortstrlist overlay_heads, overlay_tails; 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 @@ -3087,7 +3061,7 @@ cmp_for_strings (const void *as1, const void *as2) 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) { @@ -3104,7 +3078,7 @@ record_overlay_string (struct sortstrlist *ssl, Lisp_Object str, Lisp_Object str 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), @@ -3116,7 +3090,7 @@ record_overlay_string (struct sortstrlist *ssl, Lisp_Object str, Lisp_Object 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), @@ -3140,13 +3114,13 @@ record_overlay_string (struct sortstrlist *ssl, Lisp_Object str, Lisp_Object str 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; @@ -3215,9 +3189,9 @@ overlay_strings (EMACS_INT pos, struct window *w, unsigned char **pstr) 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) { @@ -3228,7 +3202,7 @@ overlay_strings (EMACS_INT pos, struct window *w, unsigned char **pstr) 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), @@ -3237,7 +3211,7 @@ overlay_strings (EMACS_INT pos, struct window *w, unsigned char **pstr) } 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), @@ -3302,7 +3276,7 @@ recenter_overlay_lists (struct buffer *buf, EMACS_INT pos) 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. */ @@ -3375,7 +3349,7 @@ recenter_overlay_lists (struct buffer *buf, EMACS_INT pos) 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. */ @@ -3447,7 +3421,7 @@ adjust_overlays_for_delete (EMACS_INT pos, EMACS_INT length) 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; @@ -3459,7 +3433,7 @@ fix_start_end_in_overlays (register int start, register int end) 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 @@ -3760,7 +3734,7 @@ modify_overlay (struct buffer *buf, EMACS_INT start, EMACS_INT end) { if (start > end) { - int temp = start; + EMACS_INT temp = start; start = end; end = temp; } @@ -3783,8 +3757,6 @@ modify_overlay (struct buffer *buf, EMACS_INT start, EMACS_INT end) } -Lisp_Object Fdelete_overlay (Lisp_Object overlay); - static struct Lisp_Overlay * unchain_overlay (struct Lisp_Overlay *list, struct Lisp_Overlay *overlay) { @@ -3851,8 +3823,8 @@ buffer. */) /* 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)); @@ -3866,7 +3838,7 @@ buffer. */) 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)); @@ -4044,7 +4016,7 @@ end of the buffer. */) /* 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); @@ -4287,7 +4259,7 @@ report_overlay_modification (Lisp_Object start, Lisp_Object end, int after, 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); @@ -4324,7 +4296,7 @@ report_overlay_modification (Lisp_Object start, Lisp_Object end, int after, for (tail = current_buffer->overlays_after; tail; tail = tail->next) { - int startpos, endpos; + EMACS_INT startpos, endpos; Lisp_Object ostart, oend; XSETMISC (overlay, tail); @@ -4416,7 +4388,7 @@ evaporate_overlays (EMACS_INT pos) 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) @@ -4428,7 +4400,7 @@ evaporate_overlays (EMACS_INT 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) @@ -5019,9 +4991,9 @@ init_buffer_once (void) /* 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. */ @@ -5038,60 +5010,60 @@ init_buffer_once (void) /* 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 @@ -5103,73 +5075,73 @@ init_buffer_once (void) /* 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) @@ -5183,7 +5155,7 @@ init_buffer_once (void) 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"); @@ -5226,7 +5198,7 @@ init_buffer (void) #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 (); @@ -5247,28 +5219,28 @@ init_buffer (void) 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); } @@ -5290,7 +5262,7 @@ init_buffer (void) } 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; @@ -5350,8 +5322,6 @@ syms_of_buffer (void) 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"); @@ -5376,158 +5346,158 @@ syms_of_buffer (void) /* 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. @@ -5581,10 +5551,10 @@ A string is printed verbatim in the mode line except for %-constructs: %% -- 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. @@ -5597,45 +5567,46 @@ the buffer. Thus, the mode and its hooks should not expect certain 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, @@ -5649,7 +5620,7 @@ See also variable `default-enable-multibyte-characters' and Info node 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'. @@ -5667,11 +5638,11 @@ The variable `coding-system-for-write', if non-nil, overrides this variable. 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 @@ -5682,7 +5653,7 @@ Any other value is treated as nil. 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. @@ -5690,7 +5661,7 @@ Note that this is overridden by the variable `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. @@ -5703,7 +5674,7 @@ word-wrapping, you might want to reduce the value of 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. @@ -5711,12 +5682,12 @@ On those systems, it is automatically local in every buffer. 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 @@ -5724,30 +5695,30 @@ the `auto-fill-chars' table. 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. @@ -5757,7 +5728,7 @@ If you set this to -2, that means don't turn off auto-saving in this buffer 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 @@ -5768,12 +5739,12 @@ in a file, save the ^M as a newline. */); #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. @@ -5782,7 +5753,7 @@ inserts at the end of a line, and inserts when point is before a tab, 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. @@ -5819,39 +5790,39 @@ In addition, a char-table has six extra slots to control the display of: 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; @@ -5862,13 +5833,13 @@ of the window; a value of nil means don't show any vertical scroll bars. 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 @@ -5893,7 +5864,7 @@ bitmaps in right fringe. To show just the angle bitmaps in the left 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 @@ -5901,18 +5872,18 @@ fringe indicator. 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 @@ -5927,7 +5898,7 @@ BITMAP is the corresponding fringe bitmap shown for the 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, @@ -5940,7 +5911,7 @@ window scrolls by a full window height. Meaningful values are 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, @@ -5956,7 +5927,7 @@ between 0.0 and 1.0, inclusive. */); "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. @@ -5965,17 +5936,14 @@ No information is given about the length of the text after the change. 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, @@ -5986,22 +5954,19 @@ and the post-change beginning and end are at the same place.) 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. @@ -6042,10 +6007,10 @@ the changes between two undo boundaries as a single step to be undone. 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 @@ -6073,23 +6038,23 @@ maintained internally by the Emacs primitives. Enabling or disabling 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. @@ -6100,25 +6065,39 @@ then characters with property value PROP are invisible, 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' @@ -6126,7 +6105,7 @@ and disregard a `read-only' text property if the property value 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: @@ -6145,7 +6124,7 @@ cursor's appearance is instead controlled by the variable `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'. @@ -6153,17 +6132,21 @@ If value is a floating point number, it specifies the spacing relative 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; @@ -6231,6 +6214,3 @@ keys_of_buffer (void) 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) */