diff src/buffer.c @ 51939:d38453fdf2a0

(copy_overlays): Use EMACS_INT for positions. (Fswitch_to_buffer): Don't signal an error when switching to the same buffer in a dedicated window.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Tue, 15 Jul 2003 19:32:05 +0000
parents 6713947da36f
children d116f572d76b
line wrap: on
line diff
--- a/src/buffer.c	Tue Jul 15 19:19:59 2003 +0000
+++ b/src/buffer.c	Tue Jul 15 19:32:05 2003 +0000
@@ -447,7 +447,7 @@
   for (; list; list = list->next)
     {
       Lisp_Object overlay, start, end, old_overlay;
-      int charpos;
+      EMACS_INT charpos;
 
       XSETMISC (old_overlay, list);
       charpos = marker_position (OVERLAY_START (old_overlay));
@@ -1630,6 +1630,11 @@
 {
   char *err;
 
+  if (EQ (buffer, Fwindow_buffer (selected_window)))
+    /* Basically a NOP.  Avoid signalling an error if the selected window
+       is dedicated, or a minibuffer, ...  */
+    return Fset_buffer (buffer);
+
   err = no_switch_window (selected_window);
   if (err) error (err);
 
@@ -4098,6 +4103,14 @@
   overlay = Qnil;
   tail = NULL;
 
+  /* We used to run the functions as soon as we found them and only register
+     them in last_overlay_modification_hooks for the purpose of the `after'
+     case.  But running elisp code as we traverse the list of overlays is
+     painful because the list can be modified by the elisp code so we had to
+     copy at several places.  We now simply do a read-only traversal that
+     only collects the functions to run and we run them afterwards.  It's
+     simpler, especially since all the code was already there.  -stef  */
+
   if (!after)
     {
       /* We are being called before a change.