changeset 102543:78bd54d14660

(undo): Don't loop when encountering empty undo records.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Sat, 14 Mar 2009 01:51:34 +0000
parents 1ed8eba93aec
children e6dfff05e3b2
files lisp/ChangeLog lisp/simple.el
diffstat 2 files changed, 11 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Sat Mar 14 00:26:34 2009 +0000
+++ b/lisp/ChangeLog	Sat Mar 14 01:51:34 2009 +0000
@@ -1,3 +1,7 @@
+2009-03-14  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* simple.el (undo): Don't loop when encountering empty undo records.
+
 2009-03-13  Tassilo Horn  <tassilo@member.fsf.org>
 
 	* doc-view.el (doc-view-mode-map): Bind RET to image-next-line.
--- a/lisp/simple.el	Sat Mar 14 00:26:34 2009 +0000
+++ b/lisp/simple.el	Sat Mar 14 01:51:34 2009 +0000
@@ -1682,9 +1682,13 @@
     ;; In the ordinary case (not within a region), map the redo
     ;; record to the following undos.
     ;; I don't know how to do that in the undo-in-region case.
-    (puthash buffer-undo-list
-	     (if undo-in-region t pending-undo-list)
-	     undo-equiv-table)
+    (let ((list buffer-undo-list))
+      ;; Strip any leading undo boundaries there might be, like we do
+      ;; above when checking.
+      (while (eq (car list) nil)
+	(setq list (cdr list)))
+      (puthash list (if undo-in-region t pending-undo-list)
+	       undo-equiv-table))
     ;; Don't specify a position in the undo record for the undo command.
     ;; Instead, undoing this should move point to where the change is.
     (let ((tail buffer-undo-list)