]> git.eshelyaron.com Git - emacs.git/commitdiff
(Qapply): New lisp var.
authorKim F. Storm <storm@cua.dk>
Mon, 31 Jan 2005 22:44:27 +0000 (22:44 +0000)
committerKim F. Storm <storm@cua.dk>
Mon, 31 Jan 2005 22:44:27 +0000 (22:44 +0000)
(syms_of_undo): Intern and staticpro it.
(Fprimitive_undo): Support formats (apply FUNNAME . ARGS) and
(apply DELTA BEG END FUNNAME . ARGS) instead of (FUNNAME . ARGS).

src/undo.c

index 480a1b07ea6fcf2eedbc0ee86f69d6b136b42bf1..ea4f35397a9ebaed31b2c985ccd15df50501ff8d 100644 (file)
@@ -40,6 +40,10 @@ Lisp_Object last_undo_buffer;
 
 Lisp_Object Qinhibit_read_only;
 
+/* Marker for function call undo list elements.  */
+
+Lisp_Object Qapply;
+
 /* The first time a command records something for undo.
    it also allocates the undo-boundary object
    which will be added to the list at the end of the command.
@@ -543,10 +547,18 @@ Return what remains of the list.  */)
                  Fgoto_char (car);
                  Fdelete_region (car, cdr);
                }
-             else if (SYMBOLP (car))
+             else if (EQ (car, Qapply))
                {
                  Lisp_Object oldlist = current_buffer->undo_list;
-                 /* Element (FUNNAME . ARGS) means call FUNNAME to undo.  */
+                 /* Element (apply FUNNAME . ARGS) means call FUNNAME to undo.  */
+                 car = Fcar (cdr);
+                 if (INTEGERP (car))
+                   {
+                     /* Long format: (apply DELTA START END FUNNAME . ARGS).  */
+                     cdr = Fcdr (Fcdr (Fcdr (cdr)));
+                     car = Fcar (cdr);
+                   }
+                 cdr = Fcdr (cdr);
                  apply1 (car, cdr);
                  /* Make sure this produces at least one undo entry,
                     so the test in `undo' for continuing an undo series
@@ -608,6 +620,9 @@ syms_of_undo ()
   Qinhibit_read_only = intern ("inhibit-read-only");
   staticpro (&Qinhibit_read_only);
 
+  Qapply = intern ("apply");
+  staticpro (&Qapply);
+
   pending_boundary = Qnil;
   staticpro (&pending_boundary);