diff options
| author | Karl Heuer | 1995-03-03 05:02:50 +0000 |
|---|---|---|
| committer | Karl Heuer | 1995-03-03 05:02:50 +0000 |
| commit | 8b97da83a7bb3123653e7d580e901b781082c30d (patch) | |
| tree | 2364cc2bc65379af7d29f3d3741eaf8625b6c826 /src | |
| parent | 834ec2768cfb9caebe2e6aa3ed66b627e4f265cc (diff) | |
| download | emacs-8b97da83a7bb3123653e7d580e901b781082c30d.tar.gz emacs-8b97da83a7bb3123653e7d580e901b781082c30d.zip | |
(defining_kbd_macro): Delete; now part of perdisplay. All uses changed.
(kbd_macro_buffer, kbd_macro_ptr, kbd_macro_end): Likewise.
(kbd_macro_bufsize): Likewise.
(Fstart_kbd_macro): Initialize kbd_macro_buffer if not already done.
(init_macros): Delete initialization of defining_kbd_macro.
(syms_of_macros): Delete initialization of kbd_macro_buffer.
Diffstat (limited to 'src')
| -rw-r--r-- | src/macros.c | 81 |
1 files changed, 36 insertions, 45 deletions
diff --git a/src/macros.c b/src/macros.c index d5be6f4d788..75227ec6218 100644 --- a/src/macros.c +++ b/src/macros.c | |||
| @@ -27,22 +27,6 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ | |||
| 27 | 27 | ||
| 28 | Lisp_Object Qexecute_kbd_macro; | 28 | Lisp_Object Qexecute_kbd_macro; |
| 29 | 29 | ||
| 30 | int defining_kbd_macro; | ||
| 31 | |||
| 32 | /* The start of storage for the current keyboard macro, and its size. */ | ||
| 33 | Lisp_Object *kbd_macro_buffer; | ||
| 34 | int kbd_macro_bufsize; | ||
| 35 | |||
| 36 | /* Where to store the next keystroke of the macro. */ | ||
| 37 | Lisp_Object *kbd_macro_ptr; | ||
| 38 | |||
| 39 | /* The finalized section of the macro starts at kbd_macro_buffer and | ||
| 40 | ends before this. This is not the same as kbd_macro_pointer, because | ||
| 41 | we advance this to kbd_macro_pointer when a key's command is complete. | ||
| 42 | This way, the keystrokes for "end-kbd-macro" are not included in the | ||
| 43 | macro. */ | ||
| 44 | Lisp_Object *kbd_macro_end; | ||
| 45 | |||
| 46 | Lisp_Object Vlast_kbd_macro; | 30 | Lisp_Object Vlast_kbd_macro; |
| 47 | 31 | ||
| 48 | Lisp_Object Vexecuting_macro; | 32 | Lisp_Object Vexecuting_macro; |
| @@ -60,23 +44,29 @@ Non-nil arg (prefix arg) means append to last macro defined;\n\ | |||
| 60 | (append) | 44 | (append) |
| 61 | Lisp_Object append; | 45 | Lisp_Object append; |
| 62 | { | 46 | { |
| 63 | if (defining_kbd_macro) | 47 | if (!NILP (current_perdisplay->defining_kbd_macro)) |
| 64 | error ("Already defining kbd macro"); | 48 | error ("Already defining kbd macro"); |
| 65 | 49 | ||
| 50 | if (!current_perdisplay->kbd_macro_buffer) | ||
| 51 | { | ||
| 52 | current_perdisplay->kbd_macro_bufsize = 30; | ||
| 53 | current_perdisplay->kbd_macro_buffer | ||
| 54 | = (Lisp_Object *)malloc (30 * sizeof (Lisp_Object)); | ||
| 55 | } | ||
| 66 | update_mode_lines++; | 56 | update_mode_lines++; |
| 67 | if (NILP (append)) | 57 | if (NILP (append)) |
| 68 | { | 58 | { |
| 69 | kbd_macro_ptr = kbd_macro_buffer; | 59 | current_perdisplay->kbd_macro_ptr = current_perdisplay->kbd_macro_buffer; |
| 70 | kbd_macro_end = kbd_macro_buffer; | 60 | current_perdisplay->kbd_macro_end = current_perdisplay->kbd_macro_buffer; |
| 71 | message("Defining kbd macro..."); | 61 | message("Defining kbd macro..."); |
| 72 | } | 62 | } |
| 73 | else | 63 | else |
| 74 | { | 64 | { |
| 75 | message("Appending to kbd macro..."); | 65 | message("Appending to kbd macro..."); |
| 76 | kbd_macro_ptr = kbd_macro_end; | 66 | current_perdisplay->kbd_macro_ptr = current_perdisplay->kbd_macro_end; |
| 77 | Fexecute_kbd_macro (Vlast_kbd_macro, make_number (1)); | 67 | Fexecute_kbd_macro (Vlast_kbd_macro, make_number (1)); |
| 78 | } | 68 | } |
| 79 | defining_kbd_macro++; | 69 | current_perdisplay->defining_kbd_macro = Qt; |
| 80 | 70 | ||
| 81 | return Qnil; | 71 | return Qnil; |
| 82 | } | 72 | } |
| @@ -94,7 +84,7 @@ An argument of zero means repeat until error.") | |||
| 94 | (arg) | 84 | (arg) |
| 95 | Lisp_Object arg; | 85 | Lisp_Object arg; |
| 96 | { | 86 | { |
| 97 | if (!defining_kbd_macro) | 87 | if (NILP (current_perdisplay->defining_kbd_macro)) |
| 98 | error ("Not defining kbd macro."); | 88 | error ("Not defining kbd macro."); |
| 99 | 89 | ||
| 100 | if (NILP (arg)) | 90 | if (NILP (arg)) |
| @@ -102,12 +92,14 @@ An argument of zero means repeat until error.") | |||
| 102 | else | 92 | else |
| 103 | CHECK_NUMBER (arg, 0); | 93 | CHECK_NUMBER (arg, 0); |
| 104 | 94 | ||
| 105 | if (defining_kbd_macro) | 95 | if (!NILP (current_perdisplay->defining_kbd_macro)) |
| 106 | { | 96 | { |
| 107 | defining_kbd_macro = 0; | 97 | current_perdisplay->defining_kbd_macro = Qnil; |
| 108 | update_mode_lines++; | 98 | update_mode_lines++; |
| 109 | Vlast_kbd_macro = make_event_array (kbd_macro_end - kbd_macro_buffer, | 99 | Vlast_kbd_macro |
| 110 | kbd_macro_buffer); | 100 | = make_event_array ((current_perdisplay->kbd_macro_end |
| 101 | - current_perdisplay->kbd_macro_buffer), | ||
| 102 | current_perdisplay->kbd_macro_buffer); | ||
| 111 | message("Keyboard macro defined"); | 103 | message("Keyboard macro defined"); |
| 112 | } | 104 | } |
| 113 | 105 | ||
| @@ -127,19 +119,24 @@ An argument of zero means repeat until error.") | |||
| 127 | store_kbd_macro_char (c) | 119 | store_kbd_macro_char (c) |
| 128 | Lisp_Object c; | 120 | Lisp_Object c; |
| 129 | { | 121 | { |
| 130 | if (defining_kbd_macro) | 122 | if (!NILP (current_perdisplay->defining_kbd_macro)) |
| 131 | { | 123 | { |
| 132 | if (kbd_macro_ptr - kbd_macro_buffer == kbd_macro_bufsize) | 124 | if ((current_perdisplay->kbd_macro_ptr |
| 125 | - current_perdisplay->kbd_macro_buffer) | ||
| 126 | == current_perdisplay->kbd_macro_bufsize) | ||
| 133 | { | 127 | { |
| 134 | register Lisp_Object *new | 128 | register Lisp_Object *new; |
| 135 | = (Lisp_Object *) xrealloc (kbd_macro_buffer, | 129 | current_perdisplay->kbd_macro_bufsize *= 2; |
| 136 | ((kbd_macro_bufsize *= 2) | 130 | new = (Lisp_Object *)xrealloc (current_perdisplay->kbd_macro_buffer, |
| 137 | * sizeof (Lisp_Object))); | 131 | (current_perdisplay->kbd_macro_bufsize |
| 138 | kbd_macro_ptr += new - kbd_macro_buffer; | 132 | * sizeof (Lisp_Object))); |
| 139 | kbd_macro_end += new - kbd_macro_buffer; | 133 | current_perdisplay->kbd_macro_ptr |
| 140 | kbd_macro_buffer = new; | 134 | += new - current_perdisplay->kbd_macro_buffer; |
| 135 | current_perdisplay->kbd_macro_end | ||
| 136 | += new - current_perdisplay->kbd_macro_buffer; | ||
| 137 | current_perdisplay->kbd_macro_buffer = new; | ||
| 141 | } | 138 | } |
| 142 | *kbd_macro_ptr++ = c; | 139 | *current_perdisplay->kbd_macro_ptr++ = c; |
| 143 | } | 140 | } |
| 144 | } | 141 | } |
| 145 | 142 | ||
| @@ -148,7 +145,7 @@ store_kbd_macro_char (c) | |||
| 148 | 145 | ||
| 149 | finalize_kbd_macro_chars () | 146 | finalize_kbd_macro_chars () |
| 150 | { | 147 | { |
| 151 | kbd_macro_end = kbd_macro_ptr; | 148 | current_perdisplay->kbd_macro_end = current_perdisplay->kbd_macro_ptr; |
| 152 | } | 149 | } |
| 153 | 150 | ||
| 154 | DEFUN ("call-last-kbd-macro", Fcall_last_kbd_macro, Scall_last_kbd_macro, | 151 | DEFUN ("call-last-kbd-macro", Fcall_last_kbd_macro, Scall_last_kbd_macro, |
| @@ -162,7 +159,7 @@ defining others, use \\[name-last-kbd-macro].") | |||
| 162 | (prefix) | 159 | (prefix) |
| 163 | Lisp_Object prefix; | 160 | Lisp_Object prefix; |
| 164 | { | 161 | { |
| 165 | if (defining_kbd_macro) | 162 | if (! NILP (current_perdisplay->defining_kbd_macro)) |
| 166 | error ("Can't execute anonymous macro while defining one"); | 163 | error ("Can't execute anonymous macro while defining one"); |
| 167 | else if (NILP (Vlast_kbd_macro)) | 164 | else if (NILP (Vlast_kbd_macro)) |
| 168 | error ("No kbd macro has been defined"); | 165 | error ("No kbd macro has been defined"); |
| @@ -232,17 +229,11 @@ COUNT is a repeat count, or nil for once, or 0 for infinite loop.") | |||
| 232 | init_macros () | 229 | init_macros () |
| 233 | { | 230 | { |
| 234 | Vlast_kbd_macro = Qnil; | 231 | Vlast_kbd_macro = Qnil; |
| 235 | defining_kbd_macro = 0; | ||
| 236 | |||
| 237 | Vexecuting_macro = Qnil; | 232 | Vexecuting_macro = Qnil; |
| 238 | } | 233 | } |
| 239 | 234 | ||
| 240 | syms_of_macros () | 235 | syms_of_macros () |
| 241 | { | 236 | { |
| 242 | kbd_macro_bufsize = 100; | ||
| 243 | kbd_macro_buffer = (Lisp_Object *) malloc (kbd_macro_bufsize | ||
| 244 | * sizeof (Lisp_Object)); | ||
| 245 | |||
| 246 | Qexecute_kbd_macro = intern ("execute-kbd-macro"); | 237 | Qexecute_kbd_macro = intern ("execute-kbd-macro"); |
| 247 | staticpro (&Qexecute_kbd_macro); | 238 | staticpro (&Qexecute_kbd_macro); |
| 248 | 239 | ||
| @@ -251,7 +242,7 @@ syms_of_macros () | |||
| 251 | defsubr (&Scall_last_kbd_macro); | 242 | defsubr (&Scall_last_kbd_macro); |
| 252 | defsubr (&Sexecute_kbd_macro); | 243 | defsubr (&Sexecute_kbd_macro); |
| 253 | 244 | ||
| 254 | DEFVAR_BOOL ("defining-kbd-macro", &defining_kbd_macro, | 245 | DEFVAR_DISPLAY ("defining-kbd-macro", defining_kbd_macro, |
| 255 | "Non-nil while a keyboard macro is being defined. Don't set this!"); | 246 | "Non-nil while a keyboard macro is being defined. Don't set this!"); |
| 256 | 247 | ||
| 257 | DEFVAR_LISP ("executing-macro", &Vexecuting_macro, | 248 | DEFVAR_LISP ("executing-macro", &Vexecuting_macro, |