From d4087e062b692c7301fd932e835aa55d527bce49 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Thu, 29 Aug 1996 04:38:05 +0000 Subject: [PATCH] (executing_macro_iterations, executing_macro): New vars. (Fexecute_kbd_macro): Set them. --- src/macros.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/macros.c b/src/macros.c index 2b413d6d7d4..2592faeba19 100644 --- a/src/macros.c +++ b/src/macros.c @@ -29,9 +29,28 @@ Boston, MA 02111-1307, USA. */ 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 @@ defining others, use \\[name-last-kbd-macro].") /* 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 @@ COUNT is a repeat count, or nil for once, or 0 for infinite loop.") int pdlcount = specpdl_ptr - specpdl; int repeat = 1; struct gcpro gcpro1; + int success_count = 0; if (!NILP (count)) { @@ -238,16 +259,21 @@ COUNT is a repeat count, or nil for once, or 0 for infinite loop.") 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); } -- 2.39.2