]> git.eshelyaron.com Git - emacs.git/commitdiff
(cancel-change-group): Widen buffer temporarily when
authorMartin Rudalics <rudalics@gmx.at>
Sun, 7 Sep 2008 09:16:56 +0000 (09:16 +0000)
committerMartin Rudalics <rudalics@gmx.at>
Sun, 7 Sep 2008 09:16:56 +0000 (09:16 +0000)
undoing changes.  (Bug#810)

lisp/ChangeLog
lisp/subr.el

index 1bb4e7721cfadd6efcca3c1857ae7a96bbfe6997..46404ef3c09202a25e0b05e15ef797400c5040f3 100644 (file)
@@ -1,3 +1,8 @@
+2008-09-07  Martin Rudalics  <rudalics@gmx.at>
+
+       * subr.el (cancel-change-group): Widen buffer temporarily when
+       undoing changes.  (Bug#810)
+
 2008-09-07  Nick Roberts  <nickrob@snap.net.nz>
 
        * progmodes/gud.el (gud-stop-subjob): Using jdb, suspend threads
index b7b6b2c38dee99cef2fad2f13d848de1336d2837..2aa802cd03eb0eb788492fbe8a4863f2559378f6 100644 (file)
@@ -1993,26 +1993,30 @@ 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.
-        (save-excursion
-          (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-restriction
+       ;; Widen buffer temporarily so if the buffer was narrowed within
+       ;; the body of `atomic-change-group' all changes can be undone.
+       (widen)
+       (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.
+         (save-excursion
+           (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))))))
 \f
 ;;;; Display-related functions.