From 49be18c97e6df29dfac0febac31e75ada2c9a7ce Mon Sep 17 00:00:00 2001 From: "Kim F. Storm" Date: Mon, 31 Jan 2005 22:44:27 +0000 Subject: [PATCH] (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). --- src/undo.c | 19 +++++++++++++++++-- 1 file 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); -- 2.39.2