Lisp_Object Qexecute_kbd_macro;
-int defining_kbd_macro;
-
-/* The start of storage for the current keyboard macro, and its size. */
-Lisp_Object *kbd_macro_buffer;
-int kbd_macro_bufsize;
-
-/* Where to store the next keystroke of the macro. */
-Lisp_Object *kbd_macro_ptr;
-
-/* The finalized section of the macro starts at kbd_macro_buffer and
- ends before this. This is not the same as kbd_macro_pointer, because
- we advance this to kbd_macro_pointer when a key's command is complete.
- This way, the keystrokes for "end-kbd-macro" are not included in the
- macro. */
-Lisp_Object *kbd_macro_end;
-
Lisp_Object Vlast_kbd_macro;
Lisp_Object Vexecuting_macro;
(append)
Lisp_Object append;
{
- if (defining_kbd_macro)
+ if (!NILP (current_perdisplay->defining_kbd_macro))
error ("Already defining kbd macro");
+ if (!current_perdisplay->kbd_macro_buffer)
+ {
+ current_perdisplay->kbd_macro_bufsize = 30;
+ current_perdisplay->kbd_macro_buffer
+ = (Lisp_Object *)malloc (30 * sizeof (Lisp_Object));
+ }
update_mode_lines++;
if (NILP (append))
{
- kbd_macro_ptr = kbd_macro_buffer;
- kbd_macro_end = kbd_macro_buffer;
+ current_perdisplay->kbd_macro_ptr = current_perdisplay->kbd_macro_buffer;
+ current_perdisplay->kbd_macro_end = current_perdisplay->kbd_macro_buffer;
message("Defining kbd macro...");
}
else
{
message("Appending to kbd macro...");
- kbd_macro_ptr = kbd_macro_end;
+ current_perdisplay->kbd_macro_ptr = current_perdisplay->kbd_macro_end;
Fexecute_kbd_macro (Vlast_kbd_macro, make_number (1));
}
- defining_kbd_macro++;
+ current_perdisplay->defining_kbd_macro = Qt;
return Qnil;
}
(arg)
Lisp_Object arg;
{
- if (!defining_kbd_macro)
+ if (NILP (current_perdisplay->defining_kbd_macro))
error ("Not defining kbd macro.");
if (NILP (arg))
else
CHECK_NUMBER (arg, 0);
- if (defining_kbd_macro)
+ if (!NILP (current_perdisplay->defining_kbd_macro))
{
- defining_kbd_macro = 0;
+ current_perdisplay->defining_kbd_macro = Qnil;
update_mode_lines++;
- Vlast_kbd_macro = make_event_array (kbd_macro_end - kbd_macro_buffer,
- kbd_macro_buffer);
+ Vlast_kbd_macro
+ = make_event_array ((current_perdisplay->kbd_macro_end
+ - current_perdisplay->kbd_macro_buffer),
+ current_perdisplay->kbd_macro_buffer);
message("Keyboard macro defined");
}
store_kbd_macro_char (c)
Lisp_Object c;
{
- if (defining_kbd_macro)
+ if (!NILP (current_perdisplay->defining_kbd_macro))
{
- if (kbd_macro_ptr - kbd_macro_buffer == kbd_macro_bufsize)
+ if ((current_perdisplay->kbd_macro_ptr
+ - current_perdisplay->kbd_macro_buffer)
+ == current_perdisplay->kbd_macro_bufsize)
{
- register Lisp_Object *new
- = (Lisp_Object *) xrealloc (kbd_macro_buffer,
- ((kbd_macro_bufsize *= 2)
- * sizeof (Lisp_Object)));
- kbd_macro_ptr += new - kbd_macro_buffer;
- kbd_macro_end += new - kbd_macro_buffer;
- kbd_macro_buffer = new;
+ register Lisp_Object *new;
+ current_perdisplay->kbd_macro_bufsize *= 2;
+ new = (Lisp_Object *)xrealloc (current_perdisplay->kbd_macro_buffer,
+ (current_perdisplay->kbd_macro_bufsize
+ * sizeof (Lisp_Object)));
+ current_perdisplay->kbd_macro_ptr
+ += new - current_perdisplay->kbd_macro_buffer;
+ current_perdisplay->kbd_macro_end
+ += new - current_perdisplay->kbd_macro_buffer;
+ current_perdisplay->kbd_macro_buffer = new;
}
- *kbd_macro_ptr++ = c;
+ *current_perdisplay->kbd_macro_ptr++ = c;
}
}
finalize_kbd_macro_chars ()
{
- kbd_macro_end = kbd_macro_ptr;
+ current_perdisplay->kbd_macro_end = current_perdisplay->kbd_macro_ptr;
}
\f
DEFUN ("call-last-kbd-macro", Fcall_last_kbd_macro, Scall_last_kbd_macro,
(prefix)
Lisp_Object prefix;
{
- if (defining_kbd_macro)
+ if (! NILP (current_perdisplay->defining_kbd_macro))
error ("Can't execute anonymous macro while defining one");
else if (NILP (Vlast_kbd_macro))
error ("No kbd macro has been defined");
init_macros ()
{
Vlast_kbd_macro = Qnil;
- defining_kbd_macro = 0;
-
Vexecuting_macro = Qnil;
}
syms_of_macros ()
{
- kbd_macro_bufsize = 100;
- kbd_macro_buffer = (Lisp_Object *) malloc (kbd_macro_bufsize
- * sizeof (Lisp_Object));
-
Qexecute_kbd_macro = intern ("execute-kbd-macro");
staticpro (&Qexecute_kbd_macro);
defsubr (&Scall_last_kbd_macro);
defsubr (&Sexecute_kbd_macro);
- DEFVAR_BOOL ("defining-kbd-macro", &defining_kbd_macro,
+ DEFVAR_DISPLAY ("defining-kbd-macro", defining_kbd_macro,
"Non-nil while a keyboard macro is being defined. Don't set this!");
DEFVAR_LISP ("executing-macro", &Vexecuting_macro,