# HG changeset patch # User Richard M. Stallman # Date 1107019481 0 # Node ID ec7c04e04f710be0b410c42a1baecf5608aaff95 # Parent b302445f7b001aff1e531c4121a9dc6291d16111 (undo): Fix the test for continuing a series of undos. (undo-more): Set pending-undo-list to t when we reach end. (pending-undo-list): defvar moved up. diff -r b302445f7b00 -r ec7c04e04f71 lisp/simple.el --- a/lisp/simple.el Sat Jan 29 17:21:12 2005 +0000 +++ b/lisp/simple.el Sat Jan 29 17:24:41 2005 +0000 @@ -1235,6 +1235,10 @@ (defvar undo-no-redo nil "If t, `undo' doesn't go through redo entries.") +(defvar pending-undo-list nil + "Within a run of consecutive undo commands, list remaining to be undone. +t if we undid all the way to the end of it.") + (defun undo (&optional arg) "Undo some previous changes. Repeat this command to undo more changes. @@ -1258,14 +1262,15 @@ (setq this-command 'undo-start) (unless (and (eq last-command 'undo) - ;; If something (a timer or filter?) changed the buffer - ;; since the previous command, don't continue the undo seq. - (let ((list buffer-undo-list)) - (while (eq (car list) nil) - (setq list (cdr list))) - ;; If the last undo record made was made by undo - ;; it shows nothing else happened in between. - (gethash list undo-equiv-table))) + (or (eq pending-undo-list t) + ;; If something (a timer or filter?) changed the buffer + ;; since the previous command, don't continue the undo seq. + (let ((list buffer-undo-list)) + (while (eq (car list) nil) + (setq list (cdr list))) + ;; If the last undo record made was made by undo + ;; it shows nothing else happened in between. + (gethash list undo-equiv-table)))) (setq undo-in-region (if transient-mark-mode mark-active (and arg (not (numberp arg))))) (if undo-in-region @@ -1340,9 +1345,6 @@ ;; no idea whereas to bind it. Any suggestion welcome. -stef ;; (define-key ctl-x-map "U" 'undo-only) -(defvar pending-undo-list nil - "Within a run of consecutive undo commands, list remaining to be undone.") - (defvar undo-in-progress nil "Non-nil while performing an undo. Some change-hooks test this variable to do something different.") @@ -1351,12 +1353,14 @@ "Undo back N undo-boundaries beyond what was already undone recently. Call `undo-start' to get ready to undo recent changes, then call `undo-more' one or more times to undo them." - (or pending-undo-list + (or (listp pending-undo-list) (error (format "No further undo information%s" (if (and transient-mark-mode mark-active) " for region" "")))) (let ((undo-in-progress t)) - (setq pending-undo-list (primitive-undo count pending-undo-list)))) + (setq pending-undo-list (primitive-undo count pending-undo-list)) + (if (null pending-undo-list) + (setq pending-undo-list t)))) ;; Deep copy of a list (defun undo-copy-list (list)