aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard M. Stallman1999-12-13 03:50:21 +0000
committerRichard M. Stallman1999-12-13 03:50:21 +0000
commitf84db7d56a040a7e6bf21046d9a8970732eb71a1 (patch)
tree70429efde2e435b4b740f9f3bf558764b60bdefb
parentd3887e33a93c9d1dc3b2d61785f860bac8bff6b9 (diff)
downloademacs-f84db7d56a040a7e6bf21046d9a8970732eb71a1.tar.gz
emacs-f84db7d56a040a7e6bf21046d9a8970732eb71a1.zip
(Fstart_kbd_macro): Handle case where last-kbd-macro
has been changed by the Lisp code.
-rw-r--r--src/macros.c32
1 files changed, 30 insertions, 2 deletions
diff --git a/src/macros.c b/src/macros.c
index a0212e1044a..5c37f0daa3d 100644
--- a/src/macros.c
+++ b/src/macros.c
@@ -90,10 +90,38 @@ Non-nil arg (prefix arg) means append to last macro defined;\n\
90 } 90 }
91 else 91 else
92 { 92 {
93 message ("Appending to kbd macro..."); 93 int i, len;
94 current_kboard->kbd_macro_ptr = current_kboard->kbd_macro_end; 94
95 /* Check the type of last-kbd-macro in case Lisp code changed it. */
96 if (!STRINGP (current_kboard->Vlast_kbd_macro)
97 && !VECTORP (current_kboard->Vlast_kbd_macro))
98 current_kboard->Vlast_kbd_macro
99 = wrong_type_argument (Qarrayp, current_kboard->Vlast_kbd_macro);
100
101 len = XINT (Flength (current_kboard->Vlast_kbd_macro));
102
103 /* Copy last-kbd-macro into the buffer, in case the Lisp code
104 has put another macro there. */
105 if (current_kboard->kbd_macro_bufsize < len + 30)
106 {
107 current_kboard->kbd_macro_bufsize = len + 30;
108 current_kboard->kbd_macro_buffer
109 = (Lisp_Object *)xrealloc (current_kboard->kbd_macro_buffer,
110 (len + 30) * sizeof (Lisp_Object));
111 }
112 for (i = 0; i < len; i++)
113 current_kboard->kbd_macro_buffer[i]
114 = Faref (current_kboard->Vlast_kbd_macro, make_number (i));
115
116 current_kboard->kbd_macro_ptr = current_kboard->kbd_macro_buffer + len;
117 current_kboard->kbd_macro_end = current_kboard->kbd_macro_ptr;
118
119 /* Re-execute the macro we are appending to,
120 for consistency of behavior. */
95 Fexecute_kbd_macro (current_kboard->Vlast_kbd_macro, 121 Fexecute_kbd_macro (current_kboard->Vlast_kbd_macro,
96 make_number (1)); 122 make_number (1));
123
124 message ("Appending to kbd macro...");
97 } 125 }
98 current_kboard->defining_kbd_macro = Qt; 126 current_kboard->defining_kbd_macro = Qt;
99 127