(cancel-change-group): Widen buffer temporarily when

undoing changes.  (Bug#810)
This commit is contained in:
Martin Rudalics 2008-09-07 09:16:56 +00:00
parent 126f1fc1a3
commit d21cba62f0
2 changed files with 29 additions and 20 deletions

View 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

View 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))))))
;;;; Display-related functions.