changeset 59777:06bae5eee9dc

(Fprimitive_undo): Handle (FUNNAME . ARGS) by calling FUNNAME.
author Richard M. Stallman <rms@gnu.org>
date Sat, 29 Jan 2005 17:16:31 +0000
parents eb109ea1450a
children f378841c3724
files src/undo.c
diffstat 1 files changed, 14 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/undo.c	Sat Jan 29 16:58:34 2005 +0000
+++ b/src/undo.c	Sat Jan 29 17:16:31 2005 +0000
@@ -519,7 +519,7 @@
 		}
 	      else if (EQ (car, Qnil))
 		{
-		  /* Element (nil prop val beg . end) is property change.  */
+		  /* Element (nil PROP VAL BEG . END) is property change.  */
 		  Lisp_Object beg, end, prop, val;
 
 		  prop = Fcar (cdr);
@@ -543,6 +543,18 @@
 		  Fgoto_char (car);
 		  Fdelete_region (car, cdr);
 		}
+	      else if (SYMBOLP (car))
+		{
+		  Lisp_Object oldlist = current_buffer->undo_list;
+		  /* Element (FUNNAME . ARGS) means call FUNNAME to undo.  */
+		  apply1 (car, cdr);
+		  /* Make sure this produces at least one undo entry,
+		     so the test in `undo' for continuing an undo series
+		     will work right.  */
+		  if (EQ (oldlist, current_buffer->undo_list))
+		    current_buffer->undo_list
+		      = Fcons (list2 (Qcdr, Qnil), current_buffer->undo_list);
+		}
 	      else if (STRINGP (car) && INTEGERP (cdr))
 		{
 		  /* Element (STRING . POS) means STRING was deleted.  */
@@ -589,7 +601,7 @@
   UNGCPRO;
   return unbind_to (count, list);
 }
-
+
 void
 syms_of_undo ()
 {