(cancel-change-group): Widen buffer temporarily when
undoing changes. (Bug#810)
This commit is contained in:
parent
126f1fc1a3
commit
d21cba62f0
2 changed files with 29 additions and 20 deletions
|
@ -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
|
||||
|
|
44
lisp/subr.el
44
lisp/subr.el
|
@ -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.
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue