/* Keyboard macros.
Copyright (C) 1985, 1986, 1993, 2000, 2001, 2002, 2003, 2004,
- 2005, 2006, 2007 Free Software Foundation, Inc.
+ 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
This file is part of GNU Emacs.
-GNU Emacs is free software; you can redistribute it and/or modify
+GNU Emacs is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
GNU Emacs is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
-along with GNU Emacs; see the file COPYING. If not, write to
-the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-Boston, MA 02110-1301, USA. */
+along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#include <config.h>
+#include <setjmp.h>
#include "lisp.h"
#include "macros.h"
#include "commands.h"
Lisp_Object Qexecute_kbd_macro, Qkbd_macro_termination_hook;
-/* Kbd macro currently being executed (a string or vector). */
-
-Lisp_Object Vexecuting_kbd_macro;
-
-/* Index of next character to fetch from that macro. */
-
-EMACS_INT executing_kbd_macro_index;
-
/* Number of successful iterations so far
for innermost keyboard macro.
This is not bound at each level,
Lisp_Object executing_kbd_macro;
-extern Lisp_Object real_this_command;
-
-Lisp_Object Fexecute_kbd_macro ();
+Lisp_Object Fexecute_kbd_macro (Lisp_Object macro, Lisp_Object count, Lisp_Object loopfunc);
\f
DEFUN ("start-kbd-macro", Fstart_kbd_macro, Sstart_kbd_macro, 1, 2, "P",
doc: /* Record subsequent keyboard input, defining a keyboard macro.
this begins by re-executing that macro as if you typed it again.
If optional second arg, NO-EXEC, is non-nil, do not re-execute last
macro before appending to it. */)
- (append, no_exec)
- Lisp_Object append, no_exec;
+ (Lisp_Object append, Lisp_Object no_exec)
{
if (!NILP (current_kboard->defining_kbd_macro))
error ("Already defining kbd macro");
/* Finish defining the current keyboard macro. */
void
-end_kbd_macro ()
+end_kbd_macro (void)
{
current_kboard->defining_kbd_macro = Qnil;
update_mode_lines++;
In Lisp, optional second arg LOOPFUNC may be a function that is called prior to
each iteration of the macro. Iteration stops if LOOPFUNC returns nil. */)
- (repeat, loopfunc)
- Lisp_Object repeat, loopfunc;
+ (Lisp_Object repeat, Lisp_Object loopfunc)
{
if (NILP (current_kboard->defining_kbd_macro))
error ("Not defining kbd macro");
/* Store character c into kbd macro being defined */
void
-store_kbd_macro_char (c)
- Lisp_Object c;
+store_kbd_macro_char (Lisp_Object c)
{
struct kboard *kb = current_kboard;
really belong to it. This is done in between editor commands. */
void
-finalize_kbd_macro_chars ()
+finalize_kbd_macro_chars (void)
{
current_kboard->kbd_macro_end = current_kboard->kbd_macro_ptr;
}
DEFUN ("cancel-kbd-macro-events", Fcancel_kbd_macro_events,
Scancel_kbd_macro_events, 0, 0, 0,
doc: /* Cancel the events added to a keyboard macro for this command. */)
- ()
+ (void)
{
current_kboard->kbd_macro_ptr = current_kboard->kbd_macro_end;
return Qnil;
DEFUN ("store-kbd-macro-event", Fstore_kbd_macro_event,
Sstore_kbd_macro_event, 1, 1, 0,
doc: /* Store EVENT into the keyboard macro being defined. */)
- (event)
- Lisp_Object event;
+ (Lisp_Object event)
{
store_kbd_macro_char (event);
return Qnil;
In Lisp, optional second arg LOOPFUNC may be a function that is called prior to
each iteration of the macro. Iteration stops if LOOPFUNC returns nil. */)
- (prefix, loopfunc)
- Lisp_Object prefix, loopfunc;
+ (Lisp_Object prefix, Lisp_Object loopfunc)
{
/* Don't interfere with recognition of the previous command
from before this macro started. */
Called when the unwind-protect in Fexecute_kbd_macro gets invoked. */
static Lisp_Object
-pop_kbd_macro (info)
- Lisp_Object info;
+pop_kbd_macro (Lisp_Object info)
{
Lisp_Object tem;
Vexecuting_kbd_macro = XCAR (info);
Optional third arg LOOPFUNC may be a function that is called prior to
each iteration of the macro. Iteration stops if LOOPFUNC returns nil. */)
- (macro, count, loopfunc)
- Lisp_Object macro, count, loopfunc;
+ (Lisp_Object macro, Lisp_Object count, Lisp_Object loopfunc)
{
Lisp_Object final;
Lisp_Object tem;
}
\f
void
-init_macros ()
+init_macros (void)
{
Vexecuting_kbd_macro = Qnil;
executing_kbd_macro = Qnil;
}
void
-syms_of_macros ()
+syms_of_macros (void)
{
- Qexecute_kbd_macro = intern ("execute-kbd-macro");
+ Qexecute_kbd_macro = intern_c_string ("execute-kbd-macro");
staticpro (&Qexecute_kbd_macro);
- Qkbd_macro_termination_hook = intern ("kbd-macro-termination-hook");
+ Qkbd_macro_termination_hook = intern_c_string ("kbd-macro-termination-hook");
staticpro (&Qkbd_macro_termination_hook);
defsubr (&Sstart_kbd_macro);
The value is the symbol `append' while appending to the definition of
an existing macro. */);
- DEFVAR_LISP ("executing-kbd-macro", &Vexecuting_kbd_macro,
+ DEFVAR_LISP ("executing-kbd-macro", Vexecuting_kbd_macro,
doc: /* Currently executing keyboard macro (string or vector).
This is nil when not executing a keyboard macro. */);
- DEFVAR_INT ("executing-kbd-macro-index", &executing_kbd_macro_index,
+ DEFVAR_INT ("executing-kbd-macro-index", executing_kbd_macro_index,
doc: /* Index in currently executing keyboard macro; undefined if none executing. */);
DEFVAR_KBOARD ("last-kbd-macro", Vlast_kbd_macro,
doc: /* Last kbd macro defined, as a string or vector; nil if none defined. */);
}
-/* arch-tag: d293fcc9-2266-4163-9198-7fa0de12ec9e
- (do not change this comment) */