Mercurial > emacs
changeset 15968:231e14e38946
(executing_macro_iterations, executing_macro): New vars.
(Fexecute_kbd_macro): Set them.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Thu, 29 Aug 1996 04:38:05 +0000 |
parents | b791ab74ff30 |
children | a93195fe5297 |
files | src/macros.c |
diffstat | 1 files changed, 26 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/macros.c Thu Aug 29 04:35:38 1996 +0000 +++ b/src/macros.c Thu Aug 29 04:38:05 1996 +0000 @@ -29,9 +29,28 @@ Lisp_Object Qexecute_kbd_macro; +/* Kbd macro currently being executed (a string or vector). */ + Lisp_Object Vexecuting_macro; + +/* Index of next character to fetch from that macro. */ + int executing_macro_index; +/* Number of successful iterations so far + for innermost keyboard macro. + This is not bound at each level, + so after an error, it describes the innermost interrupted macro. */ + +int executing_macro_iterations; + +/* This is the macro that was executing. + This is not bound at each level, + so after an error, it describes the innermost interrupted macro. + We use it only as a kind of flag, so no need to protect it. */ + +Lisp_Object executing_macro; + Lisp_Object Fexecute_kbd_macro (); DEFUN ("start-kbd-macro", Fstart_kbd_macro, Sstart_kbd_macro, 1, 1, "P", @@ -196,6 +215,7 @@ /* Restore Vexecuting_macro and executing_macro_index - called when the unwind-protect in Fexecute_kbd_macro gets invoked. */ + static Lisp_Object pop_kbd_macro (info) Lisp_Object info; @@ -219,6 +239,7 @@ int pdlcount = specpdl_ptr - specpdl; int repeat = 1; struct gcpro gcpro1; + int success_count = 0; if (!NILP (count)) { @@ -238,16 +259,21 @@ do { Vexecuting_macro = final; + executing_macro = final; executing_macro_index = 0; current_kboard->Vprefix_arg = Qnil; command_loop_1 (); + executing_macro_iterations = ++success_count; + QUIT; } while (--repeat && (STRINGP (Vexecuting_macro) || VECTORP (Vexecuting_macro))); + executing_macro = Qnil; + UNGCPRO; return unbind_to (pdlcount, Qnil); }