Mercurial > emacs
annotate src/callint.c @ 49645:4e94855c037e
Change dates for the entries concerning the 2.0.29 Tramp commit such
that they all reflect the commit date, instead of the date of the
individual changes.
This is deemed better than keeping the original change date because
it makes sure that the ChangeLog dates have more or less sequential
order.
author | Kai Großjohann <kgrossjo@eu.uu.net> |
---|---|
date | Fri, 07 Feb 2003 17:53:05 +0000 |
parents | 23a1cea22d13 |
children | 2f5cdffaaa04 d7ddb3e565de |
rev | line source |
---|---|
407 | 1 /* Call a Lisp function interactively. |
44405
0ed69545b5f3
(Fcall_interactively): Use INTEGERP instead of
Gerd Moellmann <gerd@gnu.org>
parents:
43039
diff
changeset
|
2 Copyright (C) 1985, 86, 93, 94, 95, 1997, 2000, 2002 |
34799
c04a8de55245
(Fcall_interactively): Prevent a compiler warning.
Gerd Moellmann <gerd@gnu.org>
parents:
31336
diff
changeset
|
3 Free Software Foundation, Inc. |
407 | 4 |
5 This file is part of GNU Emacs. | |
6 | |
7 GNU Emacs is free software; you can redistribute it and/or modify | |
8 it under the terms of the GNU General Public License as published by | |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1693
diff
changeset
|
9 the Free Software Foundation; either version 2, or (at your option) |
407 | 10 any later version. |
11 | |
12 GNU Emacs is distributed in the hope that it will be useful, | |
13 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 GNU General Public License for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
18 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:
14062
diff
changeset
|
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
14062
diff
changeset
|
20 Boston, MA 02111-1307, USA. */ |
407 | 21 |
22 | |
4696
1fc792473491
Include <config.h> instead of "config.h".
Roland McGrath <roland@gnu.org>
parents:
4046
diff
changeset
|
23 #include <config.h> |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
24 |
407 | 25 #include "lisp.h" |
26 #include "buffer.h" | |
27 #include "commands.h" | |
516 | 28 #include "keyboard.h" |
407 | 29 #include "window.h" |
39697
0b986bb45526
Include keymap.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
34799
diff
changeset
|
30 #include "keymap.h" |
407 | 31 |
31336 | 32 #ifdef HAVE_INDEX |
33 extern char *index P_ ((const char *, int)); | |
31225
7930c46bb365
(toplevel) [HAVE_STRING_H]: Include string.h.
Gerd Moellmann <gerd@gnu.org>
parents:
29371
diff
changeset
|
34 #endif |
407 | 35 |
16363
4097c59143f8
(Fcall_interactively): Bind cursor-in-echo-area to t for `k' and `K'.
Richard M. Stallman <rms@gnu.org>
parents:
16039
diff
changeset
|
36 extern Lisp_Object Qcursor_in_echo_area; |
45546
ce01a38706ee
(Fcall_interactively) <"D">: Supply Qfile_directory_p
Kim F. Storm <storm@cua.dk>
parents:
45394
diff
changeset
|
37 extern Lisp_Object Qfile_directory_p; |
16363
4097c59143f8
(Fcall_interactively): Bind cursor-in-echo-area to t for `k' and `K'.
Richard M. Stallman <rms@gnu.org>
parents:
16039
diff
changeset
|
38 |
12117
3fa5b6e7ad4b
(current_prefix_partial): Deleted.
Karl Heuer <kwzh@gnu.org>
parents:
11911
diff
changeset
|
39 Lisp_Object Vcurrent_prefix_arg, Qminus, Qplus; |
407 | 40 Lisp_Object Qcall_interactively; |
41 Lisp_Object Vcommand_history; | |
42 | |
21721
46ffb5302c40
(Fcall_interactively): Truncate command-history here.
Richard M. Stallman <rms@gnu.org>
parents:
21514
diff
changeset
|
43 extern Lisp_Object Vhistory_length; |
46ffb5302c40
(Fcall_interactively): Truncate command-history here.
Richard M. Stallman <rms@gnu.org>
parents:
21514
diff
changeset
|
44 |
407 | 45 Lisp_Object Vcommand_debug_status, Qcommand_debug_status; |
873 | 46 Lisp_Object Qenable_recursive_minibuffers; |
407 | 47 |
3975
718280a1ba74
(Vmark_even_if_inactive): New var, with Lisp variable.
Richard M. Stallman <rms@gnu.org>
parents:
2048
diff
changeset
|
48 /* Non-nil means treat the mark as active |
718280a1ba74
(Vmark_even_if_inactive): New var, with Lisp variable.
Richard M. Stallman <rms@gnu.org>
parents:
2048
diff
changeset
|
49 even if mark_active is 0. */ |
718280a1ba74
(Vmark_even_if_inactive): New var, with Lisp variable.
Richard M. Stallman <rms@gnu.org>
parents:
2048
diff
changeset
|
50 Lisp_Object Vmark_even_if_inactive; |
718280a1ba74
(Vmark_even_if_inactive): New var, with Lisp variable.
Richard M. Stallman <rms@gnu.org>
parents:
2048
diff
changeset
|
51 |
10279
89cf458ed188
(Vmouse_leave_buffer_hook, Qmouse_leave_buffer_hook): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
9342
diff
changeset
|
52 Lisp_Object Vmouse_leave_buffer_hook, Qmouse_leave_buffer_hook; |
89cf458ed188
(Vmouse_leave_buffer_hook, Qmouse_leave_buffer_hook): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
9342
diff
changeset
|
53 |
48150
2b5f7e1254d1
(Fcall_interactively): New local filter_specs.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
54 Lisp_Object Qlist, Qlet, Qletx, Qsave_excursion, Qprogn; |
10803
b8c4a1b7d484
(Fcall_interactively): Use markers temporarily in
Richard M. Stallman <rms@gnu.org>
parents:
10756
diff
changeset
|
55 static Lisp_Object preserved_fns; |
b8c4a1b7d484
(Fcall_interactively): Use markers temporarily in
Richard M. Stallman <rms@gnu.org>
parents:
10756
diff
changeset
|
56 |
b8c4a1b7d484
(Fcall_interactively): Use markers temporarily in
Richard M. Stallman <rms@gnu.org>
parents:
10756
diff
changeset
|
57 /* Marker used within call-interactively to refer to point. */ |
b8c4a1b7d484
(Fcall_interactively): Use markers temporarily in
Richard M. Stallman <rms@gnu.org>
parents:
10756
diff
changeset
|
58 static Lisp_Object point_marker; |
1498
098464e977d6
(preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents:
1425
diff
changeset
|
59 |
13142
297a0e21501a
(callint_message, callint_message_size): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
12582
diff
changeset
|
60 /* Buffer for the prompt text used in Fcall_interactively. */ |
297a0e21501a
(callint_message, callint_message_size): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
12582
diff
changeset
|
61 static char *callint_message; |
297a0e21501a
(callint_message, callint_message_size): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
12582
diff
changeset
|
62 |
297a0e21501a
(callint_message, callint_message_size): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
12582
diff
changeset
|
63 /* Allocated length of that buffer. */ |
297a0e21501a
(callint_message, callint_message_size): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
12582
diff
changeset
|
64 static int callint_message_size; |
10940
40a1812dcbad
(current_prefix_partial): New var.
Karl Heuer <kwzh@gnu.org>
parents:
10917
diff
changeset
|
65 |
407 | 66 /* ARGSUSED */ |
67 DEFUN ("interactive", Finteractive, Sinteractive, 0, UNEVALLED, 0, | |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
68 doc: /* Specify a way of parsing arguments for interactive use of a function. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
69 For example, write |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
70 (defun foo (arg) "Doc string" (interactive "p") ...use arg...) |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
71 to make ARG be the prefix argument when `foo' is called as a command. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
72 The "call" to `interactive' is actually a declaration rather than a function; |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
73 it tells `call-interactively' how to read arguments |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
74 to pass to the function. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
75 When actually called, `interactive' just returns nil. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
76 |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
77 The argument of `interactive' is usually a string containing a code letter |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
78 followed by a prompt. (Some code letters do not use I/O to get |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
79 the argument and do not need prompts.) To prompt for multiple arguments, |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
80 give a code letter, its prompt, a newline, and another code letter, etc. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
81 Prompts are passed to format, and may use % escapes to print the |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
82 arguments that have already been read. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
83 If the argument is not a string, it is evaluated to get a list of |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
84 arguments to pass to the function. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
85 Just `(interactive)' means pass no args when calling interactively. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
86 |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
87 Code letters available are: |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
88 a -- Function name: symbol with a function definition. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
89 b -- Name of existing buffer. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
90 B -- Name of buffer, possibly nonexistent. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
91 c -- Character (no input method is used). |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
92 C -- Command name: symbol with interactive function definition. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
93 d -- Value of point as number. Does not do I/O. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
94 D -- Directory name. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
95 e -- Parametrized event (i.e., one that's a list) that invoked this command. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
96 If used more than once, the Nth `e' returns the Nth parameterized event. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
97 This skips events that are integers or symbols. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
98 f -- Existing file name. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
99 F -- Possibly nonexistent file name. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
100 i -- Ignored, i.e. always nil. Does not do I/O. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
101 k -- Key sequence (downcase the last event if needed to get a definition). |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
102 K -- Key sequence to be redefined (do not downcase the last event). |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
103 m -- Value of mark as number. Does not do I/O. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
104 M -- Any string. Inherits the current input method. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
105 n -- Number read using minibuffer. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
106 N -- Raw prefix arg, or if none, do like code `n'. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
107 p -- Prefix arg converted to number. Does not do I/O. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
108 P -- Prefix arg in raw form. Does not do I/O. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
109 r -- Region: point and mark as 2 numeric args, smallest first. Does no I/O. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
110 s -- Any string. Does not inherit the current input method. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
111 S -- Any symbol. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
112 v -- Variable name: symbol that is user-variable-p. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
113 x -- Lisp expression read but not evaluated. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
114 X -- Lisp expression read and evaluated. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
115 z -- Coding system. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
116 Z -- Coding system, nil if no prefix arg. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
117 In addition, if the string begins with `*' |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
118 then an error is signaled if the buffer is read-only. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
119 This happens before reading any arguments. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
120 If the string begins with `@', then Emacs searches the key sequence |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
121 which invoked the command for its first mouse click (or any other |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
122 event which specifies a window), and selects that window before |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
123 reading any arguments. You may use both `@' and `*'; they are |
40643
184e0d756547
(Finteractive): Add usage to doc-string.
Pavel Janík <Pavel@Janik.cz>
parents:
40103
diff
changeset
|
124 processed in the order that they appear. |
184e0d756547
(Finteractive): Add usage to doc-string.
Pavel Janík <Pavel@Janik.cz>
parents:
40103
diff
changeset
|
125 usage: (interactive ARGS) */) |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
126 (args) |
407 | 127 Lisp_Object args; |
128 { | |
129 return Qnil; | |
130 } | |
131 | |
132 /* Quotify EXP: if EXP is constant, return it. | |
133 If EXP is not constant, return (quote EXP). */ | |
134 Lisp_Object | |
135 quotify_arg (exp) | |
136 register Lisp_Object exp; | |
137 { | |
9145
dda75a4dbbfb
(quotify_arg, Fcall_interactively, Fprefix_numeric_value): Use type test
Karl Heuer <kwzh@gnu.org>
parents:
9100
diff
changeset
|
138 if (!INTEGERP (exp) && !STRINGP (exp) |
485 | 139 && !NILP (exp) && !EQ (exp, Qt)) |
407 | 140 return Fcons (Qquote, Fcons (exp, Qnil)); |
141 | |
142 return exp; | |
143 } | |
144 | |
145 /* Modify EXP by quotifying each element (except the first). */ | |
146 Lisp_Object | |
147 quotify_args (exp) | |
148 Lisp_Object exp; | |
149 { | |
150 register Lisp_Object tail; | |
26164
d39ec0a27081
more XCAR/XCDR/XFLOAT_DATA uses, to help isolete lisp engine
Ken Raeburn <raeburn@raeburn.org>
parents:
25645
diff
changeset
|
151 Lisp_Object next; |
d39ec0a27081
more XCAR/XCDR/XFLOAT_DATA uses, to help isolete lisp engine
Ken Raeburn <raeburn@raeburn.org>
parents:
25645
diff
changeset
|
152 for (tail = exp; CONSP (tail); tail = next) |
407 | 153 { |
26164
d39ec0a27081
more XCAR/XCDR/XFLOAT_DATA uses, to help isolete lisp engine
Ken Raeburn <raeburn@raeburn.org>
parents:
25645
diff
changeset
|
154 next = XCDR (tail); |
39973
579177964efa
Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents:
39945
diff
changeset
|
155 XSETCAR (tail, quotify_arg (XCAR (tail))); |
407 | 156 } |
157 return exp; | |
158 } | |
159 | |
160 char *callint_argfuns[] | |
161 = {"", "point", "mark", "region-beginning", "region-end"}; | |
162 | |
163 static void | |
43039
531bd3a9e67a
(check_mark): New arg to specify clearer error message.
Richard M. Stallman <rms@gnu.org>
parents:
42272
diff
changeset
|
164 check_mark (for_region) |
531bd3a9e67a
(check_mark): New arg to specify clearer error message.
Richard M. Stallman <rms@gnu.org>
parents:
42272
diff
changeset
|
165 int for_region; |
407 | 166 { |
6494
00475922df29
(check_mark, Fcall_interactively): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents:
6271
diff
changeset
|
167 Lisp_Object tem; |
00475922df29
(check_mark, Fcall_interactively): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents:
6271
diff
changeset
|
168 tem = Fmarker_buffer (current_buffer->mark); |
485 | 169 if (NILP (tem) || (XBUFFER (tem) != current_buffer)) |
43039
531bd3a9e67a
(check_mark): New arg to specify clearer error message.
Richard M. Stallman <rms@gnu.org>
parents:
42272
diff
changeset
|
170 error (for_region ? "The mark is not set now, so there is no region" |
531bd3a9e67a
(check_mark): New arg to specify clearer error message.
Richard M. Stallman <rms@gnu.org>
parents:
42272
diff
changeset
|
171 : "The mark is not set now"); |
4039
77cb08d1c4a5
(check_mark): Don't check mark-active unless in transient-mark-mode.
Roland McGrath <roland@gnu.org>
parents:
3975
diff
changeset
|
172 if (!NILP (Vtransient_mark_mode) && NILP (Vmark_even_if_inactive) |
77cb08d1c4a5
(check_mark): Don't check mark-active unless in transient-mark-mode.
Roland McGrath <roland@gnu.org>
parents:
3975
diff
changeset
|
173 && NILP (current_buffer->mark_active)) |
77cb08d1c4a5
(check_mark): Don't check mark-active unless in transient-mark-mode.
Roland McGrath <roland@gnu.org>
parents:
3975
diff
changeset
|
174 Fsignal (Qmark_inactive, Qnil); |
407 | 175 } |
176 | |
177 | |
13308
99457b67e20c
(Fcall_interactively): New arg KEYS.
Richard M. Stallman <rms@gnu.org>
parents:
13142
diff
changeset
|
178 DEFUN ("call-interactively", Fcall_interactively, Scall_interactively, 1, 3, 0, |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
179 doc: /* Call FUNCTION, reading args according to its interactive calling specs. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
180 Return the value FUNCTION returns. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
181 The function contains a specification of how to do the argument reading. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
182 In the case of user-defined functions, this is specified by placing a call |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
183 to the function `interactive' at the top level of the function body. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
184 See `interactive'. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
185 |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
186 Optional second arg RECORD-FLAG non-nil |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
187 means unconditionally put this command in the command-history. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
188 Otherwise, this is done only if an arg is read using the minibuffer. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
189 Optional third arg KEYS, if given, specifies the sequence of events to |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
190 supply if the command inquires which events were used to invoke it. */) |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
191 (function, record_flag, keys) |
14062
16a05061fee3
(Fcall_interactively, Fprefix_numeric_value): Harmonize arguments with
Erik Naggum <erik@naggum.no>
parents:
13843
diff
changeset
|
192 Lisp_Object function, record_flag, keys; |
407 | 193 { |
194 Lisp_Object *args, *visargs; | |
195 unsigned char **argstrings; | |
196 Lisp_Object fun; | |
197 Lisp_Object funcar; | |
198 Lisp_Object specs; | |
48150
2b5f7e1254d1
(Fcall_interactively): New local filter_specs.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
199 Lisp_Object filter_specs; |
407 | 200 Lisp_Object teml; |
873 | 201 Lisp_Object enable; |
46293
1fb8f75062c6
Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents:
46006
diff
changeset
|
202 int speccount = SPECPDL_INDEX (); |
407 | 203 |
1383
54028d2538a4
* callint.c (Fcall_interactively): Allow multiple 'e' specs.
Jim Blandy <jimb@redhat.com>
parents:
1347
diff
changeset
|
204 /* The index of the next element of this_command_keys to examine for |
54028d2538a4
* callint.c (Fcall_interactively): Allow multiple 'e' specs.
Jim Blandy <jimb@redhat.com>
parents:
1347
diff
changeset
|
205 the 'e' interactive code. */ |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1693
diff
changeset
|
206 int next_event; |
1383
54028d2538a4
* callint.c (Fcall_interactively): Allow multiple 'e' specs.
Jim Blandy <jimb@redhat.com>
parents:
1347
diff
changeset
|
207 |
407 | 208 Lisp_Object prefix_arg; |
209 unsigned char *string; | |
210 unsigned char *tem; | |
438 | 211 |
212 /* If varies[i] > 0, the i'th argument shouldn't just have its value | |
213 in this call quoted in the command history. It should be | |
214 recorded as a call to the function named callint_argfuns[varies[i]]. */ | |
407 | 215 int *varies; |
438 | 216 |
407 | 217 register int i, j; |
218 int count, foo; | |
219 char prompt1[100]; | |
220 char *tem1; | |
221 int arg_from_tty = 0; | |
222 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; | |
13308
99457b67e20c
(Fcall_interactively): New arg KEYS.
Richard M. Stallman <rms@gnu.org>
parents:
13142
diff
changeset
|
223 int key_count; |
48527
ba7cb9f8dfc3
(Fcall_interactively): If a command fails because
Richard M. Stallman <rms@gnu.org>
parents:
48150
diff
changeset
|
224 int record_then_fail = 0; |
13308
99457b67e20c
(Fcall_interactively): New arg KEYS.
Richard M. Stallman <rms@gnu.org>
parents:
13142
diff
changeset
|
225 |
99457b67e20c
(Fcall_interactively): New arg KEYS.
Richard M. Stallman <rms@gnu.org>
parents:
13142
diff
changeset
|
226 if (NILP (keys)) |
99457b67e20c
(Fcall_interactively): New arg KEYS.
Richard M. Stallman <rms@gnu.org>
parents:
13142
diff
changeset
|
227 keys = this_command_keys, key_count = this_command_key_count; |
99457b67e20c
(Fcall_interactively): New arg KEYS.
Richard M. Stallman <rms@gnu.org>
parents:
13142
diff
changeset
|
228 else |
99457b67e20c
(Fcall_interactively): New arg KEYS.
Richard M. Stallman <rms@gnu.org>
parents:
13142
diff
changeset
|
229 { |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40643
diff
changeset
|
230 CHECK_VECTOR (keys); |
13308
99457b67e20c
(Fcall_interactively): New arg KEYS.
Richard M. Stallman <rms@gnu.org>
parents:
13142
diff
changeset
|
231 key_count = XVECTOR (keys)->size; |
99457b67e20c
(Fcall_interactively): New arg KEYS.
Richard M. Stallman <rms@gnu.org>
parents:
13142
diff
changeset
|
232 } |
407 | 233 |
732 | 234 /* Save this now, since use of minibuffer will clobber it. */ |
10857
2b9faff73319
(Fcall_interactively, syms_of_callint, Vprefix_arg, Vcurrent_prefix_arg): Undo
Karl Heuer <kwzh@gnu.org>
parents:
10846
diff
changeset
|
235 prefix_arg = Vcurrent_prefix_arg; |
407 | 236 |
617 | 237 retry: |
407 | 238 |
9145
dda75a4dbbfb
(quotify_arg, Fcall_interactively, Fprefix_numeric_value): Use type test
Karl Heuer <kwzh@gnu.org>
parents:
9100
diff
changeset
|
239 if (SYMBOLP (function)) |
1115
eb7f1ab33a9d
* callint.c (Fcall_interactively): Remove the 'K' interactive
Jim Blandy <jimb@redhat.com>
parents:
1084
diff
changeset
|
240 enable = Fget (function, Qenable_recursive_minibuffers); |
34799
c04a8de55245
(Fcall_interactively): Prevent a compiler warning.
Gerd Moellmann <gerd@gnu.org>
parents:
31336
diff
changeset
|
241 else |
c04a8de55245
(Fcall_interactively): Prevent a compiler warning.
Gerd Moellmann <gerd@gnu.org>
parents:
31336
diff
changeset
|
242 enable = Qnil; |
873 | 243 |
648 | 244 fun = indirect_function (function); |
407 | 245 |
246 specs = Qnil; | |
247 string = 0; | |
48150
2b5f7e1254d1
(Fcall_interactively): New local filter_specs.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
248 /* The idea of FILTER_SPECS is to provide away to |
2b5f7e1254d1
(Fcall_interactively): New local filter_specs.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
249 specify how to represent the arguments in command history. |
2b5f7e1254d1
(Fcall_interactively): New local filter_specs.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
250 The feature is not fully implemented. */ |
2b5f7e1254d1
(Fcall_interactively): New local filter_specs.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
251 filter_specs = Qnil; |
407 | 252 |
253 /* Decode the kind of function. Either handle it and return, | |
254 or go to `lose' if not interactive, or go to `retry' | |
255 to specify a different function, or set either STRING or SPECS. */ | |
256 | |
9145
dda75a4dbbfb
(quotify_arg, Fcall_interactively, Fprefix_numeric_value): Use type test
Karl Heuer <kwzh@gnu.org>
parents:
9100
diff
changeset
|
257 if (SUBRP (fun)) |
407 | 258 { |
259 string = (unsigned char *) XSUBR (fun)->prompt; | |
260 if (!string) | |
261 { | |
262 lose: | |
1926
952f2a18f83d
* callint.c (Fcall_interactively): Pass the correct number of
Jim Blandy <jimb@redhat.com>
parents:
1821
diff
changeset
|
263 function = wrong_type_argument (Qcommandp, function); |
407 | 264 goto retry; |
265 } | |
266 } | |
9145
dda75a4dbbfb
(quotify_arg, Fcall_interactively, Fprefix_numeric_value): Use type test
Karl Heuer <kwzh@gnu.org>
parents:
9100
diff
changeset
|
267 else if (COMPILEDP (fun)) |
407 | 268 { |
10345 | 269 if ((XVECTOR (fun)->size & PSEUDOVECTOR_SIZE_MASK) <= COMPILED_INTERACTIVE) |
407 | 270 goto lose; |
271 specs = XVECTOR (fun)->contents[COMPILED_INTERACTIVE]; | |
272 } | |
273 else if (!CONSP (fun)) | |
274 goto lose; | |
39813
638b60fd98d0
(Fcall_interactively): Remove unused code. Use XCAR/XCDR.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39697
diff
changeset
|
275 else if (funcar = XCAR (fun), EQ (funcar, Qautoload)) |
407 | 276 { |
277 GCPRO2 (function, prefix_arg); | |
278 do_autoload (fun, function); | |
279 UNGCPRO; | |
280 goto retry; | |
281 } | |
282 else if (EQ (funcar, Qlambda)) | |
283 { | |
39813
638b60fd98d0
(Fcall_interactively): Remove unused code. Use XCAR/XCDR.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39697
diff
changeset
|
284 specs = Fassq (Qinteractive, Fcdr (XCDR (fun))); |
485 | 285 if (NILP (specs)) |
407 | 286 goto lose; |
48150
2b5f7e1254d1
(Fcall_interactively): New local filter_specs.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
287 filter_specs = Fnth (make_number (1), specs); |
407 | 288 specs = Fcar (Fcdr (specs)); |
289 } | |
290 else | |
291 goto lose; | |
292 | |
48527
ba7cb9f8dfc3
(Fcall_interactively): If a command fails because
Richard M. Stallman <rms@gnu.org>
parents:
48150
diff
changeset
|
293 /* If either SPECS or STRING is set to a string, use it. */ |
9145
dda75a4dbbfb
(quotify_arg, Fcall_interactively, Fprefix_numeric_value): Use type test
Karl Heuer <kwzh@gnu.org>
parents:
9100
diff
changeset
|
294 if (STRINGP (specs)) |
617 | 295 { |
296 /* Make a copy of string so that if a GC relocates specs, | |
297 `string' will still be valid. */ | |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
298 string = (unsigned char *) alloca (SBYTES (specs) + 1); |
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
299 bcopy (SDATA (specs), string, |
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
300 SBYTES (specs) + 1); |
617 | 301 } |
407 | 302 else if (string == 0) |
303 { | |
1498
098464e977d6
(preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents:
1425
diff
changeset
|
304 Lisp_Object input; |
17876
6e27f660a0be
(Fcall_interactively): Use num_input_events.
Richard M. Stallman <rms@gnu.org>
parents:
17806
diff
changeset
|
305 i = num_input_events; |
1498
098464e977d6
(preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents:
1425
diff
changeset
|
306 input = specs; |
098464e977d6
(preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents:
1425
diff
changeset
|
307 /* Compute the arg values using the user's expression. */ |
48150
2b5f7e1254d1
(Fcall_interactively): New local filter_specs.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
308 GCPRO2 (input, filter_specs); |
13843
f5bd72a6fe48
(Fcall_interactively): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents:
13764
diff
changeset
|
309 specs = Feval (specs); |
48150
2b5f7e1254d1
(Fcall_interactively): New local filter_specs.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
310 UNGCPRO; |
17876
6e27f660a0be
(Fcall_interactively): Use num_input_events.
Richard M. Stallman <rms@gnu.org>
parents:
17806
diff
changeset
|
311 if (i != num_input_events || !NILP (record_flag)) |
1498
098464e977d6
(preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents:
1425
diff
changeset
|
312 { |
098464e977d6
(preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents:
1425
diff
changeset
|
313 /* We should record this command on the command history. */ |
098464e977d6
(preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents:
1425
diff
changeset
|
314 Lisp_Object values, car; |
098464e977d6
(preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents:
1425
diff
changeset
|
315 /* Make a copy of the list of values, for the command history, |
098464e977d6
(preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents:
1425
diff
changeset
|
316 and turn them into things we can eval. */ |
098464e977d6
(preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents:
1425
diff
changeset
|
317 values = quotify_args (Fcopy_sequence (specs)); |
098464e977d6
(preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents:
1425
diff
changeset
|
318 /* If the list of args was produced with an explicit call to `list', |
098464e977d6
(preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents:
1425
diff
changeset
|
319 look for elements that were computed with (region-beginning) |
098464e977d6
(preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents:
1425
diff
changeset
|
320 or (region-end), and put those expressions into VALUES |
098464e977d6
(preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents:
1425
diff
changeset
|
321 instead of the present values. */ |
13447
8c89b569cfa9
(syms_of_callint): Set up Qlet, Qletx, Qsave_excursion.
Richard M. Stallman <rms@gnu.org>
parents:
13308
diff
changeset
|
322 if (CONSP (input)) |
1498
098464e977d6
(preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents:
1425
diff
changeset
|
323 { |
25645
a14111a2a100
Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
24911
diff
changeset
|
324 car = XCAR (input); |
13447
8c89b569cfa9
(syms_of_callint): Set up Qlet, Qletx, Qsave_excursion.
Richard M. Stallman <rms@gnu.org>
parents:
13308
diff
changeset
|
325 /* Skip through certain special forms. */ |
8c89b569cfa9
(syms_of_callint): Set up Qlet, Qletx, Qsave_excursion.
Richard M. Stallman <rms@gnu.org>
parents:
13308
diff
changeset
|
326 while (EQ (car, Qlet) || EQ (car, Qletx) |
48150
2b5f7e1254d1
(Fcall_interactively): New local filter_specs.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
327 || EQ (car, Qsave_excursion) |
2b5f7e1254d1
(Fcall_interactively): New local filter_specs.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
328 || EQ (car, Qprogn)) |
1498
098464e977d6
(preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents:
1425
diff
changeset
|
329 { |
25645
a14111a2a100
Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
24911
diff
changeset
|
330 while (CONSP (XCDR (input))) |
a14111a2a100
Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
24911
diff
changeset
|
331 input = XCDR (input); |
a14111a2a100
Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
24911
diff
changeset
|
332 input = XCAR (input); |
13447
8c89b569cfa9
(syms_of_callint): Set up Qlet, Qletx, Qsave_excursion.
Richard M. Stallman <rms@gnu.org>
parents:
13308
diff
changeset
|
333 if (!CONSP (input)) |
8c89b569cfa9
(syms_of_callint): Set up Qlet, Qletx, Qsave_excursion.
Richard M. Stallman <rms@gnu.org>
parents:
13308
diff
changeset
|
334 break; |
25645
a14111a2a100
Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
24911
diff
changeset
|
335 car = XCAR (input); |
13447
8c89b569cfa9
(syms_of_callint): Set up Qlet, Qletx, Qsave_excursion.
Richard M. Stallman <rms@gnu.org>
parents:
13308
diff
changeset
|
336 } |
8c89b569cfa9
(syms_of_callint): Set up Qlet, Qletx, Qsave_excursion.
Richard M. Stallman <rms@gnu.org>
parents:
13308
diff
changeset
|
337 if (EQ (car, Qlist)) |
8c89b569cfa9
(syms_of_callint): Set up Qlet, Qletx, Qsave_excursion.
Richard M. Stallman <rms@gnu.org>
parents:
13308
diff
changeset
|
338 { |
8c89b569cfa9
(syms_of_callint): Set up Qlet, Qletx, Qsave_excursion.
Richard M. Stallman <rms@gnu.org>
parents:
13308
diff
changeset
|
339 Lisp_Object intail, valtail; |
8c89b569cfa9
(syms_of_callint): Set up Qlet, Qletx, Qsave_excursion.
Richard M. Stallman <rms@gnu.org>
parents:
13308
diff
changeset
|
340 for (intail = Fcdr (input), valtail = values; |
8c89b569cfa9
(syms_of_callint): Set up Qlet, Qletx, Qsave_excursion.
Richard M. Stallman <rms@gnu.org>
parents:
13308
diff
changeset
|
341 CONSP (valtail); |
8c89b569cfa9
(syms_of_callint): Set up Qlet, Qletx, Qsave_excursion.
Richard M. Stallman <rms@gnu.org>
parents:
13308
diff
changeset
|
342 intail = Fcdr (intail), valtail = Fcdr (valtail)) |
1498
098464e977d6
(preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents:
1425
diff
changeset
|
343 { |
13447
8c89b569cfa9
(syms_of_callint): Set up Qlet, Qletx, Qsave_excursion.
Richard M. Stallman <rms@gnu.org>
parents:
13308
diff
changeset
|
344 Lisp_Object elt; |
8c89b569cfa9
(syms_of_callint): Set up Qlet, Qletx, Qsave_excursion.
Richard M. Stallman <rms@gnu.org>
parents:
13308
diff
changeset
|
345 elt = Fcar (intail); |
8c89b569cfa9
(syms_of_callint): Set up Qlet, Qletx, Qsave_excursion.
Richard M. Stallman <rms@gnu.org>
parents:
13308
diff
changeset
|
346 if (CONSP (elt)) |
8c89b569cfa9
(syms_of_callint): Set up Qlet, Qletx, Qsave_excursion.
Richard M. Stallman <rms@gnu.org>
parents:
13308
diff
changeset
|
347 { |
8c89b569cfa9
(syms_of_callint): Set up Qlet, Qletx, Qsave_excursion.
Richard M. Stallman <rms@gnu.org>
parents:
13308
diff
changeset
|
348 Lisp_Object presflag; |
8c89b569cfa9
(syms_of_callint): Set up Qlet, Qletx, Qsave_excursion.
Richard M. Stallman <rms@gnu.org>
parents:
13308
diff
changeset
|
349 presflag = Fmemq (Fcar (elt), preserved_fns); |
8c89b569cfa9
(syms_of_callint): Set up Qlet, Qletx, Qsave_excursion.
Richard M. Stallman <rms@gnu.org>
parents:
13308
diff
changeset
|
350 if (!NILP (presflag)) |
8c89b569cfa9
(syms_of_callint): Set up Qlet, Qletx, Qsave_excursion.
Richard M. Stallman <rms@gnu.org>
parents:
13308
diff
changeset
|
351 Fsetcar (valtail, Fcar (intail)); |
8c89b569cfa9
(syms_of_callint): Set up Qlet, Qletx, Qsave_excursion.
Richard M. Stallman <rms@gnu.org>
parents:
13308
diff
changeset
|
352 } |
1498
098464e977d6
(preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents:
1425
diff
changeset
|
353 } |
098464e977d6
(preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents:
1425
diff
changeset
|
354 } |
098464e977d6
(preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents:
1425
diff
changeset
|
355 } |
098464e977d6
(preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents:
1425
diff
changeset
|
356 Vcommand_history |
098464e977d6
(preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents:
1425
diff
changeset
|
357 = Fcons (Fcons (function, values), Vcommand_history); |
21721
46ffb5302c40
(Fcall_interactively): Truncate command-history here.
Richard M. Stallman <rms@gnu.org>
parents:
21514
diff
changeset
|
358 |
46ffb5302c40
(Fcall_interactively): Truncate command-history here.
Richard M. Stallman <rms@gnu.org>
parents:
21514
diff
changeset
|
359 /* Don't keep command history around forever. */ |
44405
0ed69545b5f3
(Fcall_interactively): Use INTEGERP instead of
Gerd Moellmann <gerd@gnu.org>
parents:
43039
diff
changeset
|
360 if (INTEGERP (Vhistory_length) && XINT (Vhistory_length) > 0) |
21721
46ffb5302c40
(Fcall_interactively): Truncate command-history here.
Richard M. Stallman <rms@gnu.org>
parents:
21514
diff
changeset
|
361 { |
46ffb5302c40
(Fcall_interactively): Truncate command-history here.
Richard M. Stallman <rms@gnu.org>
parents:
21514
diff
changeset
|
362 teml = Fnthcdr (Vhistory_length, Vcommand_history); |
46ffb5302c40
(Fcall_interactively): Truncate command-history here.
Richard M. Stallman <rms@gnu.org>
parents:
21514
diff
changeset
|
363 if (CONSP (teml)) |
39973
579177964efa
Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents:
39945
diff
changeset
|
364 XSETCDR (teml, Qnil); |
21721
46ffb5302c40
(Fcall_interactively): Truncate command-history here.
Richard M. Stallman <rms@gnu.org>
parents:
21514
diff
changeset
|
365 } |
1498
098464e977d6
(preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents:
1425
diff
changeset
|
366 } |
11345
c4adea8f7543
(Fcall_interactively): Call single_kboard_state
Richard M. Stallman <rms@gnu.org>
parents:
11280
diff
changeset
|
367 single_kboard_state (); |
407 | 368 return apply1 (function, specs); |
369 } | |
370 | |
371 /* Here if function specifies a string to control parsing the defaults */ | |
372 | |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1693
diff
changeset
|
373 /* Set next_event to point to the first event with parameters. */ |
13308
99457b67e20c
(Fcall_interactively): New arg KEYS.
Richard M. Stallman <rms@gnu.org>
parents:
13142
diff
changeset
|
374 for (next_event = 0; next_event < key_count; next_event++) |
99457b67e20c
(Fcall_interactively): New arg KEYS.
Richard M. Stallman <rms@gnu.org>
parents:
13142
diff
changeset
|
375 if (EVENT_HAS_PARAMETERS (XVECTOR (keys)->contents[next_event])) |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1693
diff
changeset
|
376 break; |
48527
ba7cb9f8dfc3
(Fcall_interactively): If a command fails because
Richard M. Stallman <rms@gnu.org>
parents:
48150
diff
changeset
|
377 |
7912
f87185e63bbc
(Fcall_interactively): Ignore `-' in string.
Richard M. Stallman <rms@gnu.org>
parents:
7307
diff
changeset
|
378 /* Handle special starting chars `*' and `@'. Also `-'. */ |
11278
25b2219c415c
(Fcall_interactively): `+' is reserved for user changes.
Richard M. Stallman <rms@gnu.org>
parents:
11009
diff
changeset
|
379 /* Note that `+' is reserved for user extensions. */ |
407 | 380 while (1) |
381 { | |
11280
5146fba1f75d
(Fcall_interactively): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents:
11278
diff
changeset
|
382 if (*string == '+') |
11278
25b2219c415c
(Fcall_interactively): `+' is reserved for user changes.
Richard M. Stallman <rms@gnu.org>
parents:
11009
diff
changeset
|
383 error ("`+' is not used in `interactive' for ordinary commands"); |
25b2219c415c
(Fcall_interactively): `+' is reserved for user changes.
Richard M. Stallman <rms@gnu.org>
parents:
11009
diff
changeset
|
384 else if (*string == '*') |
407 | 385 { |
386 string++; | |
485 | 387 if (!NILP (current_buffer->read_only)) |
48527
ba7cb9f8dfc3
(Fcall_interactively): If a command fails because
Richard M. Stallman <rms@gnu.org>
parents:
48150
diff
changeset
|
388 { |
ba7cb9f8dfc3
(Fcall_interactively): If a command fails because
Richard M. Stallman <rms@gnu.org>
parents:
48150
diff
changeset
|
389 if (!NILP (record_flag)) |
ba7cb9f8dfc3
(Fcall_interactively): If a command fails because
Richard M. Stallman <rms@gnu.org>
parents:
48150
diff
changeset
|
390 { |
ba7cb9f8dfc3
(Fcall_interactively): If a command fails because
Richard M. Stallman <rms@gnu.org>
parents:
48150
diff
changeset
|
391 unsigned char *p = string; |
ba7cb9f8dfc3
(Fcall_interactively): If a command fails because
Richard M. Stallman <rms@gnu.org>
parents:
48150
diff
changeset
|
392 while (*p) |
ba7cb9f8dfc3
(Fcall_interactively): If a command fails because
Richard M. Stallman <rms@gnu.org>
parents:
48150
diff
changeset
|
393 { |
ba7cb9f8dfc3
(Fcall_interactively): If a command fails because
Richard M. Stallman <rms@gnu.org>
parents:
48150
diff
changeset
|
394 if (! (*p == 'r' || *p == 'p' || *p == 'P' |
ba7cb9f8dfc3
(Fcall_interactively): If a command fails because
Richard M. Stallman <rms@gnu.org>
parents:
48150
diff
changeset
|
395 || *p == '\n')) |
ba7cb9f8dfc3
(Fcall_interactively): If a command fails because
Richard M. Stallman <rms@gnu.org>
parents:
48150
diff
changeset
|
396 Fbarf_if_buffer_read_only (); |
ba7cb9f8dfc3
(Fcall_interactively): If a command fails because
Richard M. Stallman <rms@gnu.org>
parents:
48150
diff
changeset
|
397 p++; |
ba7cb9f8dfc3
(Fcall_interactively): If a command fails because
Richard M. Stallman <rms@gnu.org>
parents:
48150
diff
changeset
|
398 } |
ba7cb9f8dfc3
(Fcall_interactively): If a command fails because
Richard M. Stallman <rms@gnu.org>
parents:
48150
diff
changeset
|
399 record_then_fail = 1; |
ba7cb9f8dfc3
(Fcall_interactively): If a command fails because
Richard M. Stallman <rms@gnu.org>
parents:
48150
diff
changeset
|
400 } |
ba7cb9f8dfc3
(Fcall_interactively): If a command fails because
Richard M. Stallman <rms@gnu.org>
parents:
48150
diff
changeset
|
401 else |
ba7cb9f8dfc3
(Fcall_interactively): If a command fails because
Richard M. Stallman <rms@gnu.org>
parents:
48150
diff
changeset
|
402 Fbarf_if_buffer_read_only (); |
ba7cb9f8dfc3
(Fcall_interactively): If a command fails because
Richard M. Stallman <rms@gnu.org>
parents:
48150
diff
changeset
|
403 } |
407 | 404 } |
7912
f87185e63bbc
(Fcall_interactively): Ignore `-' in string.
Richard M. Stallman <rms@gnu.org>
parents:
7307
diff
changeset
|
405 /* Ignore this for semi-compatibility with Lucid. */ |
f87185e63bbc
(Fcall_interactively): Ignore `-' in string.
Richard M. Stallman <rms@gnu.org>
parents:
7307
diff
changeset
|
406 else if (*string == '-') |
f87185e63bbc
(Fcall_interactively): Ignore `-' in string.
Richard M. Stallman <rms@gnu.org>
parents:
7307
diff
changeset
|
407 string++; |
407 | 408 else if (*string == '@') |
409 { | |
6494
00475922df29
(check_mark, Fcall_interactively): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents:
6271
diff
changeset
|
410 Lisp_Object event; |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1693
diff
changeset
|
411 |
48630
edd0dd275f1f
(Fcall_interactively): Use next_event only if less
Andreas Schwab <schwab@suse.de>
parents:
48527
diff
changeset
|
412 event = (next_event < key_count |
edd0dd275f1f
(Fcall_interactively): Use next_event only if less
Andreas Schwab <schwab@suse.de>
parents:
48527
diff
changeset
|
413 ? XVECTOR (keys)->contents[next_event] |
edd0dd275f1f
(Fcall_interactively): Use next_event only if less
Andreas Schwab <schwab@suse.de>
parents:
48527
diff
changeset
|
414 : Qnil); |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1693
diff
changeset
|
415 if (EVENT_HAS_PARAMETERS (event) |
25645
a14111a2a100
Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
24911
diff
changeset
|
416 && (event = XCDR (event), CONSP (event)) |
a14111a2a100
Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
24911
diff
changeset
|
417 && (event = XCAR (event), CONSP (event)) |
a14111a2a100
Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
24911
diff
changeset
|
418 && (event = XCAR (event), WINDOWP (event))) |
6270
853b88dd9945
(Fcall_interactively): Don't select an active minibuffer.
Karl Heuer <kwzh@gnu.org>
parents:
4696
diff
changeset
|
419 { |
6271 | 420 if (MINI_WINDOW_P (XWINDOW (event)) |
7912
f87185e63bbc
(Fcall_interactively): Ignore `-' in string.
Richard M. Stallman <rms@gnu.org>
parents:
7307
diff
changeset
|
421 && ! (minibuf_level > 0 && EQ (event, minibuf_window))) |
6270
853b88dd9945
(Fcall_interactively): Don't select an active minibuffer.
Karl Heuer <kwzh@gnu.org>
parents:
4696
diff
changeset
|
422 error ("Attempt to select inactive minibuffer window"); |
10279
89cf458ed188
(Vmouse_leave_buffer_hook, Qmouse_leave_buffer_hook): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
9342
diff
changeset
|
423 |
89cf458ed188
(Vmouse_leave_buffer_hook, Qmouse_leave_buffer_hook): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
9342
diff
changeset
|
424 /* If the current buffer wants to clean up, let it. */ |
89cf458ed188
(Vmouse_leave_buffer_hook, Qmouse_leave_buffer_hook): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
9342
diff
changeset
|
425 if (!NILP (Vmouse_leave_buffer_hook)) |
89cf458ed188
(Vmouse_leave_buffer_hook, Qmouse_leave_buffer_hook): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
9342
diff
changeset
|
426 call1 (Vrun_hooks, Qmouse_leave_buffer_hook); |
89cf458ed188
(Vmouse_leave_buffer_hook, Qmouse_leave_buffer_hook): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
9342
diff
changeset
|
427 |
6270
853b88dd9945
(Fcall_interactively): Don't select an active minibuffer.
Karl Heuer <kwzh@gnu.org>
parents:
4696
diff
changeset
|
428 Fselect_window (event); |
853b88dd9945
(Fcall_interactively): Don't select an active minibuffer.
Karl Heuer <kwzh@gnu.org>
parents:
4696
diff
changeset
|
429 } |
407 | 430 string++; |
431 } | |
432 else break; | |
433 } | |
434 | |
435 /* Count the number of arguments the interactive spec would have | |
436 us give to the function. */ | |
437 tem = string; | |
438 for (j = 0; *tem; j++) | |
439 { | |
440 /* 'r' specifications ("point and mark as 2 numeric args") | |
441 produce *two* arguments. */ | |
442 if (*tem == 'r') j++; | |
443 tem = (unsigned char *) index (tem, '\n'); | |
444 if (tem) | |
445 tem++; | |
446 else | |
447 tem = (unsigned char *) ""; | |
448 } | |
13843
f5bd72a6fe48
(Fcall_interactively): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents:
13764
diff
changeset
|
449 count = j; |
407 | 450 |
451 args = (Lisp_Object *) alloca ((count + 1) * sizeof (Lisp_Object)); | |
452 visargs = (Lisp_Object *) alloca ((count + 1) * sizeof (Lisp_Object)); | |
453 argstrings = (unsigned char **) alloca ((count + 1) * sizeof (char *)); | |
454 varies = (int *) alloca ((count + 1) * sizeof (int)); | |
455 | |
456 for (i = 0; i < (count + 1); i++) | |
457 { | |
458 args[i] = Qnil; | |
459 visargs[i] = Qnil; | |
460 varies[i] = 0; | |
461 } | |
462 | |
463 GCPRO4 (prefix_arg, function, *args, *visargs); | |
464 gcpro3.nvars = (count + 1); | |
465 gcpro4.nvars = (count + 1); | |
466 | |
873 | 467 if (!NILP (enable)) |
468 specbind (Qenable_recursive_minibuffers, Qt); | |
469 | |
407 | 470 tem = string; |
13843
f5bd72a6fe48
(Fcall_interactively): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents:
13764
diff
changeset
|
471 for (i = 1; *tem; i++) |
407 | 472 { |
473 strncpy (prompt1, tem + 1, sizeof prompt1 - 1); | |
474 prompt1[sizeof prompt1 - 1] = 0; | |
31225
7930c46bb365
(toplevel) [HAVE_STRING_H]: Include string.h.
Gerd Moellmann <gerd@gnu.org>
parents:
29371
diff
changeset
|
475 tem1 = (char *) index (prompt1, '\n'); |
407 | 476 if (tem1) *tem1 = 0; |
477 /* Fill argstrings with a vector of C strings | |
478 corresponding to the Lisp strings in visargs. */ | |
479 for (j = 1; j < i; j++) | |
480 argstrings[j] | |
20552
1a0cb8cd5615
(Fcall_interactively) <'d', 'r'>: Use set_marker_both.
Richard M. Stallman <rms@gnu.org>
parents:
19759
diff
changeset
|
481 = (EQ (visargs[j], Qnil) |
1a0cb8cd5615
(Fcall_interactively) <'d', 'r'>: Use set_marker_both.
Richard M. Stallman <rms@gnu.org>
parents:
19759
diff
changeset
|
482 ? (unsigned char *) "" |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
483 : SDATA (visargs[j])); |
407 | 484 |
13142
297a0e21501a
(callint_message, callint_message_size): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
12582
diff
changeset
|
485 /* Process the format-string in prompt1, putting the output |
297a0e21501a
(callint_message, callint_message_size): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
12582
diff
changeset
|
486 into callint_message. Make callint_message bigger if necessary. |
297a0e21501a
(callint_message, callint_message_size): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
12582
diff
changeset
|
487 We don't use a buffer on the stack, because the contents |
297a0e21501a
(callint_message, callint_message_size): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
12582
diff
changeset
|
488 need to stay stable for a while. */ |
297a0e21501a
(callint_message, callint_message_size): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
12582
diff
changeset
|
489 while (1) |
297a0e21501a
(callint_message, callint_message_size): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
12582
diff
changeset
|
490 { |
297a0e21501a
(callint_message, callint_message_size): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
12582
diff
changeset
|
491 int nchars = doprnt (callint_message, callint_message_size, |
297a0e21501a
(callint_message, callint_message_size): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
12582
diff
changeset
|
492 prompt1, (char *)0, |
20552
1a0cb8cd5615
(Fcall_interactively) <'d', 'r'>: Use set_marker_both.
Richard M. Stallman <rms@gnu.org>
parents:
19759
diff
changeset
|
493 j - 1, (char **) argstrings + 1); |
46006
6d5d3dd50de6
(Fcall_interactively): When checking to see if doprnt hit
Miles Bader <miles@gnu.org>
parents:
45546
diff
changeset
|
494 if (nchars < callint_message_size - 1) |
13142
297a0e21501a
(callint_message, callint_message_size): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
12582
diff
changeset
|
495 break; |
297a0e21501a
(callint_message, callint_message_size): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
12582
diff
changeset
|
496 callint_message_size *= 2; |
297a0e21501a
(callint_message, callint_message_size): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
12582
diff
changeset
|
497 callint_message |
297a0e21501a
(callint_message, callint_message_size): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
12582
diff
changeset
|
498 = (char *) xrealloc (callint_message, callint_message_size); |
297a0e21501a
(callint_message, callint_message_size): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
12582
diff
changeset
|
499 } |
407 | 500 |
501 switch (*tem) | |
502 { | |
503 case 'a': /* Symbol defined as a function */ | |
13142
297a0e21501a
(callint_message, callint_message_size): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
12582
diff
changeset
|
504 visargs[i] = Fcompleting_read (build_string (callint_message), |
17736
8b30ef18c480
(Fcall_interactively): Pass new arg to
Richard M. Stallman <rms@gnu.org>
parents:
17024
diff
changeset
|
505 Vobarray, Qfboundp, Qt, |
19548
b275154db0cb
(Finteractive): Document the code letter `M'.
Kenichi Handa <handa@m17n.org>
parents:
17958
diff
changeset
|
506 Qnil, Qnil, Qnil, Qnil); |
407 | 507 /* Passing args[i] directly stimulates compiler bug */ |
508 teml = visargs[i]; | |
509 args[i] = Fintern (teml, Qnil); | |
510 break; | |
511 | |
512 case 'b': /* Name of existing buffer */ | |
513 args[i] = Fcurrent_buffer (); | |
514 if (EQ (selected_window, minibuf_window)) | |
22244
41c88b9489c3
(Fcall_interactively): Pass new arg to Fother_buffer.
Richard M. Stallman <rms@gnu.org>
parents:
21721
diff
changeset
|
515 args[i] = Fother_buffer (args[i], Qnil, Qnil); |
13142
297a0e21501a
(callint_message, callint_message_size): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
12582
diff
changeset
|
516 args[i] = Fread_buffer (build_string (callint_message), args[i], Qt); |
407 | 517 break; |
518 | |
519 case 'B': /* Name of buffer, possibly nonexistent */ | |
13142
297a0e21501a
(callint_message, callint_message_size): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
12582
diff
changeset
|
520 args[i] = Fread_buffer (build_string (callint_message), |
22244
41c88b9489c3
(Fcall_interactively): Pass new arg to Fother_buffer.
Richard M. Stallman <rms@gnu.org>
parents:
21721
diff
changeset
|
521 Fother_buffer (Fcurrent_buffer (), Qnil, Qnil), |
1347
ac3a893b9bb9
(Fcall_interactively): Pass 2nd arg to Fother_buffer.
Richard M. Stallman <rms@gnu.org>
parents:
1115
diff
changeset
|
522 Qnil); |
407 | 523 break; |
524 | |
525 case 'c': /* Character */ | |
23934
93f40b344070
(Fcall_interactively) <'C'>: Give Fread_char Qnil
Kenichi Handa <handa@m17n.org>
parents:
23301
diff
changeset
|
526 args[i] = Fread_char (build_string (callint_message), Qnil); |
13754
8310d6085087
(Fcall_interactively): Don't log prompt strings.
Karl Heuer <kwzh@gnu.org>
parents:
13664
diff
changeset
|
527 message1_nolog ((char *) 0); |
407 | 528 /* Passing args[i] directly stimulates compiler bug */ |
529 teml = args[i]; | |
530 visargs[i] = Fchar_to_string (teml); | |
531 break; | |
532 | |
533 case 'C': /* Command: symbol with interactive function */ | |
13142
297a0e21501a
(callint_message, callint_message_size): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
12582
diff
changeset
|
534 visargs[i] = Fcompleting_read (build_string (callint_message), |
17736
8b30ef18c480
(Fcall_interactively): Pass new arg to
Richard M. Stallman <rms@gnu.org>
parents:
17024
diff
changeset
|
535 Vobarray, Qcommandp, |
19548
b275154db0cb
(Finteractive): Document the code letter `M'.
Kenichi Handa <handa@m17n.org>
parents:
17958
diff
changeset
|
536 Qt, Qnil, Qnil, Qnil, Qnil); |
407 | 537 /* Passing args[i] directly stimulates compiler bug */ |
538 teml = visargs[i]; | |
539 args[i] = Fintern (teml, Qnil); | |
540 break; | |
541 | |
542 case 'd': /* Value of point. Does not do I/O. */ | |
20552
1a0cb8cd5615
(Fcall_interactively) <'d', 'r'>: Use set_marker_both.
Richard M. Stallman <rms@gnu.org>
parents:
19759
diff
changeset
|
543 set_marker_both (point_marker, Qnil, PT, PT_BYTE); |
10803
b8c4a1b7d484
(Fcall_interactively): Use markers temporarily in
Richard M. Stallman <rms@gnu.org>
parents:
10756
diff
changeset
|
544 args[i] = point_marker; |
407 | 545 /* visargs[i] = Qnil; */ |
546 varies[i] = 1; | |
547 break; | |
548 | |
549 case 'D': /* Directory name. */ | |
13142
297a0e21501a
(callint_message, callint_message_size): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
12582
diff
changeset
|
550 args[i] = Fread_file_name (build_string (callint_message), Qnil, |
45546
ce01a38706ee
(Fcall_interactively) <"D">: Supply Qfile_directory_p
Kim F. Storm <storm@cua.dk>
parents:
45394
diff
changeset
|
551 current_buffer->directory, Qlambda, Qnil, |
ce01a38706ee
(Fcall_interactively) <"D">: Supply Qfile_directory_p
Kim F. Storm <storm@cua.dk>
parents:
45394
diff
changeset
|
552 Qfile_directory_p); |
407 | 553 break; |
554 | |
555 case 'f': /* Existing file name. */ | |
13142
297a0e21501a
(callint_message, callint_message_size): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
12582
diff
changeset
|
556 args[i] = Fread_file_name (build_string (callint_message), |
45546
ce01a38706ee
(Fcall_interactively) <"D">: Supply Qfile_directory_p
Kim F. Storm <storm@cua.dk>
parents:
45394
diff
changeset
|
557 Qnil, Qnil, Qlambda, Qnil, Qnil); |
407 | 558 break; |
559 | |
560 case 'F': /* Possibly nonexistent file name. */ | |
13142
297a0e21501a
(callint_message, callint_message_size): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
12582
diff
changeset
|
561 args[i] = Fread_file_name (build_string (callint_message), |
45546
ce01a38706ee
(Fcall_interactively) <"D">: Supply Qfile_directory_p
Kim F. Storm <storm@cua.dk>
parents:
45394
diff
changeset
|
562 Qnil, Qnil, Qnil, Qnil, Qnil); |
407 | 563 break; |
564 | |
17024
6cfba7f41dca
(doc-string of `interactive'): Describe new code
Karl Heuer <kwzh@gnu.org>
parents:
16363
diff
changeset
|
565 case 'i': /* Ignore an argument -- Does not do I/O */ |
6cfba7f41dca
(doc-string of `interactive'): Describe new code
Karl Heuer <kwzh@gnu.org>
parents:
16363
diff
changeset
|
566 varies[i] = -1; |
6cfba7f41dca
(doc-string of `interactive'): Describe new code
Karl Heuer <kwzh@gnu.org>
parents:
16363
diff
changeset
|
567 break; |
6cfba7f41dca
(doc-string of `interactive'): Describe new code
Karl Heuer <kwzh@gnu.org>
parents:
16363
diff
changeset
|
568 |
10540
161014ddd3c5
(Fcall_interactively): Define K mostly like k.
Richard M. Stallman <rms@gnu.org>
parents:
10345
diff
changeset
|
569 case 'k': /* Key sequence. */ |
16363
4097c59143f8
(Fcall_interactively): Bind cursor-in-echo-area to t for `k' and `K'.
Richard M. Stallman <rms@gnu.org>
parents:
16039
diff
changeset
|
570 { |
46293
1fb8f75062c6
Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents:
46006
diff
changeset
|
571 int speccount1 = SPECPDL_INDEX (); |
16363
4097c59143f8
(Fcall_interactively): Bind cursor-in-echo-area to t for `k' and `K'.
Richard M. Stallman <rms@gnu.org>
parents:
16039
diff
changeset
|
572 specbind (Qcursor_in_echo_area, Qt); |
4097c59143f8
(Fcall_interactively): Bind cursor-in-echo-area to t for `k' and `K'.
Richard M. Stallman <rms@gnu.org>
parents:
16039
diff
changeset
|
573 args[i] = Fread_key_sequence (build_string (callint_message), |
22932
0e0275920715
(Fcall_interactively): Pass new arg to Fread_key_sequence.
Richard M. Stallman <rms@gnu.org>
parents:
22485
diff
changeset
|
574 Qnil, Qnil, Qnil, Qnil); |
16363
4097c59143f8
(Fcall_interactively): Bind cursor-in-echo-area to t for `k' and `K'.
Richard M. Stallman <rms@gnu.org>
parents:
16039
diff
changeset
|
575 unbind_to (speccount1, Qnil); |
4097c59143f8
(Fcall_interactively): Bind cursor-in-echo-area to t for `k' and `K'.
Richard M. Stallman <rms@gnu.org>
parents:
16039
diff
changeset
|
576 teml = args[i]; |
4097c59143f8
(Fcall_interactively): Bind cursor-in-echo-area to t for `k' and `K'.
Richard M. Stallman <rms@gnu.org>
parents:
16039
diff
changeset
|
577 visargs[i] = Fkey_description (teml); |
22485
b469abbc9984
(Fcall_interactively) <k, K>: If sequence ends in a down
Richard M. Stallman <rms@gnu.org>
parents:
22383
diff
changeset
|
578 |
b469abbc9984
(Fcall_interactively) <k, K>: If sequence ends in a down
Richard M. Stallman <rms@gnu.org>
parents:
22383
diff
changeset
|
579 /* If the key sequence ends with a down-event, |
b469abbc9984
(Fcall_interactively) <k, K>: If sequence ends in a down
Richard M. Stallman <rms@gnu.org>
parents:
22383
diff
changeset
|
580 discard the following up-event. */ |
b469abbc9984
(Fcall_interactively) <k, K>: If sequence ends in a down
Richard M. Stallman <rms@gnu.org>
parents:
22383
diff
changeset
|
581 teml = Faref (args[i], make_number (XINT (Flength (args[i])) - 1)); |
b469abbc9984
(Fcall_interactively) <k, K>: If sequence ends in a down
Richard M. Stallman <rms@gnu.org>
parents:
22383
diff
changeset
|
582 if (CONSP (teml)) |
25645
a14111a2a100
Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
24911
diff
changeset
|
583 teml = XCAR (teml); |
22485
b469abbc9984
(Fcall_interactively) <k, K>: If sequence ends in a down
Richard M. Stallman <rms@gnu.org>
parents:
22383
diff
changeset
|
584 if (SYMBOLP (teml)) |
b469abbc9984
(Fcall_interactively) <k, K>: If sequence ends in a down
Richard M. Stallman <rms@gnu.org>
parents:
22383
diff
changeset
|
585 { |
b469abbc9984
(Fcall_interactively) <k, K>: If sequence ends in a down
Richard M. Stallman <rms@gnu.org>
parents:
22383
diff
changeset
|
586 Lisp_Object tem2; |
b469abbc9984
(Fcall_interactively) <k, K>: If sequence ends in a down
Richard M. Stallman <rms@gnu.org>
parents:
22383
diff
changeset
|
587 |
b469abbc9984
(Fcall_interactively) <k, K>: If sequence ends in a down
Richard M. Stallman <rms@gnu.org>
parents:
22383
diff
changeset
|
588 teml = Fget (teml, intern ("event-symbol-elements")); |
24911
f477c5bb74c6
(Fcall_interactively): Ignore first element of
Andreas Schwab <schwab@suse.de>
parents:
23934
diff
changeset
|
589 /* Ignore first element, which is the base key. */ |
f477c5bb74c6
(Fcall_interactively): Ignore first element of
Andreas Schwab <schwab@suse.de>
parents:
23934
diff
changeset
|
590 tem2 = Fmemq (intern ("down"), Fcdr (teml)); |
22485
b469abbc9984
(Fcall_interactively) <k, K>: If sequence ends in a down
Richard M. Stallman <rms@gnu.org>
parents:
22383
diff
changeset
|
591 if (! NILP (tem2)) |
23064
32a7b4dc421e
(Fcall_interactively): Pass new args to Fread_event
Richard M. Stallman <rms@gnu.org>
parents:
22932
diff
changeset
|
592 Fread_event (Qnil, Qnil); |
22485
b469abbc9984
(Fcall_interactively) <k, K>: If sequence ends in a down
Richard M. Stallman <rms@gnu.org>
parents:
22383
diff
changeset
|
593 } |
16363
4097c59143f8
(Fcall_interactively): Bind cursor-in-echo-area to t for `k' and `K'.
Richard M. Stallman <rms@gnu.org>
parents:
16039
diff
changeset
|
594 } |
10540
161014ddd3c5
(Fcall_interactively): Define K mostly like k.
Richard M. Stallman <rms@gnu.org>
parents:
10345
diff
changeset
|
595 break; |
161014ddd3c5
(Fcall_interactively): Define K mostly like k.
Richard M. Stallman <rms@gnu.org>
parents:
10345
diff
changeset
|
596 |
161014ddd3c5
(Fcall_interactively): Define K mostly like k.
Richard M. Stallman <rms@gnu.org>
parents:
10345
diff
changeset
|
597 case 'K': /* Key sequence to be defined. */ |
16363
4097c59143f8
(Fcall_interactively): Bind cursor-in-echo-area to t for `k' and `K'.
Richard M. Stallman <rms@gnu.org>
parents:
16039
diff
changeset
|
598 { |
46293
1fb8f75062c6
Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents:
46006
diff
changeset
|
599 int speccount1 = SPECPDL_INDEX (); |
16363
4097c59143f8
(Fcall_interactively): Bind cursor-in-echo-area to t for `k' and `K'.
Richard M. Stallman <rms@gnu.org>
parents:
16039
diff
changeset
|
600 specbind (Qcursor_in_echo_area, Qt); |
4097c59143f8
(Fcall_interactively): Bind cursor-in-echo-area to t for `k' and `K'.
Richard M. Stallman <rms@gnu.org>
parents:
16039
diff
changeset
|
601 args[i] = Fread_key_sequence (build_string (callint_message), |
22932
0e0275920715
(Fcall_interactively): Pass new arg to Fread_key_sequence.
Richard M. Stallman <rms@gnu.org>
parents:
22485
diff
changeset
|
602 Qnil, Qt, Qnil, Qnil); |
16363
4097c59143f8
(Fcall_interactively): Bind cursor-in-echo-area to t for `k' and `K'.
Richard M. Stallman <rms@gnu.org>
parents:
16039
diff
changeset
|
603 teml = args[i]; |
4097c59143f8
(Fcall_interactively): Bind cursor-in-echo-area to t for `k' and `K'.
Richard M. Stallman <rms@gnu.org>
parents:
16039
diff
changeset
|
604 visargs[i] = Fkey_description (teml); |
4097c59143f8
(Fcall_interactively): Bind cursor-in-echo-area to t for `k' and `K'.
Richard M. Stallman <rms@gnu.org>
parents:
16039
diff
changeset
|
605 unbind_to (speccount1, Qnil); |
22485
b469abbc9984
(Fcall_interactively) <k, K>: If sequence ends in a down
Richard M. Stallman <rms@gnu.org>
parents:
22383
diff
changeset
|
606 |
b469abbc9984
(Fcall_interactively) <k, K>: If sequence ends in a down
Richard M. Stallman <rms@gnu.org>
parents:
22383
diff
changeset
|
607 /* If the key sequence ends with a down-event, |
b469abbc9984
(Fcall_interactively) <k, K>: If sequence ends in a down
Richard M. Stallman <rms@gnu.org>
parents:
22383
diff
changeset
|
608 discard the following up-event. */ |
b469abbc9984
(Fcall_interactively) <k, K>: If sequence ends in a down
Richard M. Stallman <rms@gnu.org>
parents:
22383
diff
changeset
|
609 teml = Faref (args[i], make_number (XINT (Flength (args[i])) - 1)); |
b469abbc9984
(Fcall_interactively) <k, K>: If sequence ends in a down
Richard M. Stallman <rms@gnu.org>
parents:
22383
diff
changeset
|
610 if (CONSP (teml)) |
25645
a14111a2a100
Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
24911
diff
changeset
|
611 teml = XCAR (teml); |
22485
b469abbc9984
(Fcall_interactively) <k, K>: If sequence ends in a down
Richard M. Stallman <rms@gnu.org>
parents:
22383
diff
changeset
|
612 if (SYMBOLP (teml)) |
b469abbc9984
(Fcall_interactively) <k, K>: If sequence ends in a down
Richard M. Stallman <rms@gnu.org>
parents:
22383
diff
changeset
|
613 { |
b469abbc9984
(Fcall_interactively) <k, K>: If sequence ends in a down
Richard M. Stallman <rms@gnu.org>
parents:
22383
diff
changeset
|
614 Lisp_Object tem2; |
b469abbc9984
(Fcall_interactively) <k, K>: If sequence ends in a down
Richard M. Stallman <rms@gnu.org>
parents:
22383
diff
changeset
|
615 |
b469abbc9984
(Fcall_interactively) <k, K>: If sequence ends in a down
Richard M. Stallman <rms@gnu.org>
parents:
22383
diff
changeset
|
616 teml = Fget (teml, intern ("event-symbol-elements")); |
24911
f477c5bb74c6
(Fcall_interactively): Ignore first element of
Andreas Schwab <schwab@suse.de>
parents:
23934
diff
changeset
|
617 /* Ignore first element, which is the base key. */ |
f477c5bb74c6
(Fcall_interactively): Ignore first element of
Andreas Schwab <schwab@suse.de>
parents:
23934
diff
changeset
|
618 tem2 = Fmemq (intern ("down"), Fcdr (teml)); |
22485
b469abbc9984
(Fcall_interactively) <k, K>: If sequence ends in a down
Richard M. Stallman <rms@gnu.org>
parents:
22383
diff
changeset
|
619 if (! NILP (tem2)) |
23064
32a7b4dc421e
(Fcall_interactively): Pass new args to Fread_event
Richard M. Stallman <rms@gnu.org>
parents:
22932
diff
changeset
|
620 Fread_event (Qnil, Qnil); |
22485
b469abbc9984
(Fcall_interactively) <k, K>: If sequence ends in a down
Richard M. Stallman <rms@gnu.org>
parents:
22383
diff
changeset
|
621 } |
16363
4097c59143f8
(Fcall_interactively): Bind cursor-in-echo-area to t for `k' and `K'.
Richard M. Stallman <rms@gnu.org>
parents:
16039
diff
changeset
|
622 } |
407 | 623 break; |
624 | |
1383
54028d2538a4
* callint.c (Fcall_interactively): Allow multiple 'e' specs.
Jim Blandy <jimb@redhat.com>
parents:
1347
diff
changeset
|
625 case 'e': /* The invoking event. */ |
13308
99457b67e20c
(Fcall_interactively): New arg KEYS.
Richard M. Stallman <rms@gnu.org>
parents:
13142
diff
changeset
|
626 if (next_event >= key_count) |
1383
54028d2538a4
* callint.c (Fcall_interactively): Allow multiple 'e' specs.
Jim Blandy <jimb@redhat.com>
parents:
1347
diff
changeset
|
627 error ("%s must be bound to an event with parameters", |
9145
dda75a4dbbfb
(quotify_arg, Fcall_interactively, Fprefix_numeric_value): Use type test
Karl Heuer <kwzh@gnu.org>
parents:
9100
diff
changeset
|
628 (SYMBOLP (function) |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
629 ? (char *) SDATA (SYMBOL_NAME (function)) |
1383
54028d2538a4
* callint.c (Fcall_interactively): Allow multiple 'e' specs.
Jim Blandy <jimb@redhat.com>
parents:
1347
diff
changeset
|
630 : "command")); |
13308
99457b67e20c
(Fcall_interactively): New arg KEYS.
Richard M. Stallman <rms@gnu.org>
parents:
13142
diff
changeset
|
631 args[i] = XVECTOR (keys)->contents[next_event++]; |
732 | 632 varies[i] = -1; |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1693
diff
changeset
|
633 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1693
diff
changeset
|
634 /* Find the next parameterized event. */ |
13308
99457b67e20c
(Fcall_interactively): New arg KEYS.
Richard M. Stallman <rms@gnu.org>
parents:
13142
diff
changeset
|
635 while (next_event < key_count |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1693
diff
changeset
|
636 && ! (EVENT_HAS_PARAMETERS |
13308
99457b67e20c
(Fcall_interactively): New arg KEYS.
Richard M. Stallman <rms@gnu.org>
parents:
13142
diff
changeset
|
637 (XVECTOR (keys)->contents[next_event]))) |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1693
diff
changeset
|
638 next_event++; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1693
diff
changeset
|
639 |
438 | 640 break; |
641 | |
407 | 642 case 'm': /* Value of mark. Does not do I/O. */ |
43039
531bd3a9e67a
(check_mark): New arg to specify clearer error message.
Richard M. Stallman <rms@gnu.org>
parents:
42272
diff
changeset
|
643 check_mark (0); |
407 | 644 /* visargs[i] = Qnil; */ |
10803
b8c4a1b7d484
(Fcall_interactively): Use markers temporarily in
Richard M. Stallman <rms@gnu.org>
parents:
10756
diff
changeset
|
645 args[i] = current_buffer->mark; |
407 | 646 varies[i] = 2; |
647 break; | |
648 | |
19548
b275154db0cb
(Finteractive): Document the code letter `M'.
Kenichi Handa <handa@m17n.org>
parents:
17958
diff
changeset
|
649 case 'M': /* String read via minibuffer with |
b275154db0cb
(Finteractive): Document the code letter `M'.
Kenichi Handa <handa@m17n.org>
parents:
17958
diff
changeset
|
650 inheriting the current input method. */ |
b275154db0cb
(Finteractive): Document the code letter `M'.
Kenichi Handa <handa@m17n.org>
parents:
17958
diff
changeset
|
651 args[i] = Fread_string (build_string (callint_message), |
b275154db0cb
(Finteractive): Document the code letter `M'.
Kenichi Handa <handa@m17n.org>
parents:
17958
diff
changeset
|
652 Qnil, Qnil, Qnil, Qt); |
b275154db0cb
(Finteractive): Document the code letter `M'.
Kenichi Handa <handa@m17n.org>
parents:
17958
diff
changeset
|
653 break; |
b275154db0cb
(Finteractive): Document the code letter `M'.
Kenichi Handa <handa@m17n.org>
parents:
17958
diff
changeset
|
654 |
407 | 655 case 'N': /* Prefix arg, else number from minibuffer */ |
485 | 656 if (!NILP (prefix_arg)) |
407 | 657 goto have_prefix_arg; |
658 case 'n': /* Read number from minibuffer. */ | |
15961
e26f5c2b75a6
(Fcall_interactively): For `N' and `n',
Richard M. Stallman <rms@gnu.org>
parents:
14847
diff
changeset
|
659 { |
e26f5c2b75a6
(Fcall_interactively): For `N' and `n',
Richard M. Stallman <rms@gnu.org>
parents:
14847
diff
changeset
|
660 int first = 1; |
e26f5c2b75a6
(Fcall_interactively): For `N' and `n',
Richard M. Stallman <rms@gnu.org>
parents:
14847
diff
changeset
|
661 do |
e26f5c2b75a6
(Fcall_interactively): For `N' and `n',
Richard M. Stallman <rms@gnu.org>
parents:
14847
diff
changeset
|
662 { |
e26f5c2b75a6
(Fcall_interactively): For `N' and `n',
Richard M. Stallman <rms@gnu.org>
parents:
14847
diff
changeset
|
663 Lisp_Object tem; |
e26f5c2b75a6
(Fcall_interactively): For `N' and `n',
Richard M. Stallman <rms@gnu.org>
parents:
14847
diff
changeset
|
664 if (! first) |
e26f5c2b75a6
(Fcall_interactively): For `N' and `n',
Richard M. Stallman <rms@gnu.org>
parents:
14847
diff
changeset
|
665 { |
e26f5c2b75a6
(Fcall_interactively): For `N' and `n',
Richard M. Stallman <rms@gnu.org>
parents:
14847
diff
changeset
|
666 message ("Please enter a number."); |
17958
31bda055d8fe
(Fcall_interactively): Pass new arg to sit_for.
Richard M. Stallman <rms@gnu.org>
parents:
17876
diff
changeset
|
667 sit_for (1, 0, 0, 0, 0); |
15961
e26f5c2b75a6
(Fcall_interactively): For `N' and `n',
Richard M. Stallman <rms@gnu.org>
parents:
14847
diff
changeset
|
668 } |
e26f5c2b75a6
(Fcall_interactively): For `N' and `n',
Richard M. Stallman <rms@gnu.org>
parents:
14847
diff
changeset
|
669 first = 0; |
e26f5c2b75a6
(Fcall_interactively): For `N' and `n',
Richard M. Stallman <rms@gnu.org>
parents:
14847
diff
changeset
|
670 |
e26f5c2b75a6
(Fcall_interactively): For `N' and `n',
Richard M. Stallman <rms@gnu.org>
parents:
14847
diff
changeset
|
671 tem = Fread_from_minibuffer (build_string (callint_message), |
19548
b275154db0cb
(Finteractive): Document the code letter `M'.
Kenichi Handa <handa@m17n.org>
parents:
17958
diff
changeset
|
672 Qnil, Qnil, Qnil, Qnil, Qnil, |
b275154db0cb
(Finteractive): Document the code letter `M'.
Kenichi Handa <handa@m17n.org>
parents:
17958
diff
changeset
|
673 Qnil); |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
674 if (! STRINGP (tem) || SCHARS (tem) == 0) |
15961
e26f5c2b75a6
(Fcall_interactively): For `N' and `n',
Richard M. Stallman <rms@gnu.org>
parents:
14847
diff
changeset
|
675 args[i] = Qnil; |
e26f5c2b75a6
(Fcall_interactively): For `N' and `n',
Richard M. Stallman <rms@gnu.org>
parents:
14847
diff
changeset
|
676 else |
e26f5c2b75a6
(Fcall_interactively): For `N' and `n',
Richard M. Stallman <rms@gnu.org>
parents:
14847
diff
changeset
|
677 args[i] = Fread (tem); |
e26f5c2b75a6
(Fcall_interactively): For `N' and `n',
Richard M. Stallman <rms@gnu.org>
parents:
14847
diff
changeset
|
678 } |
e26f5c2b75a6
(Fcall_interactively): For `N' and `n',
Richard M. Stallman <rms@gnu.org>
parents:
14847
diff
changeset
|
679 while (! NUMBERP (args[i])); |
e26f5c2b75a6
(Fcall_interactively): For `N' and `n',
Richard M. Stallman <rms@gnu.org>
parents:
14847
diff
changeset
|
680 } |
407 | 681 visargs[i] = last_minibuf_string; |
682 break; | |
683 | |
684 case 'P': /* Prefix arg in raw form. Does no I/O. */ | |
685 args[i] = prefix_arg; | |
686 /* visargs[i] = Qnil; */ | |
687 varies[i] = -1; | |
688 break; | |
689 | |
690 case 'p': /* Prefix arg converted to number. No I/O. */ | |
13764
db7fb833ba03
(Fcall_interactively): Handle an arg of form (FCN ARGS...).
Karl Heuer <kwzh@gnu.org>
parents:
13754
diff
changeset
|
691 have_prefix_arg: |
407 | 692 args[i] = Fprefix_numeric_value (prefix_arg); |
693 /* visargs[i] = Qnil; */ | |
694 varies[i] = -1; | |
695 break; | |
696 | |
697 case 'r': /* Region, point and mark as 2 args. */ | |
43039
531bd3a9e67a
(check_mark): New arg to specify clearer error message.
Richard M. Stallman <rms@gnu.org>
parents:
42272
diff
changeset
|
698 check_mark (1); |
20552
1a0cb8cd5615
(Fcall_interactively) <'d', 'r'>: Use set_marker_both.
Richard M. Stallman <rms@gnu.org>
parents:
19759
diff
changeset
|
699 set_marker_both (point_marker, Qnil, PT, PT_BYTE); |
407 | 700 /* visargs[i+1] = Qnil; */ |
701 foo = marker_position (current_buffer->mark); | |
702 /* visargs[i] = Qnil; */ | |
16039
855c8d8ba0f0
Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents:
15961
diff
changeset
|
703 args[i] = PT < foo ? point_marker : current_buffer->mark; |
407 | 704 varies[i] = 3; |
16039
855c8d8ba0f0
Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents:
15961
diff
changeset
|
705 args[++i] = PT > foo ? point_marker : current_buffer->mark; |
407 | 706 varies[i] = 4; |
707 break; | |
708 | |
19548
b275154db0cb
(Finteractive): Document the code letter `M'.
Kenichi Handa <handa@m17n.org>
parents:
17958
diff
changeset
|
709 case 's': /* String read via minibuffer without |
b275154db0cb
(Finteractive): Document the code letter `M'.
Kenichi Handa <handa@m17n.org>
parents:
17958
diff
changeset
|
710 inheriting the current input method. */ |
17806
96eb40f791e4
(Fcall_interactively): Pass extra arg to Fread_string.
Richard M. Stallman <rms@gnu.org>
parents:
17736
diff
changeset
|
711 args[i] = Fread_string (build_string (callint_message), |
19548
b275154db0cb
(Finteractive): Document the code letter `M'.
Kenichi Handa <handa@m17n.org>
parents:
17958
diff
changeset
|
712 Qnil, Qnil, Qnil, Qnil); |
407 | 713 break; |
714 | |
715 case 'S': /* Any symbol. */ | |
13142
297a0e21501a
(callint_message, callint_message_size): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
12582
diff
changeset
|
716 visargs[i] = Fread_string (build_string (callint_message), |
19548
b275154db0cb
(Finteractive): Document the code letter `M'.
Kenichi Handa <handa@m17n.org>
parents:
17958
diff
changeset
|
717 Qnil, Qnil, Qnil, Qnil); |
407 | 718 /* Passing args[i] directly stimulates compiler bug */ |
719 teml = visargs[i]; | |
720 args[i] = Fintern (teml, Qnil); | |
721 break; | |
722 | |
723 case 'v': /* Variable name: symbol that is | |
724 user-variable-p. */ | |
17736
8b30ef18c480
(Fcall_interactively): Pass new arg to
Richard M. Stallman <rms@gnu.org>
parents:
17024
diff
changeset
|
725 args[i] = Fread_variable (build_string (callint_message), Qnil); |
407 | 726 visargs[i] = last_minibuf_string; |
727 break; | |
728 | |
729 case 'x': /* Lisp expression read but not evaluated */ | |
13142
297a0e21501a
(callint_message, callint_message_size): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
12582
diff
changeset
|
730 args[i] = Fread_minibuffer (build_string (callint_message), Qnil); |
407 | 731 visargs[i] = last_minibuf_string; |
732 break; | |
733 | |
734 case 'X': /* Lisp expression read and evaluated */ | |
13142
297a0e21501a
(callint_message, callint_message_size): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
12582
diff
changeset
|
735 args[i] = Feval_minibuffer (build_string (callint_message), Qnil); |
407 | 736 visargs[i] = last_minibuf_string; |
737 break; | |
738 | |
17024
6cfba7f41dca
(doc-string of `interactive'): Describe new code
Karl Heuer <kwzh@gnu.org>
parents:
16363
diff
changeset
|
739 case 'Z': /* Coding-system symbol, or ignore the |
6cfba7f41dca
(doc-string of `interactive'): Describe new code
Karl Heuer <kwzh@gnu.org>
parents:
16363
diff
changeset
|
740 argument if no prefix */ |
6cfba7f41dca
(doc-string of `interactive'): Describe new code
Karl Heuer <kwzh@gnu.org>
parents:
16363
diff
changeset
|
741 if (NILP (prefix_arg)) |
6cfba7f41dca
(doc-string of `interactive'): Describe new code
Karl Heuer <kwzh@gnu.org>
parents:
16363
diff
changeset
|
742 { |
6cfba7f41dca
(doc-string of `interactive'): Describe new code
Karl Heuer <kwzh@gnu.org>
parents:
16363
diff
changeset
|
743 args[i] = Qnil; |
6cfba7f41dca
(doc-string of `interactive'): Describe new code
Karl Heuer <kwzh@gnu.org>
parents:
16363
diff
changeset
|
744 varies[i] = -1; |
6cfba7f41dca
(doc-string of `interactive'): Describe new code
Karl Heuer <kwzh@gnu.org>
parents:
16363
diff
changeset
|
745 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48630
diff
changeset
|
746 else |
17024
6cfba7f41dca
(doc-string of `interactive'): Describe new code
Karl Heuer <kwzh@gnu.org>
parents:
16363
diff
changeset
|
747 { |
6cfba7f41dca
(doc-string of `interactive'): Describe new code
Karl Heuer <kwzh@gnu.org>
parents:
16363
diff
changeset
|
748 args[i] |
6cfba7f41dca
(doc-string of `interactive'): Describe new code
Karl Heuer <kwzh@gnu.org>
parents:
16363
diff
changeset
|
749 = Fread_non_nil_coding_system (build_string (callint_message)); |
6cfba7f41dca
(doc-string of `interactive'): Describe new code
Karl Heuer <kwzh@gnu.org>
parents:
16363
diff
changeset
|
750 visargs[i] = last_minibuf_string; |
6cfba7f41dca
(doc-string of `interactive'): Describe new code
Karl Heuer <kwzh@gnu.org>
parents:
16363
diff
changeset
|
751 } |
6cfba7f41dca
(doc-string of `interactive'): Describe new code
Karl Heuer <kwzh@gnu.org>
parents:
16363
diff
changeset
|
752 break; |
6cfba7f41dca
(doc-string of `interactive'): Describe new code
Karl Heuer <kwzh@gnu.org>
parents:
16363
diff
changeset
|
753 |
6cfba7f41dca
(doc-string of `interactive'): Describe new code
Karl Heuer <kwzh@gnu.org>
parents:
16363
diff
changeset
|
754 case 'z': /* Coding-system symbol or nil */ |
19759
8dbed9d176fe
(Fcall_interactively): Pass new arg to Fread_coding_system.
Richard M. Stallman <rms@gnu.org>
parents:
19548
diff
changeset
|
755 args[i] = Fread_coding_system (build_string (callint_message), Qnil); |
17024
6cfba7f41dca
(doc-string of `interactive'): Describe new code
Karl Heuer <kwzh@gnu.org>
parents:
16363
diff
changeset
|
756 visargs[i] = last_minibuf_string; |
6cfba7f41dca
(doc-string of `interactive'): Describe new code
Karl Heuer <kwzh@gnu.org>
parents:
16363
diff
changeset
|
757 break; |
6cfba7f41dca
(doc-string of `interactive'): Describe new code
Karl Heuer <kwzh@gnu.org>
parents:
16363
diff
changeset
|
758 |
11278
25b2219c415c
(Fcall_interactively): `+' is reserved for user changes.
Richard M. Stallman <rms@gnu.org>
parents:
11009
diff
changeset
|
759 /* We have a case for `+' so we get an error |
25b2219c415c
(Fcall_interactively): `+' is reserved for user changes.
Richard M. Stallman <rms@gnu.org>
parents:
11009
diff
changeset
|
760 if anyone tries to define one here. */ |
25b2219c415c
(Fcall_interactively): `+' is reserved for user changes.
Richard M. Stallman <rms@gnu.org>
parents:
11009
diff
changeset
|
761 case '+': |
407 | 762 default: |
11278
25b2219c415c
(Fcall_interactively): `+' is reserved for user changes.
Richard M. Stallman <rms@gnu.org>
parents:
11009
diff
changeset
|
763 error ("Invalid control letter `%c' (%03o) in interactive calling string", |
407 | 764 *tem, *tem); |
765 } | |
766 | |
767 if (varies[i] == 0) | |
768 arg_from_tty = 1; | |
769 | |
9145
dda75a4dbbfb
(quotify_arg, Fcall_interactively, Fprefix_numeric_value): Use type test
Karl Heuer <kwzh@gnu.org>
parents:
9100
diff
changeset
|
770 if (NILP (visargs[i]) && STRINGP (args[i])) |
407 | 771 visargs[i] = args[i]; |
772 | |
773 tem = (unsigned char *) index (tem, '\n'); | |
774 if (tem) tem++; | |
775 else tem = (unsigned char *) ""; | |
776 } | |
873 | 777 unbind_to (speccount, Qnil); |
407 | 778 |
779 QUIT; | |
780 | |
781 args[0] = function; | |
782 | |
14062
16a05061fee3
(Fcall_interactively, Fprefix_numeric_value): Harmonize arguments with
Erik Naggum <erik@naggum.no>
parents:
13843
diff
changeset
|
783 if (arg_from_tty || !NILP (record_flag)) |
407 | 784 { |
785 visargs[0] = function; | |
438 | 786 for (i = 1; i < count + 1; i++) |
10803
b8c4a1b7d484
(Fcall_interactively): Use markers temporarily in
Richard M. Stallman <rms@gnu.org>
parents:
10756
diff
changeset
|
787 { |
b8c4a1b7d484
(Fcall_interactively): Use markers temporarily in
Richard M. Stallman <rms@gnu.org>
parents:
10756
diff
changeset
|
788 if (varies[i] > 0) |
b8c4a1b7d484
(Fcall_interactively): Use markers temporarily in
Richard M. Stallman <rms@gnu.org>
parents:
10756
diff
changeset
|
789 visargs[i] = Fcons (intern (callint_argfuns[varies[i]]), Qnil); |
b8c4a1b7d484
(Fcall_interactively): Use markers temporarily in
Richard M. Stallman <rms@gnu.org>
parents:
10756
diff
changeset
|
790 else |
b8c4a1b7d484
(Fcall_interactively): Use markers temporarily in
Richard M. Stallman <rms@gnu.org>
parents:
10756
diff
changeset
|
791 visargs[i] = quotify_arg (args[i]); |
b8c4a1b7d484
(Fcall_interactively): Use markers temporarily in
Richard M. Stallman <rms@gnu.org>
parents:
10756
diff
changeset
|
792 } |
407 | 793 Vcommand_history = Fcons (Flist (count + 1, visargs), |
794 Vcommand_history); | |
21721
46ffb5302c40
(Fcall_interactively): Truncate command-history here.
Richard M. Stallman <rms@gnu.org>
parents:
21514
diff
changeset
|
795 /* Don't keep command history around forever. */ |
44405
0ed69545b5f3
(Fcall_interactively): Use INTEGERP instead of
Gerd Moellmann <gerd@gnu.org>
parents:
43039
diff
changeset
|
796 if (INTEGERP (Vhistory_length) && XINT (Vhistory_length) > 0) |
21721
46ffb5302c40
(Fcall_interactively): Truncate command-history here.
Richard M. Stallman <rms@gnu.org>
parents:
21514
diff
changeset
|
797 { |
46ffb5302c40
(Fcall_interactively): Truncate command-history here.
Richard M. Stallman <rms@gnu.org>
parents:
21514
diff
changeset
|
798 teml = Fnthcdr (Vhistory_length, Vcommand_history); |
46ffb5302c40
(Fcall_interactively): Truncate command-history here.
Richard M. Stallman <rms@gnu.org>
parents:
21514
diff
changeset
|
799 if (CONSP (teml)) |
39973
579177964efa
Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents:
39945
diff
changeset
|
800 XSETCDR (teml, Qnil); |
21721
46ffb5302c40
(Fcall_interactively): Truncate command-history here.
Richard M. Stallman <rms@gnu.org>
parents:
21514
diff
changeset
|
801 } |
407 | 802 } |
803 | |
10803
b8c4a1b7d484
(Fcall_interactively): Use markers temporarily in
Richard M. Stallman <rms@gnu.org>
parents:
10756
diff
changeset
|
804 /* If we used a marker to hold point, mark, or an end of the region, |
b8c4a1b7d484
(Fcall_interactively): Use markers temporarily in
Richard M. Stallman <rms@gnu.org>
parents:
10756
diff
changeset
|
805 temporarily, convert it to an integer now. */ |
10917
283f18021929
(Fcall_interactively): Fix Feb 22 change.
Richard M. Stallman <rms@gnu.org>
parents:
10904
diff
changeset
|
806 for (i = 1; i <= count; i++) |
10803
b8c4a1b7d484
(Fcall_interactively): Use markers temporarily in
Richard M. Stallman <rms@gnu.org>
parents:
10756
diff
changeset
|
807 if (varies[i] >= 1 && varies[i] <= 4) |
b8c4a1b7d484
(Fcall_interactively): Use markers temporarily in
Richard M. Stallman <rms@gnu.org>
parents:
10756
diff
changeset
|
808 XSETINT (args[i], marker_position (args[i])); |
b8c4a1b7d484
(Fcall_interactively): Use markers temporarily in
Richard M. Stallman <rms@gnu.org>
parents:
10756
diff
changeset
|
809 |
48527
ba7cb9f8dfc3
(Fcall_interactively): If a command fails because
Richard M. Stallman <rms@gnu.org>
parents:
48150
diff
changeset
|
810 if (record_then_fail) |
ba7cb9f8dfc3
(Fcall_interactively): If a command fails because
Richard M. Stallman <rms@gnu.org>
parents:
48150
diff
changeset
|
811 Fbarf_if_buffer_read_only (); |
ba7cb9f8dfc3
(Fcall_interactively): If a command fails because
Richard M. Stallman <rms@gnu.org>
parents:
48150
diff
changeset
|
812 |
11345
c4adea8f7543
(Fcall_interactively): Call single_kboard_state
Richard M. Stallman <rms@gnu.org>
parents:
11280
diff
changeset
|
813 single_kboard_state (); |
10819
4768cffd88e5
(Fcall_interactively): If the display hasn't already been locked by reading
Karl Heuer <kwzh@gnu.org>
parents:
10803
diff
changeset
|
814 |
407 | 815 { |
816 Lisp_Object val; | |
817 specbind (Qcommand_debug_status, Qnil); | |
818 | |
819 val = Ffuncall (count + 1, args); | |
820 UNGCPRO; | |
821 return unbind_to (speccount, val); | |
822 } | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48630
diff
changeset
|
823 } |
407 | 824 |
825 DEFUN ("prefix-numeric-value", Fprefix_numeric_value, Sprefix_numeric_value, | |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
826 1, 1, 0, |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
827 doc: /* Return numeric meaning of raw prefix argument RAW. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
828 A raw prefix argument is what you get from `(interactive "P")'. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
829 Its numeric meaning is what you would get from `(interactive "p")'. */) |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
830 (raw) |
407 | 831 Lisp_Object raw; |
832 { | |
833 Lisp_Object val; | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48630
diff
changeset
|
834 |
485 | 835 if (NILP (raw)) |
9298
6e3aea54fc01
(Fcall_interactively, Fprefix_numeric_value): Don't use XFASTINT as an lvalue.
Karl Heuer <kwzh@gnu.org>
parents:
9290
diff
changeset
|
836 XSETFASTINT (val, 1); |
819
5bbabfcef929
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
732
diff
changeset
|
837 else if (EQ (raw, Qminus)) |
407 | 838 XSETINT (val, -1); |
25645
a14111a2a100
Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
24911
diff
changeset
|
839 else if (CONSP (raw) && INTEGERP (XCAR (raw))) |
a14111a2a100
Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
24911
diff
changeset
|
840 XSETINT (val, XINT (XCAR (raw))); |
9145
dda75a4dbbfb
(quotify_arg, Fcall_interactively, Fprefix_numeric_value): Use type test
Karl Heuer <kwzh@gnu.org>
parents:
9100
diff
changeset
|
841 else if (INTEGERP (raw)) |
407 | 842 val = raw; |
843 else | |
9298
6e3aea54fc01
(Fcall_interactively, Fprefix_numeric_value): Don't use XFASTINT as an lvalue.
Karl Heuer <kwzh@gnu.org>
parents:
9290
diff
changeset
|
844 XSETFASTINT (val, 1); |
407 | 845 |
846 return val; | |
847 } | |
848 | |
21514 | 849 void |
407 | 850 syms_of_callint () |
851 { | |
10803
b8c4a1b7d484
(Fcall_interactively): Use markers temporarily in
Richard M. Stallman <rms@gnu.org>
parents:
10756
diff
changeset
|
852 point_marker = Fmake_marker (); |
b8c4a1b7d484
(Fcall_interactively): Use markers temporarily in
Richard M. Stallman <rms@gnu.org>
parents:
10756
diff
changeset
|
853 staticpro (&point_marker); |
b8c4a1b7d484
(Fcall_interactively): Use markers temporarily in
Richard M. Stallman <rms@gnu.org>
parents:
10756
diff
changeset
|
854 |
1498
098464e977d6
(preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents:
1425
diff
changeset
|
855 preserved_fns = Fcons (intern ("region-beginning"), |
098464e977d6
(preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents:
1425
diff
changeset
|
856 Fcons (intern ("region-end"), |
098464e977d6
(preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents:
1425
diff
changeset
|
857 Fcons (intern ("point"), |
098464e977d6
(preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents:
1425
diff
changeset
|
858 Fcons (intern ("mark"), Qnil)))); |
098464e977d6
(preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents:
1425
diff
changeset
|
859 staticpro (&preserved_fns); |
098464e977d6
(preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents:
1425
diff
changeset
|
860 |
098464e977d6
(preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents:
1425
diff
changeset
|
861 Qlist = intern ("list"); |
098464e977d6
(preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents:
1425
diff
changeset
|
862 staticpro (&Qlist); |
13447
8c89b569cfa9
(syms_of_callint): Set up Qlet, Qletx, Qsave_excursion.
Richard M. Stallman <rms@gnu.org>
parents:
13308
diff
changeset
|
863 Qlet = intern ("let"); |
8c89b569cfa9
(syms_of_callint): Set up Qlet, Qletx, Qsave_excursion.
Richard M. Stallman <rms@gnu.org>
parents:
13308
diff
changeset
|
864 staticpro (&Qlet); |
8c89b569cfa9
(syms_of_callint): Set up Qlet, Qletx, Qsave_excursion.
Richard M. Stallman <rms@gnu.org>
parents:
13308
diff
changeset
|
865 Qletx = intern ("let*"); |
8c89b569cfa9
(syms_of_callint): Set up Qlet, Qletx, Qsave_excursion.
Richard M. Stallman <rms@gnu.org>
parents:
13308
diff
changeset
|
866 staticpro (&Qletx); |
8c89b569cfa9
(syms_of_callint): Set up Qlet, Qletx, Qsave_excursion.
Richard M. Stallman <rms@gnu.org>
parents:
13308
diff
changeset
|
867 Qsave_excursion = intern ("save-excursion"); |
8c89b569cfa9
(syms_of_callint): Set up Qlet, Qletx, Qsave_excursion.
Richard M. Stallman <rms@gnu.org>
parents:
13308
diff
changeset
|
868 staticpro (&Qsave_excursion); |
48150
2b5f7e1254d1
(Fcall_interactively): New local filter_specs.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
869 Qprogn = intern ("progn"); |
2b5f7e1254d1
(Fcall_interactively): New local filter_specs.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
870 staticpro (&Qprogn); |
1498
098464e977d6
(preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents:
1425
diff
changeset
|
871 |
407 | 872 Qminus = intern ("-"); |
873 staticpro (&Qminus); | |
874 | |
9100 | 875 Qplus = intern ("+"); |
876 staticpro (&Qplus); | |
877 | |
407 | 878 Qcall_interactively = intern ("call-interactively"); |
879 staticpro (&Qcall_interactively); | |
880 | |
881 Qcommand_debug_status = intern ("command-debug-status"); | |
882 staticpro (&Qcommand_debug_status); | |
883 | |
873 | 884 Qenable_recursive_minibuffers = intern ("enable-recursive-minibuffers"); |
885 staticpro (&Qenable_recursive_minibuffers); | |
886 | |
10279
89cf458ed188
(Vmouse_leave_buffer_hook, Qmouse_leave_buffer_hook): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
9342
diff
changeset
|
887 Qmouse_leave_buffer_hook = intern ("mouse-leave-buffer-hook"); |
89cf458ed188
(Vmouse_leave_buffer_hook, Qmouse_leave_buffer_hook): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
9342
diff
changeset
|
888 staticpro (&Qmouse_leave_buffer_hook); |
89cf458ed188
(Vmouse_leave_buffer_hook, Qmouse_leave_buffer_hook): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
9342
diff
changeset
|
889 |
13142
297a0e21501a
(callint_message, callint_message_size): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
12582
diff
changeset
|
890 callint_message_size = 100; |
297a0e21501a
(callint_message, callint_message_size): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
12582
diff
changeset
|
891 callint_message = (char *) xmalloc (callint_message_size); |
297a0e21501a
(callint_message, callint_message_size): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
12582
diff
changeset
|
892 |
297a0e21501a
(callint_message, callint_message_size): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
12582
diff
changeset
|
893 |
12117
3fa5b6e7ad4b
(current_prefix_partial): Deleted.
Karl Heuer <kwzh@gnu.org>
parents:
11911
diff
changeset
|
894 DEFVAR_KBOARD ("prefix-arg", Vprefix_arg, |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
895 doc: /* The value of the prefix argument for the next editing command. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
896 It may be a number, or the symbol `-' for just a minus sign as arg, |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
897 or a list whose car is a number for just one or more C-u's |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
898 or nil if no argument has been specified. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
899 |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
900 You cannot examine this variable to find the argument for this command |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
901 since it has been set to nil by the time you can look. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
902 Instead, you should use the variable `current-prefix-arg', although |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
903 normally commands can get this prefix argument with (interactive "P"). */); |
10857
2b9faff73319
(Fcall_interactively, syms_of_callint, Vprefix_arg, Vcurrent_prefix_arg): Undo
Karl Heuer <kwzh@gnu.org>
parents:
10846
diff
changeset
|
904 |
22383
9ef0fe84c5ed
(syms_of_callint): Set up Lisp variable.
Richard M. Stallman <rms@gnu.org>
parents:
22244
diff
changeset
|
905 DEFVAR_KBOARD ("last-prefix-arg", Vlast_prefix_arg, |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
906 doc: /* The value of the prefix argument for the previous editing command. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
907 See `prefix-arg' for the meaning of the value. */); |
22383
9ef0fe84c5ed
(syms_of_callint): Set up Lisp variable.
Richard M. Stallman <rms@gnu.org>
parents:
22244
diff
changeset
|
908 |
10857
2b9faff73319
(Fcall_interactively, syms_of_callint, Vprefix_arg, Vcurrent_prefix_arg): Undo
Karl Heuer <kwzh@gnu.org>
parents:
10846
diff
changeset
|
909 DEFVAR_LISP ("current-prefix-arg", &Vcurrent_prefix_arg, |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
910 doc: /* The value of the prefix argument for this editing command. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
911 It may be a number, or the symbol `-' for just a minus sign as arg, |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
912 or a list whose car is a number for just one or more C-u's |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
913 or nil if no argument has been specified. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
914 This is what `(interactive \"P\")' returns. */); |
10857
2b9faff73319
(Fcall_interactively, syms_of_callint, Vprefix_arg, Vcurrent_prefix_arg): Undo
Karl Heuer <kwzh@gnu.org>
parents:
10846
diff
changeset
|
915 Vcurrent_prefix_arg = Qnil; |
2b9faff73319
(Fcall_interactively, syms_of_callint, Vprefix_arg, Vcurrent_prefix_arg): Undo
Karl Heuer <kwzh@gnu.org>
parents:
10846
diff
changeset
|
916 |
407 | 917 DEFVAR_LISP ("command-history", &Vcommand_history, |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
918 doc: /* List of recent commands that read arguments from terminal. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
919 Each command is represented as a form to evaluate. */); |
407 | 920 Vcommand_history = Qnil; |
921 | |
922 DEFVAR_LISP ("command-debug-status", &Vcommand_debug_status, | |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
923 doc: /* Debugging status of current interactive command. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
924 Bound each time `call-interactively' is called; |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
925 may be set by the debugger as a reminder for itself. */); |
407 | 926 Vcommand_debug_status = Qnil; |
927 | |
4046
79184227e7f9
(syms_of_callint): Fix DEFVAR_LISP for Vmark_even_if_inactive to use right
Roland McGrath <roland@gnu.org>
parents:
4039
diff
changeset
|
928 DEFVAR_LISP ("mark-even-if-inactive", &Vmark_even_if_inactive, |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
929 doc: /* *Non-nil means you can use the mark even when inactive. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
930 This option makes a difference in Transient Mark mode. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
931 When the option is non-nil, deactivation of the mark |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
932 turns off region highlighting, but commands that use the mark |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
933 behave as if the mark were still active. */); |
3975
718280a1ba74
(Vmark_even_if_inactive): New var, with Lisp variable.
Richard M. Stallman <rms@gnu.org>
parents:
2048
diff
changeset
|
934 Vmark_even_if_inactive = Qnil; |
718280a1ba74
(Vmark_even_if_inactive): New var, with Lisp variable.
Richard M. Stallman <rms@gnu.org>
parents:
2048
diff
changeset
|
935 |
10279
89cf458ed188
(Vmouse_leave_buffer_hook, Qmouse_leave_buffer_hook): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
9342
diff
changeset
|
936 DEFVAR_LISP ("mouse-leave-buffer-hook", &Vmouse_leave_buffer_hook, |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
937 doc: /* Hook to run when about to switch windows with a mouse command. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
938 Its purpose is to give temporary modes such as Isearch mode |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
939 a way to turn themselves off when a mouse command switches windows. */); |
10279
89cf458ed188
(Vmouse_leave_buffer_hook, Qmouse_leave_buffer_hook): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
9342
diff
changeset
|
940 Vmouse_leave_buffer_hook = Qnil; |
89cf458ed188
(Vmouse_leave_buffer_hook, Qmouse_leave_buffer_hook): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
9342
diff
changeset
|
941 |
407 | 942 defsubr (&Sinteractive); |
943 defsubr (&Scall_interactively); | |
944 defsubr (&Sprefix_numeric_value); | |
945 } |