annotate src/macros.c @ 28285:c54d62415e91

Changed the type of parameter passed to the function defined by `quickurl-format-function'. Before only the text of the URL was passed. Now the whole URL structure is passed and the function is responsible for extracting the parts it requires. Changed the default of `quickurl-format-function' accordingly. (quickurl-insert): Changed the `funcall' of `quickurl-format-function' to match the above change. (quickurl-list-insert): Changed the `url' case so that it makes use of `quickurl-format-function', previous to this the format was hard wired.
author Gerd Moellmann <gerd@gnu.org>
date Thu, 23 Mar 2000 13:53:14 +0000
parents 66dfce1feb9c
children 43566b0aec59
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1 /* Keyboard macros.
2961
e94a593c3952 Updated copyright years.
Jim Blandy <jimb@redhat.com>
parents: 2015
diff changeset
2 Copyright (C) 1985, 1986, 1993 Free Software Foundation, Inc.
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4 This file is part of GNU Emacs.
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6 GNU Emacs is free software; you can redistribute it and/or modify
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7 it under the terms of the GNU General Public License as published by
647
529171c8b71c entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
8 the Free Software Foundation; either version 2, or (at your option)
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9 any later version.
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11 GNU Emacs is distributed in the hope that it will be useful,
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 GNU General Public License for more details.
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 along with GNU Emacs; see the file COPYING. If not, write to
14186
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 14100
diff changeset
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 14100
diff changeset
19 Boston, MA 02111-1307, USA. */
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
20
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
21
4696
1fc792473491 Include <config.h> instead of "config.h".
Roland McGrath <roland@gnu.org>
parents: 2961
diff changeset
22 #include <config.h>
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
23 #include "lisp.h"
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
24 #include "macros.h"
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
25 #include "commands.h"
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
26 #include "buffer.h"
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
27 #include "window.h"
11341
e0f3fa4e7bf3 Include keyboard.h.
Richard M. Stallman <rms@gnu.org>
parents: 11009
diff changeset
28 #include "keyboard.h"
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
29
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
30 Lisp_Object Qexecute_kbd_macro;
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
31
15968
231e14e38946 (executing_macro_iterations, executing_macro): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 15223
diff changeset
32 /* Kbd macro currently being executed (a string or vector). */
231e14e38946 (executing_macro_iterations, executing_macro): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 15223
diff changeset
33
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
34 Lisp_Object Vexecuting_macro;
15968
231e14e38946 (executing_macro_iterations, executing_macro): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 15223
diff changeset
35
231e14e38946 (executing_macro_iterations, executing_macro): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 15223
diff changeset
36 /* Index of next character to fetch from that macro. */
231e14e38946 (executing_macro_iterations, executing_macro): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 15223
diff changeset
37
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
38 int executing_macro_index;
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
39
15968
231e14e38946 (executing_macro_iterations, executing_macro): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 15223
diff changeset
40 /* Number of successful iterations so far
231e14e38946 (executing_macro_iterations, executing_macro): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 15223
diff changeset
41 for innermost keyboard macro.
231e14e38946 (executing_macro_iterations, executing_macro): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 15223
diff changeset
42 This is not bound at each level,
231e14e38946 (executing_macro_iterations, executing_macro): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 15223
diff changeset
43 so after an error, it describes the innermost interrupted macro. */
231e14e38946 (executing_macro_iterations, executing_macro): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 15223
diff changeset
44
231e14e38946 (executing_macro_iterations, executing_macro): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 15223
diff changeset
45 int executing_macro_iterations;
231e14e38946 (executing_macro_iterations, executing_macro): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 15223
diff changeset
46
231e14e38946 (executing_macro_iterations, executing_macro): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 15223
diff changeset
47 /* This is the macro that was executing.
231e14e38946 (executing_macro_iterations, executing_macro): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 15223
diff changeset
48 This is not bound at each level,
231e14e38946 (executing_macro_iterations, executing_macro): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 15223
diff changeset
49 so after an error, it describes the innermost interrupted macro.
231e14e38946 (executing_macro_iterations, executing_macro): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 15223
diff changeset
50 We use it only as a kind of flag, so no need to protect it. */
231e14e38946 (executing_macro_iterations, executing_macro): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 15223
diff changeset
51
231e14e38946 (executing_macro_iterations, executing_macro): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 15223
diff changeset
52 Lisp_Object executing_macro;
231e14e38946 (executing_macro_iterations, executing_macro): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 15223
diff changeset
53
23434
1dd05eb0443d (Fexecute_kbd_macro): Set real_this_command.
Richard M. Stallman <rms@gnu.org>
parents: 22968
diff changeset
54 extern Lisp_Object real_this_command;
1dd05eb0443d (Fexecute_kbd_macro): Set real_this_command.
Richard M. Stallman <rms@gnu.org>
parents: 22968
diff changeset
55
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
56 Lisp_Object Fexecute_kbd_macro ();
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
57
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
58 DEFUN ("start-kbd-macro", Fstart_kbd_macro, Sstart_kbd_macro, 1, 1, "P",
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
59 "Record subsequent keyboard input, defining a keyboard macro.\n\
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
60 The commands are recorded even as they are executed.\n\
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
61 Use \\[end-kbd-macro] to finish recording and make the macro available.\n\
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
62 Use \\[name-last-kbd-macro] to give it a permanent name.\n\
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
63 Non-nil arg (prefix arg) means append to last macro defined;\n\
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
64 This begins by re-executing that macro as if you typed it again.")
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
65 (append)
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
66 Lisp_Object append;
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
67 {
11009
399469e5eb5b Rename perdisplay to kboard.
Karl Heuer <kwzh@gnu.org>
parents: 10992
diff changeset
68 if (!NILP (current_kboard->defining_kbd_macro))
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
69 error ("Already defining kbd macro");
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
70
11009
399469e5eb5b Rename perdisplay to kboard.
Karl Heuer <kwzh@gnu.org>
parents: 10992
diff changeset
71 if (!current_kboard->kbd_macro_buffer)
10910
b0edc245c9b7 (defining_kbd_macro): Delete; now part of perdisplay. All uses changed.
Karl Heuer <kwzh@gnu.org>
parents: 10856
diff changeset
72 {
11009
399469e5eb5b Rename perdisplay to kboard.
Karl Heuer <kwzh@gnu.org>
parents: 10992
diff changeset
73 current_kboard->kbd_macro_bufsize = 30;
399469e5eb5b Rename perdisplay to kboard.
Karl Heuer <kwzh@gnu.org>
parents: 10992
diff changeset
74 current_kboard->kbd_macro_buffer
14301
621f53083d60 * macros.c (Fstart_kbd_macro): Use xmalloc.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
75 = (Lisp_Object *)xmalloc (30 * sizeof (Lisp_Object));
10910
b0edc245c9b7 (defining_kbd_macro): Delete; now part of perdisplay. All uses changed.
Karl Heuer <kwzh@gnu.org>
parents: 10856
diff changeset
76 }
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
77 update_mode_lines++;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 434
diff changeset
78 if (NILP (append))
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
79 {
14301
621f53083d60 * macros.c (Fstart_kbd_macro): Use xmalloc.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
80 if (current_kboard->kbd_macro_bufsize > 200)
621f53083d60 * macros.c (Fstart_kbd_macro): Use xmalloc.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
81 {
621f53083d60 * macros.c (Fstart_kbd_macro): Use xmalloc.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
82 current_kboard->kbd_macro_bufsize = 30;
621f53083d60 * macros.c (Fstart_kbd_macro): Use xmalloc.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
83 current_kboard->kbd_macro_buffer
15223
be1bc5b3f14e (Fstart_kbd_macro): Add missing xrealloc arg.
Karl Heuer <kwzh@gnu.org>
parents: 14301
diff changeset
84 = (Lisp_Object *)xrealloc (current_kboard->kbd_macro_buffer,
be1bc5b3f14e (Fstart_kbd_macro): Add missing xrealloc arg.
Karl Heuer <kwzh@gnu.org>
parents: 14301
diff changeset
85 30 * sizeof (Lisp_Object));
14301
621f53083d60 * macros.c (Fstart_kbd_macro): Use xmalloc.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
86 }
11009
399469e5eb5b Rename perdisplay to kboard.
Karl Heuer <kwzh@gnu.org>
parents: 10992
diff changeset
87 current_kboard->kbd_macro_ptr = current_kboard->kbd_macro_buffer;
399469e5eb5b Rename perdisplay to kboard.
Karl Heuer <kwzh@gnu.org>
parents: 10992
diff changeset
88 current_kboard->kbd_macro_end = current_kboard->kbd_macro_buffer;
14301
621f53083d60 * macros.c (Fstart_kbd_macro): Use xmalloc.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
89 message ("Defining kbd macro...");
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
90 }
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
91 else
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
92 {
26825
66dfce1feb9c (Fstart_kbd_macro): Handle case where last-kbd-macro
Richard M. Stallman <rms@gnu.org>
parents: 24530
diff changeset
93 int i, len;
66dfce1feb9c (Fstart_kbd_macro): Handle case where last-kbd-macro
Richard M. Stallman <rms@gnu.org>
parents: 24530
diff changeset
94
66dfce1feb9c (Fstart_kbd_macro): Handle case where last-kbd-macro
Richard M. Stallman <rms@gnu.org>
parents: 24530
diff changeset
95 /* Check the type of last-kbd-macro in case Lisp code changed it. */
66dfce1feb9c (Fstart_kbd_macro): Handle case where last-kbd-macro
Richard M. Stallman <rms@gnu.org>
parents: 24530
diff changeset
96 if (!STRINGP (current_kboard->Vlast_kbd_macro)
66dfce1feb9c (Fstart_kbd_macro): Handle case where last-kbd-macro
Richard M. Stallman <rms@gnu.org>
parents: 24530
diff changeset
97 && !VECTORP (current_kboard->Vlast_kbd_macro))
66dfce1feb9c (Fstart_kbd_macro): Handle case where last-kbd-macro
Richard M. Stallman <rms@gnu.org>
parents: 24530
diff changeset
98 current_kboard->Vlast_kbd_macro
66dfce1feb9c (Fstart_kbd_macro): Handle case where last-kbd-macro
Richard M. Stallman <rms@gnu.org>
parents: 24530
diff changeset
99 = wrong_type_argument (Qarrayp, current_kboard->Vlast_kbd_macro);
66dfce1feb9c (Fstart_kbd_macro): Handle case where last-kbd-macro
Richard M. Stallman <rms@gnu.org>
parents: 24530
diff changeset
100
66dfce1feb9c (Fstart_kbd_macro): Handle case where last-kbd-macro
Richard M. Stallman <rms@gnu.org>
parents: 24530
diff changeset
101 len = XINT (Flength (current_kboard->Vlast_kbd_macro));
66dfce1feb9c (Fstart_kbd_macro): Handle case where last-kbd-macro
Richard M. Stallman <rms@gnu.org>
parents: 24530
diff changeset
102
66dfce1feb9c (Fstart_kbd_macro): Handle case where last-kbd-macro
Richard M. Stallman <rms@gnu.org>
parents: 24530
diff changeset
103 /* Copy last-kbd-macro into the buffer, in case the Lisp code
66dfce1feb9c (Fstart_kbd_macro): Handle case where last-kbd-macro
Richard M. Stallman <rms@gnu.org>
parents: 24530
diff changeset
104 has put another macro there. */
66dfce1feb9c (Fstart_kbd_macro): Handle case where last-kbd-macro
Richard M. Stallman <rms@gnu.org>
parents: 24530
diff changeset
105 if (current_kboard->kbd_macro_bufsize < len + 30)
66dfce1feb9c (Fstart_kbd_macro): Handle case where last-kbd-macro
Richard M. Stallman <rms@gnu.org>
parents: 24530
diff changeset
106 {
66dfce1feb9c (Fstart_kbd_macro): Handle case where last-kbd-macro
Richard M. Stallman <rms@gnu.org>
parents: 24530
diff changeset
107 current_kboard->kbd_macro_bufsize = len + 30;
66dfce1feb9c (Fstart_kbd_macro): Handle case where last-kbd-macro
Richard M. Stallman <rms@gnu.org>
parents: 24530
diff changeset
108 current_kboard->kbd_macro_buffer
66dfce1feb9c (Fstart_kbd_macro): Handle case where last-kbd-macro
Richard M. Stallman <rms@gnu.org>
parents: 24530
diff changeset
109 = (Lisp_Object *)xrealloc (current_kboard->kbd_macro_buffer,
66dfce1feb9c (Fstart_kbd_macro): Handle case where last-kbd-macro
Richard M. Stallman <rms@gnu.org>
parents: 24530
diff changeset
110 (len + 30) * sizeof (Lisp_Object));
66dfce1feb9c (Fstart_kbd_macro): Handle case where last-kbd-macro
Richard M. Stallman <rms@gnu.org>
parents: 24530
diff changeset
111 }
66dfce1feb9c (Fstart_kbd_macro): Handle case where last-kbd-macro
Richard M. Stallman <rms@gnu.org>
parents: 24530
diff changeset
112 for (i = 0; i < len; i++)
66dfce1feb9c (Fstart_kbd_macro): Handle case where last-kbd-macro
Richard M. Stallman <rms@gnu.org>
parents: 24530
diff changeset
113 current_kboard->kbd_macro_buffer[i]
66dfce1feb9c (Fstart_kbd_macro): Handle case where last-kbd-macro
Richard M. Stallman <rms@gnu.org>
parents: 24530
diff changeset
114 = Faref (current_kboard->Vlast_kbd_macro, make_number (i));
66dfce1feb9c (Fstart_kbd_macro): Handle case where last-kbd-macro
Richard M. Stallman <rms@gnu.org>
parents: 24530
diff changeset
115
66dfce1feb9c (Fstart_kbd_macro): Handle case where last-kbd-macro
Richard M. Stallman <rms@gnu.org>
parents: 24530
diff changeset
116 current_kboard->kbd_macro_ptr = current_kboard->kbd_macro_buffer + len;
66dfce1feb9c (Fstart_kbd_macro): Handle case where last-kbd-macro
Richard M. Stallman <rms@gnu.org>
parents: 24530
diff changeset
117 current_kboard->kbd_macro_end = current_kboard->kbd_macro_ptr;
66dfce1feb9c (Fstart_kbd_macro): Handle case where last-kbd-macro
Richard M. Stallman <rms@gnu.org>
parents: 24530
diff changeset
118
66dfce1feb9c (Fstart_kbd_macro): Handle case where last-kbd-macro
Richard M. Stallman <rms@gnu.org>
parents: 24530
diff changeset
119 /* Re-execute the macro we are appending to,
66dfce1feb9c (Fstart_kbd_macro): Handle case where last-kbd-macro
Richard M. Stallman <rms@gnu.org>
parents: 24530
diff changeset
120 for consistency of behavior. */
11009
399469e5eb5b Rename perdisplay to kboard.
Karl Heuer <kwzh@gnu.org>
parents: 10992
diff changeset
121 Fexecute_kbd_macro (current_kboard->Vlast_kbd_macro,
10935
73b02c08f17d (Fstart_kbd_macro): Access Vlast_kbd_macro via perdisplay.
Karl Heuer <kwzh@gnu.org>
parents: 10910
diff changeset
122 make_number (1));
26825
66dfce1feb9c (Fstart_kbd_macro): Handle case where last-kbd-macro
Richard M. Stallman <rms@gnu.org>
parents: 24530
diff changeset
123
66dfce1feb9c (Fstart_kbd_macro): Handle case where last-kbd-macro
Richard M. Stallman <rms@gnu.org>
parents: 24530
diff changeset
124 message ("Appending to kbd macro...");
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
125 }
11009
399469e5eb5b Rename perdisplay to kboard.
Karl Heuer <kwzh@gnu.org>
parents: 10992
diff changeset
126 current_kboard->defining_kbd_macro = Qt;
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
127
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
128 return Qnil;
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
129 }
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
130
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
131 DEFUN ("end-kbd-macro", Fend_kbd_macro, Send_kbd_macro, 0, 1, "p",
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
132 "Finish defining a keyboard macro.\n\
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
133 The definition was started by \\[start-kbd-macro].\n\
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
134 The macro is now available for use via \\[call-last-kbd-macro],\n\
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
135 or it can be given a name with \\[name-last-kbd-macro] and then invoked\n\
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
136 under that name.\n\
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
137 \n\
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
138 With numeric arg, repeat macro now that many times,\n\
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
139 counting the definition just completed as the first repetition.\n\
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
140 An argument of zero means repeat until error.")
14081
addc50fc3981 (Fend_kbd_macro, Fexecute_kbd_macro): Harmonize arguments with
Erik Naggum <erik@naggum.no>
parents: 13773
diff changeset
141 (repeat)
addc50fc3981 (Fend_kbd_macro, Fexecute_kbd_macro): Harmonize arguments with
Erik Naggum <erik@naggum.no>
parents: 13773
diff changeset
142 Lisp_Object repeat;
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
143 {
11009
399469e5eb5b Rename perdisplay to kboard.
Karl Heuer <kwzh@gnu.org>
parents: 10992
diff changeset
144 if (NILP (current_kboard->defining_kbd_macro))
22915
ef9dd93e3077 (Fexecute_kbd_macro): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents: 20299
diff changeset
145 error ("Not defining kbd macro");
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
146
14081
addc50fc3981 (Fend_kbd_macro, Fexecute_kbd_macro): Harmonize arguments with
Erik Naggum <erik@naggum.no>
parents: 13773
diff changeset
147 if (NILP (repeat))
addc50fc3981 (Fend_kbd_macro, Fexecute_kbd_macro): Harmonize arguments with
Erik Naggum <erik@naggum.no>
parents: 13773
diff changeset
148 XSETFASTINT (repeat, 1);
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
149 else
14081
addc50fc3981 (Fend_kbd_macro, Fexecute_kbd_macro): Harmonize arguments with
Erik Naggum <erik@naggum.no>
parents: 13773
diff changeset
150 CHECK_NUMBER (repeat, 0);
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
151
11009
399469e5eb5b Rename perdisplay to kboard.
Karl Heuer <kwzh@gnu.org>
parents: 10992
diff changeset
152 if (!NILP (current_kboard->defining_kbd_macro))
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
153 {
11009
399469e5eb5b Rename perdisplay to kboard.
Karl Heuer <kwzh@gnu.org>
parents: 10992
diff changeset
154 current_kboard->defining_kbd_macro = Qnil;
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
155 update_mode_lines++;
11009
399469e5eb5b Rename perdisplay to kboard.
Karl Heuer <kwzh@gnu.org>
parents: 10992
diff changeset
156 current_kboard->Vlast_kbd_macro
399469e5eb5b Rename perdisplay to kboard.
Karl Heuer <kwzh@gnu.org>
parents: 10992
diff changeset
157 = make_event_array ((current_kboard->kbd_macro_end
399469e5eb5b Rename perdisplay to kboard.
Karl Heuer <kwzh@gnu.org>
parents: 10992
diff changeset
158 - current_kboard->kbd_macro_buffer),
399469e5eb5b Rename perdisplay to kboard.
Karl Heuer <kwzh@gnu.org>
parents: 10992
diff changeset
159 current_kboard->kbd_macro_buffer);
14301
621f53083d60 * macros.c (Fstart_kbd_macro): Use xmalloc.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
160 message ("Keyboard macro defined");
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
161 }
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
162
14081
addc50fc3981 (Fend_kbd_macro, Fexecute_kbd_macro): Harmonize arguments with
Erik Naggum <erik@naggum.no>
parents: 13773
diff changeset
163 if (XFASTINT (repeat) == 0)
addc50fc3981 (Fend_kbd_macro, Fexecute_kbd_macro): Harmonize arguments with
Erik Naggum <erik@naggum.no>
parents: 13773
diff changeset
164 Fexecute_kbd_macro (current_kboard->Vlast_kbd_macro, repeat);
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
165 else
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
166 {
14081
addc50fc3981 (Fend_kbd_macro, Fexecute_kbd_macro): Harmonize arguments with
Erik Naggum <erik@naggum.no>
parents: 13773
diff changeset
167 XSETINT (repeat, XINT (repeat)-1);
addc50fc3981 (Fend_kbd_macro, Fexecute_kbd_macro): Harmonize arguments with
Erik Naggum <erik@naggum.no>
parents: 13773
diff changeset
168 if (XINT (repeat) > 0)
addc50fc3981 (Fend_kbd_macro, Fexecute_kbd_macro): Harmonize arguments with
Erik Naggum <erik@naggum.no>
parents: 13773
diff changeset
169 Fexecute_kbd_macro (current_kboard->Vlast_kbd_macro, repeat);
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
170 }
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
171 return Qnil;
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
172 }
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
173
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
174 /* Store character c into kbd macro being defined */
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
175
20299
608c1a9aefc8 (store_kbd_macro_char): Define as returning nothing.
Andreas Schwab <schwab@suse.de>
parents: 16562
diff changeset
176 void
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
177 store_kbd_macro_char (c)
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
178 Lisp_Object c;
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
179 {
11009
399469e5eb5b Rename perdisplay to kboard.
Karl Heuer <kwzh@gnu.org>
parents: 10992
diff changeset
180 if (!NILP (current_kboard->defining_kbd_macro))
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
181 {
11009
399469e5eb5b Rename perdisplay to kboard.
Karl Heuer <kwzh@gnu.org>
parents: 10992
diff changeset
182 if ((current_kboard->kbd_macro_ptr
399469e5eb5b Rename perdisplay to kboard.
Karl Heuer <kwzh@gnu.org>
parents: 10992
diff changeset
183 - current_kboard->kbd_macro_buffer)
399469e5eb5b Rename perdisplay to kboard.
Karl Heuer <kwzh@gnu.org>
parents: 10992
diff changeset
184 == current_kboard->kbd_macro_bufsize)
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
185 {
10910
b0edc245c9b7 (defining_kbd_macro): Delete; now part of perdisplay. All uses changed.
Karl Heuer <kwzh@gnu.org>
parents: 10856
diff changeset
186 register Lisp_Object *new;
11009
399469e5eb5b Rename perdisplay to kboard.
Karl Heuer <kwzh@gnu.org>
parents: 10992
diff changeset
187 current_kboard->kbd_macro_bufsize *= 2;
399469e5eb5b Rename perdisplay to kboard.
Karl Heuer <kwzh@gnu.org>
parents: 10992
diff changeset
188 new = (Lisp_Object *)xrealloc (current_kboard->kbd_macro_buffer,
399469e5eb5b Rename perdisplay to kboard.
Karl Heuer <kwzh@gnu.org>
parents: 10992
diff changeset
189 (current_kboard->kbd_macro_bufsize
10910
b0edc245c9b7 (defining_kbd_macro): Delete; now part of perdisplay. All uses changed.
Karl Heuer <kwzh@gnu.org>
parents: 10856
diff changeset
190 * sizeof (Lisp_Object)));
11009
399469e5eb5b Rename perdisplay to kboard.
Karl Heuer <kwzh@gnu.org>
parents: 10992
diff changeset
191 current_kboard->kbd_macro_ptr
399469e5eb5b Rename perdisplay to kboard.
Karl Heuer <kwzh@gnu.org>
parents: 10992
diff changeset
192 += new - current_kboard->kbd_macro_buffer;
399469e5eb5b Rename perdisplay to kboard.
Karl Heuer <kwzh@gnu.org>
parents: 10992
diff changeset
193 current_kboard->kbd_macro_end
399469e5eb5b Rename perdisplay to kboard.
Karl Heuer <kwzh@gnu.org>
parents: 10992
diff changeset
194 += new - current_kboard->kbd_macro_buffer;
399469e5eb5b Rename perdisplay to kboard.
Karl Heuer <kwzh@gnu.org>
parents: 10992
diff changeset
195 current_kboard->kbd_macro_buffer = new;
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
196 }
11009
399469e5eb5b Rename perdisplay to kboard.
Karl Heuer <kwzh@gnu.org>
parents: 10992
diff changeset
197 *current_kboard->kbd_macro_ptr++ = c;
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
198 }
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
199 }
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
200
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
201 /* Declare that all chars stored so far in the kbd macro being defined
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
202 really belong to it. This is done in between editor commands. */
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
203
20299
608c1a9aefc8 (store_kbd_macro_char): Define as returning nothing.
Andreas Schwab <schwab@suse.de>
parents: 16562
diff changeset
204 void
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
205 finalize_kbd_macro_chars ()
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
206 {
11009
399469e5eb5b Rename perdisplay to kboard.
Karl Heuer <kwzh@gnu.org>
parents: 10992
diff changeset
207 current_kboard->kbd_macro_end = current_kboard->kbd_macro_ptr;
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
208 }
12845
9ee2045cda62 (Fcancel_kbd_macro_events): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12119
diff changeset
209
9ee2045cda62 (Fcancel_kbd_macro_events): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12119
diff changeset
210 DEFUN ("cancel-kbd-macro-events", Fcancel_kbd_macro_events,
9ee2045cda62 (Fcancel_kbd_macro_events): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12119
diff changeset
211 Scancel_kbd_macro_events, 0, 0, 0,
9ee2045cda62 (Fcancel_kbd_macro_events): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12119
diff changeset
212 "Cancel the events added to a keyboard macro for this command.")
9ee2045cda62 (Fcancel_kbd_macro_events): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12119
diff changeset
213 ()
9ee2045cda62 (Fcancel_kbd_macro_events): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12119
diff changeset
214 {
9ee2045cda62 (Fcancel_kbd_macro_events): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12119
diff changeset
215 current_kboard->kbd_macro_ptr = current_kboard->kbd_macro_end;
9ee2045cda62 (Fcancel_kbd_macro_events): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12119
diff changeset
216 }
13773
7d50ac085b12 (Fstore_kbd_macro_event): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12845
diff changeset
217
7d50ac085b12 (Fstore_kbd_macro_event): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12845
diff changeset
218 DEFUN ("store-kbd-macro-event", Fstore_kbd_macro_event,
7d50ac085b12 (Fstore_kbd_macro_event): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12845
diff changeset
219 Sstore_kbd_macro_event, 1, 1, 0,
7d50ac085b12 (Fstore_kbd_macro_event): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12845
diff changeset
220 "Store EVENT into the keyboard macro being defined.")
7d50ac085b12 (Fstore_kbd_macro_event): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12845
diff changeset
221 (event)
7d50ac085b12 (Fstore_kbd_macro_event): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12845
diff changeset
222 Lisp_Object event;
7d50ac085b12 (Fstore_kbd_macro_event): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12845
diff changeset
223 {
7d50ac085b12 (Fstore_kbd_macro_event): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12845
diff changeset
224 store_kbd_macro_char (event);
7d50ac085b12 (Fstore_kbd_macro_event): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12845
diff changeset
225 return Qnil;
7d50ac085b12 (Fstore_kbd_macro_event): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12845
diff changeset
226 }
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
227
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
228 DEFUN ("call-last-kbd-macro", Fcall_last_kbd_macro, Scall_last_kbd_macro,
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
229 0, 1, "p",
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
230 "Call the last keyboard macro that you defined with \\[start-kbd-macro].\n\
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
231 \n\
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
232 A prefix argument serves as a repeat count. Zero means repeat until error.\n\
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
233 \n\
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
234 To make a macro permanent so you can call it even after\n\
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
235 defining others, use \\[name-last-kbd-macro].")
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
236 (prefix)
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
237 Lisp_Object prefix;
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
238 {
16562
4999fc12564e (Fcall_last_kbd_macro): Set this_command from last_command
Richard M. Stallman <rms@gnu.org>
parents: 15976
diff changeset
239 /* Don't interfere with recognition of the previous command
4999fc12564e (Fcall_last_kbd_macro): Set this_command from last_command
Richard M. Stallman <rms@gnu.org>
parents: 15976
diff changeset
240 from before this macro started. */
22968
edcf24874ef5 (Fcall_last_kbd_macro): this_command renamed to Vthis_command.
Richard M. Stallman <rms@gnu.org>
parents: 22915
diff changeset
241 Vthis_command = current_kboard->Vlast_command;
24530
14cc75ebfd7b (Fexecute_kbd_macro): Save real_this_command.
Karl Heuer <kwzh@gnu.org>
parents: 24482
diff changeset
242 /* C-x z after the macro should repeat the macro. */
14cc75ebfd7b (Fexecute_kbd_macro): Save real_this_command.
Karl Heuer <kwzh@gnu.org>
parents: 24482
diff changeset
243 real_this_command = current_kboard->Vlast_kbd_macro;
16562
4999fc12564e (Fcall_last_kbd_macro): Set this_command from last_command
Richard M. Stallman <rms@gnu.org>
parents: 15976
diff changeset
244
11009
399469e5eb5b Rename perdisplay to kboard.
Karl Heuer <kwzh@gnu.org>
parents: 10992
diff changeset
245 if (! NILP (current_kboard->defining_kbd_macro))
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
246 error ("Can't execute anonymous macro while defining one");
11009
399469e5eb5b Rename perdisplay to kboard.
Karl Heuer <kwzh@gnu.org>
parents: 10992
diff changeset
247 else if (NILP (current_kboard->Vlast_kbd_macro))
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
248 error ("No kbd macro has been defined");
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
249 else
11009
399469e5eb5b Rename perdisplay to kboard.
Karl Heuer <kwzh@gnu.org>
parents: 10992
diff changeset
250 Fexecute_kbd_macro (current_kboard->Vlast_kbd_macro, prefix);
16562
4999fc12564e (Fcall_last_kbd_macro): Set this_command from last_command
Richard M. Stallman <rms@gnu.org>
parents: 15976
diff changeset
251
4999fc12564e (Fcall_last_kbd_macro): Set this_command from last_command
Richard M. Stallman <rms@gnu.org>
parents: 15976
diff changeset
252 /* command_loop_1 sets this to nil before it returns;
4999fc12564e (Fcall_last_kbd_macro): Set this_command from last_command
Richard M. Stallman <rms@gnu.org>
parents: 15976
diff changeset
253 get back the last command within the macro
4999fc12564e (Fcall_last_kbd_macro): Set this_command from last_command
Richard M. Stallman <rms@gnu.org>
parents: 15976
diff changeset
254 so that it can be last, again, after we return. */
22968
edcf24874ef5 (Fcall_last_kbd_macro): this_command renamed to Vthis_command.
Richard M. Stallman <rms@gnu.org>
parents: 22915
diff changeset
255 Vthis_command = current_kboard->Vlast_command;
16562
4999fc12564e (Fcall_last_kbd_macro): Set this_command from last_command
Richard M. Stallman <rms@gnu.org>
parents: 15976
diff changeset
256
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
257 return Qnil;
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
258 }
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
259
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
260 /* Restore Vexecuting_macro and executing_macro_index - called when
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
261 the unwind-protect in Fexecute_kbd_macro gets invoked. */
15968
231e14e38946 (executing_macro_iterations, executing_macro): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 15223
diff changeset
262
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
263 static Lisp_Object
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
264 pop_kbd_macro (info)
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
265 Lisp_Object info;
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
266 {
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
267 Lisp_Object tem;
24530
14cc75ebfd7b (Fexecute_kbd_macro): Save real_this_command.
Karl Heuer <kwzh@gnu.org>
parents: 24482
diff changeset
268 Vexecuting_macro = XCAR (info);
14cc75ebfd7b (Fexecute_kbd_macro): Save real_this_command.
Karl Heuer <kwzh@gnu.org>
parents: 24482
diff changeset
269 tem = XCDR (info);
14cc75ebfd7b (Fexecute_kbd_macro): Save real_this_command.
Karl Heuer <kwzh@gnu.org>
parents: 24482
diff changeset
270 executing_macro_index = XINT (XCAR (tem));
14cc75ebfd7b (Fexecute_kbd_macro): Save real_this_command.
Karl Heuer <kwzh@gnu.org>
parents: 24482
diff changeset
271 real_this_command = XCDR (tem);
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
272 return Qnil;
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
273 }
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
274
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
275 DEFUN ("execute-kbd-macro", Fexecute_kbd_macro, Sexecute_kbd_macro, 1, 2, 0,
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
276 "Execute MACRO as string of editor command characters.\n\
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
277 If MACRO is a symbol, its function definition is used.\n\
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
278 COUNT is a repeat count, or nil for once, or 0 for infinite loop.")
14081
addc50fc3981 (Fend_kbd_macro, Fexecute_kbd_macro): Harmonize arguments with
Erik Naggum <erik@naggum.no>
parents: 13773
diff changeset
279 (macro, count)
addc50fc3981 (Fend_kbd_macro, Fexecute_kbd_macro): Harmonize arguments with
Erik Naggum <erik@naggum.no>
parents: 13773
diff changeset
280 Lisp_Object macro, count;
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
281 {
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
282 Lisp_Object final;
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
283 Lisp_Object tem;
14094
e5e4fe8e968f (Fexecute_kbd_macro): Local var `pdlcount' renamed from
Karl Heuer <kwzh@gnu.org>
parents: 14081
diff changeset
284 int pdlcount = specpdl_ptr - specpdl;
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
285 int repeat = 1;
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
286 struct gcpro gcpro1;
15968
231e14e38946 (executing_macro_iterations, executing_macro): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 15223
diff changeset
287 int success_count = 0;
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
288
24482
9b722e922325 (Fexecute_kbd_macro): Initialize executing_macro_iterations at beginning.
Karl Heuer <kwzh@gnu.org>
parents: 23434
diff changeset
289 executing_macro_iterations = 0;
9b722e922325 (Fexecute_kbd_macro): Initialize executing_macro_iterations at beginning.
Karl Heuer <kwzh@gnu.org>
parents: 23434
diff changeset
290
14100
0950fefc4bd1 (Fexecute_kbd_macro): Reindent properly.
Erik Naggum <erik@naggum.no>
parents: 14094
diff changeset
291 if (!NILP (count))
0950fefc4bd1 (Fexecute_kbd_macro): Reindent properly.
Erik Naggum <erik@naggum.no>
parents: 14094
diff changeset
292 {
0950fefc4bd1 (Fexecute_kbd_macro): Reindent properly.
Erik Naggum <erik@naggum.no>
parents: 14094
diff changeset
293 count = Fprefix_numeric_value (count);
0950fefc4bd1 (Fexecute_kbd_macro): Reindent properly.
Erik Naggum <erik@naggum.no>
parents: 14094
diff changeset
294 repeat = XINT (count);
0950fefc4bd1 (Fexecute_kbd_macro): Reindent properly.
Erik Naggum <erik@naggum.no>
parents: 14094
diff changeset
295 }
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
296
647
529171c8b71c entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
297 final = indirect_function (macro);
9122
9ba3f17d6631 (Fexecute_kbd_macro): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 4696
diff changeset
298 if (!STRINGP (final) && !VECTORP (final))
22915
ef9dd93e3077 (Fexecute_kbd_macro): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents: 20299
diff changeset
299 error ("Keyboard macros must be strings or vectors");
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
300
24530
14cc75ebfd7b (Fexecute_kbd_macro): Save real_this_command.
Karl Heuer <kwzh@gnu.org>
parents: 24482
diff changeset
301 tem = Fcons (Vexecuting_macro,
14cc75ebfd7b (Fexecute_kbd_macro): Save real_this_command.
Karl Heuer <kwzh@gnu.org>
parents: 24482
diff changeset
302 Fcons (make_number (executing_macro_index),
14cc75ebfd7b (Fexecute_kbd_macro): Save real_this_command.
Karl Heuer <kwzh@gnu.org>
parents: 24482
diff changeset
303 real_this_command));
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
304 record_unwind_protect (pop_kbd_macro, tem);
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
305
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
306 GCPRO1 (final);
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
307 do
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
308 {
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
309 Vexecuting_macro = final;
15968
231e14e38946 (executing_macro_iterations, executing_macro): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 15223
diff changeset
310 executing_macro = final;
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
311 executing_macro_index = 0;
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
312
12119
d7b51659a56d (Fexecute_kbd_macro): Vprefix_arg is now part of kboard.
Karl Heuer <kwzh@gnu.org>
parents: 11341
diff changeset
313 current_kboard->Vprefix_arg = Qnil;
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
314 command_loop_1 ();
1682
af0995b9b142 * macros.c (Fend_kbd_macro): Don't use XFASTINT to check if arg is
Jim Blandy <jimb@redhat.com>
parents: 647
diff changeset
315
15968
231e14e38946 (executing_macro_iterations, executing_macro): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 15223
diff changeset
316 executing_macro_iterations = ++success_count;
231e14e38946 (executing_macro_iterations, executing_macro): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 15223
diff changeset
317
1682
af0995b9b142 * macros.c (Fend_kbd_macro): Don't use XFASTINT to check if arg is
Jim Blandy <jimb@redhat.com>
parents: 647
diff changeset
318 QUIT;
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
319 }
9122
9ba3f17d6631 (Fexecute_kbd_macro): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 4696
diff changeset
320 while (--repeat
9ba3f17d6631 (Fexecute_kbd_macro): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 4696
diff changeset
321 && (STRINGP (Vexecuting_macro) || VECTORP (Vexecuting_macro)));
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
322
15968
231e14e38946 (executing_macro_iterations, executing_macro): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 15223
diff changeset
323 executing_macro = Qnil;
231e14e38946 (executing_macro_iterations, executing_macro): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 15223
diff changeset
324
23434
1dd05eb0443d (Fexecute_kbd_macro): Set real_this_command.
Richard M. Stallman <rms@gnu.org>
parents: 22968
diff changeset
325 real_this_command = Vexecuting_macro;
1dd05eb0443d (Fexecute_kbd_macro): Set real_this_command.
Richard M. Stallman <rms@gnu.org>
parents: 22968
diff changeset
326
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
327 UNGCPRO;
14094
e5e4fe8e968f (Fexecute_kbd_macro): Local var `pdlcount' renamed from
Karl Heuer <kwzh@gnu.org>
parents: 14081
diff changeset
328 return unbind_to (pdlcount, Qnil);
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
329 }
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
330
20299
608c1a9aefc8 (store_kbd_macro_char): Define as returning nothing.
Andreas Schwab <schwab@suse.de>
parents: 16562
diff changeset
331 void
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
332 init_macros ()
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
333 {
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
334 Vexecuting_macro = Qnil;
15976
e6d654e1fa2a (init_macros): Initialize executing_macro, too.
Erik Naggum <erik@naggum.no>
parents: 15968
diff changeset
335 executing_macro = Qnil;
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
336 }
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
337
20299
608c1a9aefc8 (store_kbd_macro_char): Define as returning nothing.
Andreas Schwab <schwab@suse.de>
parents: 16562
diff changeset
338 void
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
339 syms_of_macros ()
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
340 {
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
341 Qexecute_kbd_macro = intern ("execute-kbd-macro");
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
342 staticpro (&Qexecute_kbd_macro);
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
343
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
344 defsubr (&Sstart_kbd_macro);
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
345 defsubr (&Send_kbd_macro);
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
346 defsubr (&Scall_last_kbd_macro);
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
347 defsubr (&Sexecute_kbd_macro);
12845
9ee2045cda62 (Fcancel_kbd_macro_events): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12119
diff changeset
348 defsubr (&Scancel_kbd_macro_events);
13773
7d50ac085b12 (Fstore_kbd_macro_event): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12845
diff changeset
349 defsubr (&Sstore_kbd_macro_event);
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
350
11009
399469e5eb5b Rename perdisplay to kboard.
Karl Heuer <kwzh@gnu.org>
parents: 10992
diff changeset
351 DEFVAR_KBOARD ("defining-kbd-macro", defining_kbd_macro,
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
352 "Non-nil while a keyboard macro is being defined. Don't set this!");
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
353
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
354 DEFVAR_LISP ("executing-macro", &Vexecuting_macro,
10935
73b02c08f17d (Fstart_kbd_macro): Access Vlast_kbd_macro via perdisplay.
Karl Heuer <kwzh@gnu.org>
parents: 10910
diff changeset
355 "Currently executing keyboard macro (string or vector); nil if none executing.");
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
356
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
357 DEFVAR_LISP_NOPRO ("executing-kbd-macro", &Vexecuting_macro,
10935
73b02c08f17d (Fstart_kbd_macro): Access Vlast_kbd_macro via perdisplay.
Karl Heuer <kwzh@gnu.org>
parents: 10910
diff changeset
358 "Currently executing keyboard macro (string or vector); nil if none executing.");
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
359
11009
399469e5eb5b Rename perdisplay to kboard.
Karl Heuer <kwzh@gnu.org>
parents: 10992
diff changeset
360 DEFVAR_KBOARD ("last-kbd-macro", Vlast_kbd_macro,
10935
73b02c08f17d (Fstart_kbd_macro): Access Vlast_kbd_macro via perdisplay.
Karl Heuer <kwzh@gnu.org>
parents: 10910
diff changeset
361 "Last kbd macro defined, as a string or vector; nil if none defined.");
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
362 }
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
363
20299
608c1a9aefc8 (store_kbd_macro_char): Define as returning nothing.
Andreas Schwab <schwab@suse.de>
parents: 16562
diff changeset
364 void
246
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
365 keys_of_macros ()
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
366 {
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
367 initial_define_key (control_x_map, ('e'), "call-last-kbd-macro");
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
368 initial_define_key (control_x_map, ('('), "start-kbd-macro");
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
369 initial_define_key (control_x_map, (')'), "end-kbd-macro");
81e375c3eb58 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
370 }