diff options
| author | Richard M. Stallman <rms@gnu.org> | 1996-08-29 04:38:05 +0000 |
|---|---|---|
| committer | Richard M. Stallman <rms@gnu.org> | 1996-08-29 04:38:05 +0000 |
| commit | d4087e062b692c7301fd932e835aa55d527bce49 (patch) | |
| tree | be8d532b22985e1e02ec8d733111b753fd4d793b /src/macros.c | |
| parent | 77aa8edfb641b58ed7e10f1484f32a78dab49f76 (diff) | |
| download | emacs-d4087e062b692c7301fd932e835aa55d527bce49.tar.gz | |
(executing_macro_iterations, executing_macro): New vars.
(Fexecute_kbd_macro): Set them.
Diffstat (limited to 'src/macros.c')
| -rw-r--r-- | src/macros.c | 26 |
1 files changed, 26 insertions, 0 deletions
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); } |
