# HG changeset patch # User Richard M. Stallman # Date 841293485 0 # Node ID 231e14e38946556b14e65fafa198c8b0c8f4154a # Parent b791ab74ff3046fe4941bab4070e0a32d324469a (executing_macro_iterations, executing_macro): New vars. (Fexecute_kbd_macro): Set them. diff -r b791ab74ff30 -r 231e14e38946 src/macros.c --- 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); }