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);
 }