annotate src/callint.c @ 4413:5a00cec8e9b0

(fill-region-as-paragraph): When we take one word after the fill column, don't stop at period with just one space. When checking whether at beginning of line, if no fill prefix, ignore intervening whitespace.
author Richard M. Stallman <rms@gnu.org>
date Mon, 02 Aug 1993 05:55:56 +0000
parents 79184227e7f9
children 1fc792473491
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
1 /* Call a Lisp function interactively.
2048
8cf58355e8a1 (check_mark): Error if mark is not active.
Richard M. Stallman <rms@gnu.org>
parents: 1926
diff changeset
2 Copyright (C) 1985, 1986, 1993 Free Software Foundation, Inc.
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
3
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
4 This file is part of GNU Emacs.
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
5
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
6 GNU Emacs is free software; you can redistribute it and/or modify
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
7 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
8 the Free Software Foundation; either version 2, or (at your option)
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
9 any later version.
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
10
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
11 GNU Emacs is distributed in the hope that it will be useful,
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
14 GNU General Public License for more details.
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
15
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
17 along with GNU Emacs; see the file COPYING. If not, write to
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
19
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
20
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
21 #include "config.h"
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
22 #include "lisp.h"
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
23 #include "buffer.h"
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
24 #include "commands.h"
516
ccadad491483 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
25 #include "keyboard.h"
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
26 #include "window.h"
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
27 #include "mocklisp.h"
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
28
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
29 extern char *index ();
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
30
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
31 Lisp_Object Vprefix_arg, Vcurrent_prefix_arg, Qminus;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
32 Lisp_Object Qcall_interactively;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
33 Lisp_Object Vcommand_history;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
34
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
35 Lisp_Object Vcommand_debug_status, Qcommand_debug_status;
873
0abaf590e0ca entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 863
diff changeset
36 Lisp_Object Qenable_recursive_minibuffers;
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
37
3975
718280a1ba74 (Vmark_even_if_inactive): New var, with Lisp variable.
Richard M. Stallman <rms@gnu.org>
parents: 2048
diff changeset
38 /* 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
39 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
40 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
41
1498
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
42 Lisp_Object Qlist;
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
43 Lisp_Object preserved_fns;
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
44
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
45 /* This comment supplies the doc string for interactive,
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
46 for make-docfile to see. We cannot put this in the real DEFUN
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
47 due to limits in the Unix cpp.
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
48
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
49 DEFUN ("interactive", Ffoo, Sfoo, 0, 0, 0,
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
50 "Specify a way of parsing arguments for interactive use of a function.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
51 For example, write\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
52 (defun foo (arg) \"Doc string\" (interactive \"p\") ...use arg...)\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
53 to make ARG be the prefix argument when `foo' is called as a command.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
54 The \"call\" to `interactive' is actually a declaration rather than a function;\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
55 it tells `call-interactively' how to read arguments\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
56 to pass to the function.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
57 When actually called, `interactive' just returns nil.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
58 \n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
59 The argument of `interactive' is usually a string containing a code letter\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
60 followed by a prompt. (Some code letters do not use I/O to get\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
61 the argument and do not need prompts.) To prompt for multiple arguments,\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
62 give a code letter, its prompt, a newline, and another code letter, etc.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
63 Prompts are passed to format, and may use % escapes to print the\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
64 arguments that have already been read.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
65 If the argument is not a string, it is evaluated to get a list of\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
66 arguments to pass to the function.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
67 Just `(interactive)' means pass no args when calling interactively.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
68 \nCode letters available are:\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
69 a -- Function name: symbol with a function definition.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
70 b -- Name of existing buffer.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
71 B -- Name of buffer, possibly nonexistent.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
72 c -- Character.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
73 C -- Command name: symbol with interactive function definition.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
74 d -- Value of point as number. Does not do I/O.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
75 D -- Directory name.\n\
2048
8cf58355e8a1 (check_mark): Error if mark is not active.
Richard M. Stallman <rms@gnu.org>
parents: 1926
diff changeset
76 e -- Parametrized event (i.e., one that's a list) that invoked this command.\n\
8cf58355e8a1 (check_mark): Error if mark is not active.
Richard M. Stallman <rms@gnu.org>
parents: 1926
diff changeset
77 If used more than once, the Nth `e' returns the Nth parameterized event.\n\
8cf58355e8a1 (check_mark): Error if mark is not active.
Richard M. Stallman <rms@gnu.org>
parents: 1926
diff changeset
78 This skips events that are integers or symbols.\n\
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
79 f -- Existing file name.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
80 F -- Possibly nonexistent file name.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
81 k -- Key sequence (string).\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
82 m -- Value of mark as number. Does not do I/O.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
83 n -- Number read using minibuffer.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
84 N -- Prefix arg converted to number, or if none, do like code `n'.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
85 p -- Prefix arg converted to number. Does not do I/O.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
86 P -- Prefix arg in raw form. Does not do I/O.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
87 r -- Region: point and mark as 2 numeric args, smallest first. Does no I/O.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
88 s -- Any string.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
89 S -- Any symbol.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
90 v -- Variable name: symbol that is user-variable-p.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
91 x -- Lisp expression read but not evaluated.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
92 X -- Lisp expression read and evaluated.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
93 In addition, if the string begins with `*'\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
94 then an error is signaled if the buffer is read-only.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
95 This happens before reading any arguments.\n\
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1693
diff changeset
96 If the string begins with `@', then Emacs searches the key sequence\n\
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1693
diff changeset
97 which invoked the command for its first mouse click (or any other\n\
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1693
diff changeset
98 event which specifies a window), and selects that window before\n\
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1693
diff changeset
99 reading any arguments. You may use both `@' and `*'; they are\n\
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1693
diff changeset
100 processed in the order that they appear." */
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
101
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
102 /* ARGSUSED */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
103 DEFUN ("interactive", Finteractive, Sinteractive, 0, UNEVALLED, 0,
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
104 0 /* See immediately above */)
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
105 (args)
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
106 Lisp_Object args;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
107 {
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
108 return Qnil;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
109 }
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
110
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
111 /* Quotify EXP: if EXP is constant, return it.
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
112 If EXP is not constant, return (quote EXP). */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
113 Lisp_Object
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
114 quotify_arg (exp)
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
115 register Lisp_Object exp;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
116 {
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
117 if (XTYPE (exp) != Lisp_Int && XTYPE (exp) != Lisp_String
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 438
diff changeset
118 && !NILP (exp) && !EQ (exp, Qt))
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
119 return Fcons (Qquote, Fcons (exp, Qnil));
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
120
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
121 return exp;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
122 }
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
123
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
124 /* Modify EXP by quotifying each element (except the first). */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
125 Lisp_Object
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
126 quotify_args (exp)
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
127 Lisp_Object exp;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
128 {
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
129 register Lisp_Object tail;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
130 register struct Lisp_Cons *ptr;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
131 for (tail = exp; CONSP (tail); tail = ptr->cdr)
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
132 {
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
133 ptr = XCONS (tail);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
134 ptr->car = quotify_arg (ptr->car);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
135 }
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
136 return exp;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
137 }
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
138
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
139 char *callint_argfuns[]
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
140 = {"", "point", "mark", "region-beginning", "region-end"};
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
141
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
142 static void
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
143 check_mark ()
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
144 {
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
145 Lisp_Object tem = Fmarker_buffer (current_buffer->mark);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 438
diff changeset
146 if (NILP (tem) || (XBUFFER (tem) != current_buffer))
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
147 error ("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
148 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
149 && 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
150 Fsignal (Qmark_inactive, Qnil);
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
151 }
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
152
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
153
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
154 DEFUN ("call-interactively", Fcall_interactively, Scall_interactively, 1, 2, 0,
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
155 "Call FUNCTION, reading args according to its interactive calling specs.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
156 The function contains a specification of how to do the argument reading.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
157 In the case of user-defined functions, this is specified by placing a call\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
158 to the function `interactive' at the top level of the function body.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
159 See `interactive'.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
160 \n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
161 Optional second arg RECORD-FLAG non-nil\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
162 means unconditionally put this command in the command-history.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
163 Otherwise, this is done only if an arg is read using the minibuffer.")
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
164 (function, record)
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
165 Lisp_Object function, record;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
166 {
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
167 Lisp_Object *args, *visargs;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
168 unsigned char **argstrings;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
169 Lisp_Object fun;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
170 Lisp_Object funcar;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
171 Lisp_Object specs;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
172 Lisp_Object teml;
873
0abaf590e0ca entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 863
diff changeset
173 Lisp_Object enable;
0abaf590e0ca entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 863
diff changeset
174 int speccount = specpdl_ptr - specpdl;
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
175
1383
54028d2538a4 * callint.c (Fcall_interactively): Allow multiple 'e' specs.
Jim Blandy <jimb@redhat.com>
parents: 1347
diff changeset
176 /* 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
177 the 'e' interactive code. */
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1693
diff changeset
178 int next_event;
1383
54028d2538a4 * callint.c (Fcall_interactively): Allow multiple 'e' specs.
Jim Blandy <jimb@redhat.com>
parents: 1347
diff changeset
179
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
180 Lisp_Object prefix_arg;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
181 unsigned char *string;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
182 unsigned char *tem;
438
8b54ee2c82d6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 407
diff changeset
183
8b54ee2c82d6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 407
diff changeset
184 /* If varies[i] > 0, the i'th argument shouldn't just have its value
8b54ee2c82d6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 407
diff changeset
185 in this call quoted in the command history. It should be
8b54ee2c82d6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 407
diff changeset
186 recorded as a call to the function named callint_argfuns[varies[i]]. */
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
187 int *varies;
438
8b54ee2c82d6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 407
diff changeset
188
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
189 register int i, j;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
190 int count, foo;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
191 char prompt[100];
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
192 char prompt1[100];
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
193 char *tem1;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
194 int arg_from_tty = 0;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
195 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
196
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
197 /* Save this now, since use of minibuffer will clobber it. */
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
198 prefix_arg = Vcurrent_prefix_arg;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
199
617
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 516
diff changeset
200 retry:
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
201
1115
eb7f1ab33a9d * callint.c (Fcall_interactively): Remove the 'K' interactive
Jim Blandy <jimb@redhat.com>
parents: 1084
diff changeset
202 if (XTYPE (function) == Lisp_Symbol)
eb7f1ab33a9d * callint.c (Fcall_interactively): Remove the 'K' interactive
Jim Blandy <jimb@redhat.com>
parents: 1084
diff changeset
203 enable = Fget (function, Qenable_recursive_minibuffers);
873
0abaf590e0ca entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 863
diff changeset
204
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 644
diff changeset
205 fun = indirect_function (function);
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
206
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
207 specs = Qnil;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
208 string = 0;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
209
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
210 /* Decode the kind of function. Either handle it and return,
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
211 or go to `lose' if not interactive, or go to `retry'
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
212 to specify a different function, or set either STRING or SPECS. */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
213
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
214 if (XTYPE (fun) == Lisp_Subr)
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
215 {
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
216 string = (unsigned char *) XSUBR (fun)->prompt;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
217 if (!string)
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
218 {
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
219 lose:
1926
952f2a18f83d * callint.c (Fcall_interactively): Pass the correct number of
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
220 function = wrong_type_argument (Qcommandp, function);
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
221 goto retry;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
222 }
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
223 if ((int) string == 1)
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
224 /* Let SPECS (which is nil) be used as the args. */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
225 string = 0;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
226 }
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
227 else if (XTYPE (fun) == Lisp_Compiled)
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
228 {
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
229 if (XVECTOR (fun)->size <= COMPILED_INTERACTIVE)
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
230 goto lose;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
231 specs = XVECTOR (fun)->contents[COMPILED_INTERACTIVE];
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
232 }
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
233 else if (!CONSP (fun))
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
234 goto lose;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
235 else if (funcar = Fcar (fun), EQ (funcar, Qautoload))
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
236 {
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
237 GCPRO2 (function, prefix_arg);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
238 do_autoload (fun, function);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
239 UNGCPRO;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
240 goto retry;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
241 }
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
242 else if (EQ (funcar, Qlambda))
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
243 {
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
244 specs = Fassq (Qinteractive, Fcdr (Fcdr (fun)));
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 438
diff changeset
245 if (NILP (specs))
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
246 goto lose;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
247 specs = Fcar (Fcdr (specs));
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
248 }
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
249 else if (EQ (funcar, Qmocklisp))
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
250 return ml_apply (fun, Qinteractive);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
251 else
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
252 goto lose;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
253
617
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 516
diff changeset
254 /* If either specs or string is set to a string, use it. */
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
255 if (XTYPE (specs) == Lisp_String)
617
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 516
diff changeset
256 {
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 516
diff changeset
257 /* Make a copy of string so that if a GC relocates specs,
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 516
diff changeset
258 `string' will still be valid. */
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
259 string = (unsigned char *) alloca (XSTRING (specs)->size + 1);
617
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 516
diff changeset
260 bcopy (XSTRING (specs)->data, string, XSTRING (specs)->size + 1);
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 516
diff changeset
261 }
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
262 else if (string == 0)
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
263 {
1498
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
264 Lisp_Object input;
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
265 i = num_input_chars;
1498
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
266 input = specs;
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
267 /* Compute the arg values using the user's expression. */
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
268 specs = Feval (specs);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 438
diff changeset
269 if (i != num_input_chars || !NILP (record))
1498
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
270 {
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
271 /* We should record this command on the command history. */
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
272 Lisp_Object values, car;
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
273 /* 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
274 and turn them into things we can eval. */
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
275 values = quotify_args (Fcopy_sequence (specs));
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
276 /* 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
277 look for elements that were computed with (region-beginning)
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
278 or (region-end), and put those expressions into VALUES
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
279 instead of the present values. */
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
280 car = Fcar (input);
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
281 if (EQ (car, Qlist))
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
282 {
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
283 Lisp_Object intail, valtail;
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
284 for (intail = Fcdr (input), valtail = values;
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
285 CONSP (valtail);
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
286 intail = Fcdr (intail), valtail = Fcdr (valtail))
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
287 {
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
288 Lisp_Object elt;
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
289 elt = Fcar (intail);
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
290 if (CONSP (elt))
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
291 {
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
292 Lisp_Object presflag;
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
293 presflag = Fmemq (Fcar (elt), preserved_fns);
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
294 if (!NILP (presflag))
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
295 Fsetcar (valtail, Fcar (intail));
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
296 }
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
297 }
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
298 }
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
299 Vcommand_history
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
300 = Fcons (Fcons (function, values), Vcommand_history);
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
301 }
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
302 return apply1 (function, specs);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
303 }
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
304
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
305 /* Here if function specifies a string to control parsing the defaults */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
306
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1693
diff changeset
307 /* Set next_event to point to the first event with parameters. */
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1693
diff changeset
308 for (next_event = 0; next_event < this_command_key_count; next_event++)
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1693
diff changeset
309 if (EVENT_HAS_PARAMETERS
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1693
diff changeset
310 (XVECTOR (this_command_keys)->contents[next_event]))
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1693
diff changeset
311 break;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1693
diff changeset
312
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
313 /* Handle special starting chars `*' and `@'. */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
314 while (1)
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
315 {
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
316 if (*string == '*')
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
317 {
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
318 string++;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 438
diff changeset
319 if (!NILP (current_buffer->read_only))
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
320 Fbarf_if_buffer_read_only ();
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
321 }
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
322 else if (*string == '@')
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
323 {
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1693
diff changeset
324 Lisp_Object event =
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1693
diff changeset
325 XVECTOR (this_command_keys)->contents[next_event];
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1693
diff changeset
326
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1693
diff changeset
327 if (EVENT_HAS_PARAMETERS (event)
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1693
diff changeset
328 && XTYPE (event = XCONS (event)->cdr) == Lisp_Cons
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1693
diff changeset
329 && XTYPE (event = XCONS (event)->car) == Lisp_Cons
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1693
diff changeset
330 && XTYPE (event = XCONS (event)->car) == Lisp_Window)
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1693
diff changeset
331 Fselect_window (event);
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
332 string++;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
333 }
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
334 else break;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
335 }
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
336
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
337 /* Count the number of arguments the interactive spec would have
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
338 us give to the function. */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
339 tem = string;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
340 for (j = 0; *tem; j++)
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
341 {
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
342 /* 'r' specifications ("point and mark as 2 numeric args")
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
343 produce *two* arguments. */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
344 if (*tem == 'r') j++;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
345 tem = (unsigned char *) index (tem, '\n');
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
346 if (tem)
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
347 tem++;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
348 else
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
349 tem = (unsigned char *) "";
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
350 }
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
351 count = j;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
352
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
353 args = (Lisp_Object *) alloca ((count + 1) * sizeof (Lisp_Object));
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
354 visargs = (Lisp_Object *) alloca ((count + 1) * sizeof (Lisp_Object));
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
355 argstrings = (unsigned char **) alloca ((count + 1) * sizeof (char *));
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
356 varies = (int *) alloca ((count + 1) * sizeof (int));
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
357
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
358 for (i = 0; i < (count + 1); i++)
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
359 {
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
360 args[i] = Qnil;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
361 visargs[i] = Qnil;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
362 varies[i] = 0;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
363 }
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
364
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
365 GCPRO4 (prefix_arg, function, *args, *visargs);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
366 gcpro3.nvars = (count + 1);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
367 gcpro4.nvars = (count + 1);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
368
873
0abaf590e0ca entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 863
diff changeset
369 if (!NILP (enable))
0abaf590e0ca entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 863
diff changeset
370 specbind (Qenable_recursive_minibuffers, Qt);
0abaf590e0ca entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 863
diff changeset
371
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
372 tem = string;
617
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 516
diff changeset
373 for (i = 1; *tem; i++)
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
374 {
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
375 strncpy (prompt1, tem + 1, sizeof prompt1 - 1);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
376 prompt1[sizeof prompt1 - 1] = 0;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
377 tem1 = index (prompt1, '\n');
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
378 if (tem1) *tem1 = 0;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
379 /* Fill argstrings with a vector of C strings
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
380 corresponding to the Lisp strings in visargs. */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
381 for (j = 1; j < i; j++)
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
382 argstrings[j]
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
383 = EQ (visargs[j], Qnil)
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
384 ? (unsigned char *) ""
617
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 516
diff changeset
385 : XSTRING (visargs[j])->data;
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
386
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
387 doprnt (prompt, sizeof prompt, prompt1, 0, j - 1, argstrings + 1);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
388
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
389 switch (*tem)
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
390 {
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
391 case 'a': /* Symbol defined as a function */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
392 visargs[i] = Fcompleting_read (build_string (prompt),
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
393 Vobarray, Qfboundp, Qt, Qnil, Qnil);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
394 /* Passing args[i] directly stimulates compiler bug */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
395 teml = visargs[i];
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
396 args[i] = Fintern (teml, Qnil);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
397 break;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
398
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
399 case 'b': /* Name of existing buffer */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
400 args[i] = Fcurrent_buffer ();
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
401 if (EQ (selected_window, minibuf_window))
1347
ac3a893b9bb9 (Fcall_interactively): Pass 2nd arg to Fother_buffer.
Richard M. Stallman <rms@gnu.org>
parents: 1115
diff changeset
402 args[i] = Fother_buffer (args[i], Qnil);
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
403 args[i] = Fread_buffer (build_string (prompt), args[i], Qt);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
404 break;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
405
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
406 case 'B': /* Name of buffer, possibly nonexistent */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
407 args[i] = Fread_buffer (build_string (prompt),
1347
ac3a893b9bb9 (Fcall_interactively): Pass 2nd arg to Fother_buffer.
Richard M. Stallman <rms@gnu.org>
parents: 1115
diff changeset
408 Fother_buffer (Fcurrent_buffer (), Qnil),
ac3a893b9bb9 (Fcall_interactively): Pass 2nd arg to Fother_buffer.
Richard M. Stallman <rms@gnu.org>
parents: 1115
diff changeset
409 Qnil);
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
410 break;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
411
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
412 case 'c': /* Character */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
413 message1 (prompt);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
414 args[i] = Fread_char ();
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
415 /* Passing args[i] directly stimulates compiler bug */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
416 teml = args[i];
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
417 visargs[i] = Fchar_to_string (teml);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
418 break;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
419
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
420 case 'C': /* Command: symbol with interactive function */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
421 visargs[i] = Fcompleting_read (build_string (prompt),
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
422 Vobarray, Qcommandp, Qt, Qnil, Qnil);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
423 /* Passing args[i] directly stimulates compiler bug */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
424 teml = visargs[i];
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
425 args[i] = Fintern (teml, Qnil);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
426 break;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
427
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
428 case 'd': /* Value of point. Does not do I/O. */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
429 XFASTINT (args[i]) = point;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
430 /* visargs[i] = Qnil; */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
431 varies[i] = 1;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
432 break;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
433
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
434 case 'D': /* Directory name. */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
435 args[i] = Fread_file_name (build_string (prompt), Qnil,
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
436 current_buffer->directory, Qlambda, Qnil);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
437 break;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
438
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
439 case 'f': /* Existing file name. */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
440 args[i] = Fread_file_name (build_string (prompt),
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
441 Qnil, Qnil, Qlambda, Qnil);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
442 break;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
443
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
444 case 'F': /* Possibly nonexistent file name. */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
445 args[i] = Fread_file_name (build_string (prompt),
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
446 Qnil, Qnil, Qnil, Qnil);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
447 break;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
448
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
449 case 'k': /* Key sequence (string) */
438
8b54ee2c82d6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 407
diff changeset
450 args[i] = Fread_key_sequence (build_string (prompt), Qnil);
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
451 teml = args[i];
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
452 visargs[i] = Fkey_description (teml);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
453 break;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
454
1383
54028d2538a4 * callint.c (Fcall_interactively): Allow multiple 'e' specs.
Jim Blandy <jimb@redhat.com>
parents: 1347
diff changeset
455 case 'e': /* The invoking event. */
54028d2538a4 * callint.c (Fcall_interactively): Allow multiple 'e' specs.
Jim Blandy <jimb@redhat.com>
parents: 1347
diff changeset
456 if (next_event >= this_command_key_count)
54028d2538a4 * callint.c (Fcall_interactively): Allow multiple 'e' specs.
Jim Blandy <jimb@redhat.com>
parents: 1347
diff changeset
457 error ("%s must be bound to an event with parameters",
438
8b54ee2c82d6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 407
diff changeset
458 (XTYPE (function) == Lisp_Symbol
8b54ee2c82d6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 407
diff changeset
459 ? (char *) XSYMBOL (function)->name->data
1383
54028d2538a4 * callint.c (Fcall_interactively): Allow multiple 'e' specs.
Jim Blandy <jimb@redhat.com>
parents: 1347
diff changeset
460 : "command"));
1425
2c156e9908ad * callint.c (Fcall_interactively): Change handling of 'e' spec;
Jim Blandy <jimb@redhat.com>
parents: 1383
diff changeset
461 args[i] = XVECTOR (this_command_keys)->contents[next_event++];
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
462 varies[i] = -1;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1693
diff changeset
463
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1693
diff changeset
464 /* Find the next parameterized event. */
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1693
diff changeset
465 while (next_event < this_command_key_count
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1693
diff changeset
466 && ! (EVENT_HAS_PARAMETERS
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1693
diff changeset
467 (XVECTOR (this_command_keys)->contents[next_event])))
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1693
diff changeset
468 next_event++;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1693
diff changeset
469
438
8b54ee2c82d6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 407
diff changeset
470 break;
8b54ee2c82d6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 407
diff changeset
471
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
472 case 'm': /* Value of mark. Does not do I/O. */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
473 check_mark ();
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
474 /* visargs[i] = Qnil; */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
475 XFASTINT (args[i]) = marker_position (current_buffer->mark);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
476 varies[i] = 2;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
477 break;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
478
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
479 case 'N': /* Prefix arg, else number from minibuffer */
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 438
diff changeset
480 if (!NILP (prefix_arg))
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
481 goto have_prefix_arg;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
482 case 'n': /* Read number from minibuffer. */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
483 do
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
484 args[i] = Fread_minibuffer (build_string (prompt), Qnil);
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 617
diff changeset
485 while (! NUMBERP (args[i]));
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
486 visargs[i] = last_minibuf_string;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
487 break;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
488
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
489 case 'P': /* Prefix arg in raw form. Does no I/O. */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
490 have_prefix_arg:
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
491 args[i] = prefix_arg;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
492 /* visargs[i] = Qnil; */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
493 varies[i] = -1;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
494 break;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
495
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
496 case 'p': /* Prefix arg converted to number. No I/O. */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
497 args[i] = Fprefix_numeric_value (prefix_arg);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
498 /* visargs[i] = Qnil; */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
499 varies[i] = -1;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
500 break;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
501
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
502 case 'r': /* Region, point and mark as 2 args. */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
503 check_mark ();
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
504 /* visargs[i+1] = Qnil; */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
505 foo = marker_position (current_buffer->mark);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
506 /* visargs[i] = Qnil; */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
507 XFASTINT (args[i]) = point < foo ? point : foo;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
508 varies[i] = 3;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
509 XFASTINT (args[++i]) = point > foo ? point : foo;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
510 varies[i] = 4;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
511 break;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
512
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
513 case 's': /* String read via minibuffer. */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
514 args[i] = Fread_string (build_string (prompt), Qnil);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
515 break;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
516
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
517 case 'S': /* Any symbol. */
1693
4b2f399dbea2 (Fcall_interactively): For `s', use Fread_string.
Richard M. Stallman <rms@gnu.org>
parents: 1498
diff changeset
518 visargs[i] = Fread_string (build_string (prompt), Qnil);
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
519 /* Passing args[i] directly stimulates compiler bug */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
520 teml = visargs[i];
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
521 args[i] = Fintern (teml, Qnil);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
522 break;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
523
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
524 case 'v': /* Variable name: symbol that is
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
525 user-variable-p. */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
526 args[i] = Fread_variable (build_string (prompt));
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
527 visargs[i] = last_minibuf_string;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
528 break;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
529
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
530 case 'x': /* Lisp expression read but not evaluated */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
531 args[i] = Fread_minibuffer (build_string (prompt), Qnil);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
532 visargs[i] = last_minibuf_string;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
533 break;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
534
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
535 case 'X': /* Lisp expression read and evaluated */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
536 args[i] = Feval_minibuffer (build_string (prompt), Qnil);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
537 visargs[i] = last_minibuf_string;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
538 break;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
539
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
540 default:
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
541 error ("Invalid control letter \"%c\" (%03o) in interactive calling string",
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
542 *tem, *tem);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
543 }
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
544
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
545 if (varies[i] == 0)
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
546 arg_from_tty = 1;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
547
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 438
diff changeset
548 if (NILP (visargs[i]) && XTYPE (args[i]) == Lisp_String)
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
549 visargs[i] = args[i];
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
550
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
551 tem = (unsigned char *) index (tem, '\n');
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
552 if (tem) tem++;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
553 else tem = (unsigned char *) "";
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
554 }
873
0abaf590e0ca entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 863
diff changeset
555 unbind_to (speccount, Qnil);
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
556
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
557 QUIT;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
558
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
559 args[0] = function;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
560
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 438
diff changeset
561 if (arg_from_tty || !NILP (record))
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
562 {
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
563 visargs[0] = function;
438
8b54ee2c82d6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 407
diff changeset
564 for (i = 1; i < count + 1; i++)
8b54ee2c82d6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 407
diff changeset
565 if (varies[i] > 0)
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
566 visargs[i] = Fcons (intern (callint_argfuns[varies[i]]), Qnil);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
567 else
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
568 visargs[i] = quotify_arg (args[i]);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
569 Vcommand_history = Fcons (Flist (count + 1, visargs),
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
570 Vcommand_history);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
571 }
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
572
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
573 {
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
574 Lisp_Object val;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
575 specbind (Qcommand_debug_status, Qnil);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
576
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
577 val = Ffuncall (count + 1, args);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
578 UNGCPRO;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
579 return unbind_to (speccount, val);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
580 }
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
581 }
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
582
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
583 DEFUN ("prefix-numeric-value", Fprefix_numeric_value, Sprefix_numeric_value,
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
584 1, 1, 0,
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
585 "Return numeric meaning of raw prefix argument ARG.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
586 A raw prefix argument is what you get from `(interactive \"P\")'.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
587 Its numeric meaning is what you would get from `(interactive \"p\")'.")
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
588 (raw)
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
589 Lisp_Object raw;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
590 {
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
591 Lisp_Object val;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
592
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
593 /* Tag val as an integer, so the rest of the assignments
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
594 may use XSETINT. */
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
595 XFASTINT (val) = 0;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
596
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 438
diff changeset
597 if (NILP (raw))
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
598 XFASTINT (val) = 1;
819
5bbabfcef929 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 732
diff changeset
599 else if (EQ (raw, Qminus))
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
600 XSETINT (val, -1);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
601 else if (CONSP (raw))
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
602 XSETINT (val, XINT (XCONS (raw)->car));
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
603 else if (XTYPE (raw) == Lisp_Int)
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
604 val = raw;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
605 else
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
606 XFASTINT (val) = 1;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
607
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
608 return val;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
609 }
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
610
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
611 syms_of_callint ()
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
612 {
1498
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
613 preserved_fns = Fcons (intern ("region-beginning"),
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
614 Fcons (intern ("region-end"),
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
615 Fcons (intern ("point"),
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
616 Fcons (intern ("mark"), Qnil))));
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
617 staticpro (&preserved_fns);
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
618
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
619 Qlist = intern ("list");
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
620 staticpro (&Qlist);
098464e977d6 (preserved_fns): New var.
Richard M. Stallman <rms@gnu.org>
parents: 1425
diff changeset
621
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
622 Qminus = intern ("-");
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
623 staticpro (&Qminus);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
624
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
625 Qcall_interactively = intern ("call-interactively");
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
626 staticpro (&Qcall_interactively);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
627
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
628 Qcommand_debug_status = intern ("command-debug-status");
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
629 staticpro (&Qcommand_debug_status);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
630
873
0abaf590e0ca entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 863
diff changeset
631 Qenable_recursive_minibuffers = intern ("enable-recursive-minibuffers");
0abaf590e0ca entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 863
diff changeset
632 staticpro (&Qenable_recursive_minibuffers);
0abaf590e0ca entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 863
diff changeset
633
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
634 DEFVAR_LISP ("prefix-arg", &Vprefix_arg,
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
635 "The value of the prefix argument for the next editing command.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
636 It may be a number, or the symbol `-' for just a minus sign as arg,\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
637 or a list whose car is a number for just one or more C-U's\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
638 or nil if no argument has been specified.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
639 \n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
640 You cannot examine this variable to find the argument for this command\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
641 since it has been set to nil by the time you can look.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
642 Instead, you should use the variable `current-prefix-arg', although\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
643 normally commands can get this prefix argument with (interactive \"P\").");
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
644 Vprefix_arg = Qnil;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
645
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
646 DEFVAR_LISP ("current-prefix-arg", &Vcurrent_prefix_arg,
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
647 "The value of the prefix argument for this editing command.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
648 It may be a number, or the symbol `-' for just a minus sign as arg,\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
649 or a list whose car is a number for just one or more C-U's\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
650 or nil if no argument has been specified.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
651 This is what `(interactive \"P\")' returns.");
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
652 Vcurrent_prefix_arg = Qnil;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
653
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
654 DEFVAR_LISP ("command-history", &Vcommand_history,
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
655 "List of recent commands that read arguments from terminal.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
656 Each command is represented as a form to evaluate.");
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
657 Vcommand_history = Qnil;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
658
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
659 DEFVAR_LISP ("command-debug-status", &Vcommand_debug_status,
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
660 "Debugging status of current interactive command.\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
661 Bound each time `call-interactively' is called;\n\
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
662 may be set by the debugger as a reminder for itself.");
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
663 Vcommand_debug_status = Qnil;
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
664
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
665 DEFVAR_LISP ("mark-even-if-inactive", &Vmark_even_if_inactive,
3975
718280a1ba74 (Vmark_even_if_inactive): New var, with Lisp variable.
Richard M. Stallman <rms@gnu.org>
parents: 2048
diff changeset
666 "*Non-nil means you can use the mark even when inactive.\n\
718280a1ba74 (Vmark_even_if_inactive): New var, with Lisp variable.
Richard M. Stallman <rms@gnu.org>
parents: 2048
diff changeset
667 This option makes a difference in Transient Mark mode.\n\
718280a1ba74 (Vmark_even_if_inactive): New var, with Lisp variable.
Richard M. Stallman <rms@gnu.org>
parents: 2048
diff changeset
668 When the option is non-nil, deactivation of the mark\n\
718280a1ba74 (Vmark_even_if_inactive): New var, with Lisp variable.
Richard M. Stallman <rms@gnu.org>
parents: 2048
diff changeset
669 turns off region highlighting, but commands that use the mark\n\
718280a1ba74 (Vmark_even_if_inactive): New var, with Lisp variable.
Richard M. Stallman <rms@gnu.org>
parents: 2048
diff changeset
670 behave as if the mark were still active.");
718280a1ba74 (Vmark_even_if_inactive): New var, with Lisp variable.
Richard M. Stallman <rms@gnu.org>
parents: 2048
diff changeset
671 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
672
407
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
673 defsubr (&Sinteractive);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
674 defsubr (&Scall_interactively);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
675 defsubr (&Sprefix_numeric_value);
a82d2d892c89 Initial revision
Michael I. Bushnell <mib@gnu.org>
parents:
diff changeset
676 }