From 27c6b98e3b0c7a89a41bfcc6a66e0ad63860dabe Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Tue, 15 Jul 2003 19:32:05 +0000 Subject: [PATCH] (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. --- src/buffer.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/buffer.c b/src/buffer.c index c14d874f1d6..cbbe4153106 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -447,7 +447,7 @@ copy_overlays (b, list) 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 @@ the window-buffer correspondences. */) { 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 @@ report_overlay_modification (start, end, after, arg1, arg2, arg3) 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. -- 2.39.2