Mercurial > emacs
changeset 59832:ff1b86883ff8
(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).
author | Kim F. Storm <storm@cua.dk> |
---|---|
date | Mon, 31 Jan 2005 22:44:27 +0000 |
parents | 4346e62d3d4f |
children | 62b43d677801 |
files | src/undo.c |
diffstat | 1 files changed, 17 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/undo.c Mon Jan 31 21:58:05 2005 +0000 +++ b/src/undo.c Mon Jan 31 22:44:27 2005 +0000 @@ -40,6 +40,10 @@ 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 @@ 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 @@ Qinhibit_read_only = intern ("inhibit-read-only"); staticpro (&Qinhibit_read_only); + Qapply = intern ("apply"); + staticpro (&Qapply); + pending_boundary = Qnil; staticpro (&pending_boundary);