summaryrefslogtreecommitdiff
path: root/src/undo.c
diff options
context:
space:
mode:
authorKim F. Storm <storm@cua.dk>2005-01-31 22:44:27 +0000
committerKim F. Storm <storm@cua.dk>2005-01-31 22:44:27 +0000
commit49be18c97e6df29dfac0febac31e75ada2c9a7ce (patch)
tree5ff2b309b269d9e8dec21bb623b26d7d9348af47 /src/undo.c
parent998858ae208ae0305396e6a69369d260b8a0381d (diff)
downloademacs-49be18c97e6df29dfac0febac31e75ada2c9a7ce.tar.gz
(Qapply): New lisp var.
(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).
Diffstat (limited to 'src/undo.c')
-rw-r--r--src/undo.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/undo.c b/src/undo.c
index 480a1b07ea6..ea4f35397a9 100644
--- a/src/undo.c
+++ b/src/undo.c
@@ -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);