diff options
author | Kim F. Storm <storm@cua.dk> | 2005-01-31 22:44:27 +0000 |
---|---|---|
committer | Kim F. Storm <storm@cua.dk> | 2005-01-31 22:44:27 +0000 |
commit | 49be18c97e6df29dfac0febac31e75ada2c9a7ce (patch) | |
tree | 5ff2b309b269d9e8dec21bb623b26d7d9348af47 /src/undo.c | |
parent | 998858ae208ae0305396e6a69369d260b8a0381d (diff) | |
download | emacs-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.c | 19 |
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); |