diff lisp/subr.el @ 80022:d7fb0c0b137e

(cancel-change-group): Don't move point.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Mon, 04 Feb 2008 15:29:44 +0000
parents e9adfbf7d96e
children ac327929a12c
line wrap: on
line diff
--- a/lisp/subr.el	Mon Feb 04 11:43:42 2008 +0000
+++ b/lisp/subr.el	Mon Feb 04 15:29:44 2008 +0000
@@ -1871,28 +1871,29 @@
 (defun cancel-change-group (handle)
   "Finish a change group made with `prepare-change-group' (which see).
 This finishes the change group by reverting all of its changes."
-  (dolist (elt handle)
-    (with-current-buffer (car elt)
-      (setq elt (cdr elt))
-      (let ((old-car
-	     (if (consp elt) (car elt)))
-	    (old-cdr
-	     (if (consp elt) (cdr elt))))
-	;; Temporarily truncate the undo log at ELT.
-	(when (consp elt)
-	  (setcar elt nil) (setcdr elt nil))
-	(unless (eq last-command 'undo) (undo-start))
-	;; Make sure there's no confusion.
-	(when (and (consp elt) (not (eq elt (last pending-undo-list))))
-	  (error "Undoing to some unrelated state"))
-	;; Undo it all.
-	(while (listp pending-undo-list) (undo-more 1))
-	;; Reset the modified cons cell ELT to its original content.
-	(when (consp elt)
-	  (setcar elt old-car)
-	  (setcdr elt old-cdr))
-	;; Revert the undo info to what it was when we grabbed the state.
-	(setq buffer-undo-list elt)))))
+  (save-excursion
+    (dolist (elt handle)
+      (with-current-buffer (car elt)
+        (setq elt (cdr elt))
+        (let ((old-car
+               (if (consp elt) (car elt)))
+              (old-cdr
+               (if (consp elt) (cdr elt))))
+          ;; Temporarily truncate the undo log at ELT.
+          (when (consp elt)
+            (setcar elt nil) (setcdr elt nil))
+          (unless (eq last-command 'undo) (undo-start))
+          ;; Make sure there's no confusion.
+          (when (and (consp elt) (not (eq elt (last pending-undo-list))))
+            (error "Undoing to some unrelated state"))
+          ;; Undo it all.
+          (while (listp pending-undo-list) (undo-more 1))
+          ;; Reset the modified cons cell ELT to its original content.
+          (when (consp elt)
+            (setcar elt old-car)
+            (setcdr elt old-cdr))
+          ;; Revert the undo info to what it was when we grabbed the state.
+          (setq buffer-undo-list elt))))))
 
 ;;;; Display-related functions.