* configure.ac (DEBUGGER_SEES_C_MACROS): New macro.
[bpt/emacs.git] / src / minibuf.c
CommitLineData
f927c5ae 1/* Minibuffer input and completion.
c11136ec 2
ab422c4d 3Copyright (C) 1985-1986, 1993-2013 Free Software Foundation, Inc.
f927c5ae
JB
4
5This file is part of GNU Emacs.
6
9ec0b715 7GNU Emacs is free software: you can redistribute it and/or modify
f927c5ae 8it under the terms of the GNU General Public License as published by
9ec0b715
GM
9the Free Software Foundation, either version 3 of the License, or
10(at your option) any later version.
f927c5ae
JB
11
12GNU Emacs is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
9ec0b715 18along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
f927c5ae
JB
19
20
18160b98 21#include <config.h>
590bd467 22#include <errno.h>
3f708f4c 23#include <stdio.h>
af52c32d 24
f927c5ae
JB
25#include "lisp.h"
26#include "commands.h"
e5560ff7 27#include "character.h"
f927c5ae
JB
28#include "buffer.h"
29#include "dispextern.h"
2538fae4 30#include "keyboard.h"
ff11dfa1 31#include "frame.h"
f927c5ae
JB
32#include "window.h"
33#include "syntax.h"
0c21eeeb 34#include "intervals.h"
8feddab4 35#include "keymap.h"
fa971ac3 36#include "termhooks.h"
f927c5ae 37
f927c5ae 38/* List of buffers for use as minibuffers.
4d04c1f1
KH
39 The first element of the list is used for the outermost minibuffer
40 invocation, the next element is used for a recursive minibuffer
41 invocation, etc. The list is extended at the end as deeper
42 minibuffer recursions are encountered. */
279cf52c 43
f927c5ae
JB
44Lisp_Object Vminibuffer_list;
45
620c53a6 46/* Data to remember during recursive minibuffer invocations. */
279cf52c 47
1717ede2 48static Lisp_Object minibuf_save_list;
f927c5ae
JB
49
50/* Depth in minibuffer invocations. */
279cf52c 51
62f19c19 52EMACS_INT minibuf_level;
f927c5ae 53
77aa8edf 54/* The maximum length of a minibuffer history. */
279cf52c 55
955cbe7b 56static Lisp_Object Qhistory_length;
179a4ca7 57
620c53a6 58/* Fread_minibuffer leaves the input here as a string. */
279cf52c 59
f927c5ae
JB
60Lisp_Object last_minibuf_string;
61
955cbe7b 62static Lisp_Object Qminibuffer_history, Qbuffer_name_history;
770970cb 63
955cbe7b 64static Lisp_Object Qread_file_name_internal;
719b4a40 65
177aecf9 66/* Normal hooks for entry to and exit from minibuffer. */
5c781212 67
955cbe7b
PE
68static Lisp_Object Qminibuffer_setup_hook;
69static Lisp_Object Qminibuffer_exit_hook;
eebbfb01 70
9fa5c213 71Lisp_Object Qcompletion_ignore_case;
955cbe7b
PE
72static Lisp_Object Qminibuffer_completion_table;
73static Lisp_Object Qminibuffer_completion_predicate;
74static Lisp_Object Qminibuffer_completion_confirm;
b4d3bc10 75static Lisp_Object Qcustom_variable_p;
5744fa7c 76
955cbe7b 77static Lisp_Object Qminibuffer_default;
5744fa7c 78
955cbe7b 79static Lisp_Object Qcurrent_input_method, Qactivate_input_method;
cee54539 80
955cbe7b 81static Lisp_Object Qcase_fold_search;
6b61353c 82
955cbe7b 83static Lisp_Object Qread_expression_history;
627fb581 84
e9588e2e
PE
85/* Prompt to display in front of the mini-buffer contents. */
86
87static Lisp_Object minibuf_prompt;
88
89/* Width of current mini-buffer prompt. Only set after display_line
90 of the line that contains the prompt. */
91
d311d28c 92static ptrdiff_t minibuf_prompt_width;
e9588e2e 93
f927c5ae 94\f
89fdc4a0
KH
95/* Put minibuf on currently selected frame's minibuffer.
96 We do this whenever the user starts a new minibuffer
97 or when a minibuffer exits. */
98
1717ede2 99static void
971de7fb 100choose_minibuf_frame (void)
89fdc4a0 101{
a4aafc54
GM
102 if (FRAMEP (selected_frame)
103 && FRAME_LIVE_P (XFRAME (selected_frame))
e69b0960 104 && !EQ (minibuf_window, XFRAME (selected_frame)->minibuffer_window))
89fdc4a0 105 {
a4aafc54
GM
106 struct frame *sf = XFRAME (selected_frame);
107 Lisp_Object buffer;
9ab4a725 108
89fdc4a0
KH
109 /* I don't think that any frames may validly have a null minibuffer
110 window anymore. */
e69b0960 111 if (NILP (sf->minibuffer_window))
1088b922 112 emacs_abort ();
89fdc4a0 113
a4aafc54
GM
114 /* Under X, we come here with minibuf_window being the
115 minibuffer window of the unused termcap window created in
116 init_window_once. That window doesn't have a buffer. */
e74aeda8 117 buffer = XWINDOW (minibuf_window)->contents;
a4aafc54 118 if (BUFFERP (buffer))
08908aca
MR
119 /* Use set_window_buffer instead of Fset_window_buffer (see
120 discussion of bug#11984, bug#12025, bug#12026). */
121 set_window_buffer (sf->minibuffer_window, buffer, 0, 0);
e69b0960 122 minibuf_window = sf->minibuffer_window;
89fdc4a0 123 }
914860c2
RS
124
125 /* Make sure no other frame has a minibuffer as its selected window,
126 because the text would not be displayed in it, and that would be
07d402c8
RS
127 confusing. Only allow the selected frame to do this,
128 and that only if the minibuffer is active. */
914860c2
RS
129 {
130 Lisp_Object tail, frame;
131
132 FOR_EACH_FRAME (tail, frame)
07d402c8 133 if (MINI_WINDOW_P (XWINDOW (FRAME_SELECTED_WINDOW (XFRAME (frame))))
a4aafc54 134 && !(EQ (frame, selected_frame)
07d402c8 135 && minibuf_level > 0))
c8938ab6 136 Fset_frame_selected_window (frame, Fframe_first_window (frame), Qnil);
914860c2 137 }
89fdc4a0 138}
68313ed8 139
727e958e
MR
140DEFUN ("active-minibuffer-window", Factive_minibuffer_window,
141 Sactive_minibuffer_window, 0, 0, 0,
142 doc: /* Return the currently active minibuffer window, or nil if none. */)
143 (void)
144{
145 return minibuf_level ? minibuf_window : Qnil;
146}
147
68313ed8
RS
148DEFUN ("set-minibuffer-window", Fset_minibuffer_window,
149 Sset_minibuffer_window, 1, 1, 0,
af52c32d 150 doc: /* Specify which minibuffer window to use for the minibuffer.
6b61353c 151This affects where the minibuffer is displayed if you put text in it
af52c32d 152without invoking the usual minibuffer commands. */)
5842a27b 153 (Lisp_Object window)
68313ed8 154{
b7826503 155 CHECK_WINDOW (window);
68313ed8
RS
156 if (! MINI_WINDOW_P (XWINDOW (window)))
157 error ("Window is not a minibuffer window");
158
159 minibuf_window = window;
160
161 return window;
162}
163
89fdc4a0 164\f
fd6fa53f 165/* Actual minibuffer invocation. */
f927c5ae 166
27e498e6
PE
167static void read_minibuf_unwind (void);
168static void run_exit_minibuf_hook (void);
edfef199
GM
169
170
171/* Read a Lisp object from VAL and return it. If VAL is an empty
172 string, and DEFALT is a string, read from DEFALT instead of VAL. */
173
174static Lisp_Object
971de7fb 175string_to_object (Lisp_Object val, Lisp_Object defalt)
edfef199
GM
176{
177 struct gcpro gcpro1, gcpro2;
178 Lisp_Object expr_and_pos;
d311d28c 179 ptrdiff_t pos;
9ab4a725 180
edfef199 181 GCPRO2 (val, defalt);
9ab4a725 182
fb30dfd2
JL
183 if (STRINGP (val) && SCHARS (val) == 0)
184 {
185 if (STRINGP (defalt))
186 val = defalt;
187 else if (CONSP (defalt) && STRINGP (XCAR (defalt)))
188 val = XCAR (defalt);
189 }
9ab4a725 190
edfef199
GM
191 expr_and_pos = Fread_from_string (val, Qnil, Qnil);
192 pos = XINT (Fcdr (expr_and_pos));
d5db4077 193 if (pos != SCHARS (val))
edfef199
GM
194 {
195 /* Ignore trailing whitespace; any other trailing junk
196 is an error. */
d311d28c 197 ptrdiff_t i;
edfef199 198 pos = string_char_to_byte (val, pos);
d5db4077 199 for (i = pos; i < SBYTES (val); i++)
edfef199 200 {
d5db4077 201 int c = SREF (val, i);
edfef199
GM
202 if (c != ' ' && c != '\t' && c != '\n')
203 error ("Trailing garbage following expression");
204 }
205 }
9ab4a725 206
edfef199
GM
207 val = Fcar (expr_and_pos);
208 RETURN_UNGCPRO (val);
209}
210
211
212/* Like read_minibuf but reading from stdin. This function is called
213 from read_minibuf to do the job if noninteractive. */
214
215static Lisp_Object
d5a3eaaf
AS
216read_minibuf_noninteractive (Lisp_Object map, Lisp_Object initial,
217 Lisp_Object prompt, Lisp_Object backup_n,
7cded46f 218 bool expflag,
d5a3eaaf
AS
219 Lisp_Object histvar, Lisp_Object histpos,
220 Lisp_Object defalt,
7cded46f 221 bool allow_props, bool inherit_input_method)
edfef199 222{
90532f02 223 ptrdiff_t size, len;
590bd467 224 char *line;
edfef199 225 Lisp_Object val;
590bd467 226 int c;
edfef199 227
d5db4077 228 fprintf (stdout, "%s", SDATA (prompt));
edfef199
GM
229 fflush (stdout);
230
6bbd7a29 231 val = Qnil;
edfef199
GM
232 size = 100;
233 len = 0;
23f86fce 234 line = xmalloc (size);
590bd467
PE
235
236 while ((c = getchar ()) != '\n')
edfef199 237 {
21b72067 238 if (c == EOF)
590bd467
PE
239 {
240 if (errno != EINTR)
241 break;
242 }
243 else
244 {
245 if (len == size)
246 {
7216e43b 247 if (STRING_BYTES_BOUND / 2 < size)
0065d054 248 memory_full (SIZE_MAX);
590bd467 249 size *= 2;
98c6f1e3 250 line = xrealloc (line, size);
590bd467
PE
251 }
252 line[len++] = c;
253 }
edfef199
GM
254 }
255
21b72067 256 if (len || c == '\n')
edfef199 257 {
590bd467 258 val = make_string (line, len);
edfef199
GM
259 xfree (line);
260 }
261 else
262 {
263 xfree (line);
264 error ("Error reading from stdin");
265 }
9ab4a725 266
fd6fa53f 267 /* If Lisp form desired instead of string, parse it. */
edfef199 268 if (expflag)
fb30dfd2 269 val = string_to_object (val, CONSP (defalt) ? XCAR (defalt) : defalt);
9ab4a725 270
edfef199
GM
271 return val;
272}
1011edb5 273\f
873ef78e 274DEFUN ("minibufferp", Fminibufferp,
6d1b1d7b
JPW
275 Sminibufferp, 0, 1, 0,
276 doc: /* Return t if BUFFER is a minibuffer.
6b61353c
KH
277No argument or nil as argument means use current buffer as BUFFER.
278BUFFER can be a buffer or a buffer name. */)
5842a27b 279 (Lisp_Object buffer)
873ef78e
RS
280{
281 Lisp_Object tem;
282
6d1b1d7b
JPW
283 if (NILP (buffer))
284 buffer = Fcurrent_buffer ();
285 else if (STRINGP (buffer))
286 buffer = Fget_buffer (buffer);
287 else
288 CHECK_BUFFER (buffer);
289
290 tem = Fmemq (buffer, Vminibuffer_list);
873ef78e
RS
291 return ! NILP (tem) ? Qt : Qnil;
292}
293
a346ec72
MB
294DEFUN ("minibuffer-prompt-end", Fminibuffer_prompt_end,
295 Sminibuffer_prompt_end, 0, 0, 0,
af52c32d 296 doc: /* Return the buffer position of the end of the minibuffer prompt.
eb7c9b64 297Return (point-min) if current buffer is not a minibuffer. */)
5842a27b 298 (void)
a346ec72
MB
299{
300 /* This function is written to be most efficient when there's a prompt. */
873ef78e
RS
301 Lisp_Object beg, end, tem;
302 beg = make_number (BEGV);
303
304 tem = Fmemq (Fcurrent_buffer (), Vminibuffer_list);
305 if (NILP (tem))
306 return beg;
307
308 end = Ffield_end (beg, Qnil, Qnil);
9ab4a725 309
a346ec72 310 if (XINT (end) == ZV && NILP (Fget_char_property (beg, Qfield, Qnil)))
b056f36d 311 return beg;
a346ec72
MB
312 else
313 return end;
314}
315
316DEFUN ("minibuffer-contents", Fminibuffer_contents,
317 Sminibuffer_contents, 0, 0, 0,
029a305c 318 doc: /* Return the user input in a minibuffer as a string.
6cc62df0 319If the current buffer is not a minibuffer, return its entire contents. */)
5842a27b 320 (void)
a346ec72 321{
d311d28c 322 ptrdiff_t prompt_end = XINT (Fminibuffer_prompt_end ());
a346ec72
MB
323 return make_buffer_string (prompt_end, ZV, 1);
324}
325
326DEFUN ("minibuffer-contents-no-properties", Fminibuffer_contents_no_properties,
327 Sminibuffer_contents_no_properties, 0, 0, 0,
029a305c 328 doc: /* Return the user input in a minibuffer as a string, without text-properties.
6cc62df0 329If the current buffer is not a minibuffer, return its entire contents. */)
5842a27b 330 (void)
a346ec72 331{
d311d28c 332 ptrdiff_t prompt_end = XINT (Fminibuffer_prompt_end ());
a346ec72
MB
333 return make_buffer_string (prompt_end, ZV, 0);
334}
335
b5e1e449
JL
336DEFUN ("minibuffer-completion-contents", Fminibuffer_completion_contents,
337 Sminibuffer_completion_contents, 0, 0, 0,
338 doc: /* Return the user input in a minibuffer before point as a string.
339That is what completion commands operate on.
6cc62df0 340If the current buffer is not a minibuffer, return its entire contents. */)
5842a27b 341 (void)
b5e1e449 342{
d311d28c 343 ptrdiff_t prompt_end = XINT (Fminibuffer_prompt_end ());
b5e1e449
JL
344 if (PT < prompt_end)
345 error ("Cannot do completion in the prompt");
346 return make_buffer_string (prompt_end, PT, 1);
347}
348
1011edb5 349\f
6b61353c
KH
350/* Read from the minibuffer using keymap MAP and initial contents INITIAL,
351 putting point minus BACKUP_N bytes from the end of INITIAL,
770970cb 352 prompting with PROMPT (a string), using history list HISTVAR
6b61353c
KH
353 with initial position HISTPOS. INITIAL should be a string or a
354 cons of a string and an integer. BACKUP_N should be <= 0, or
355 Qnil, which is equivalent to 0. If INITIAL is a cons, BACKUP_N is
356 ignored and replaced with an integer that puts point at one-indexed
357 position N in INITIAL, where N is the CDR of INITIAL, or at the
358 beginning of INITIAL if N <= 0.
770970cb
RS
359
360 Normally return the result as a string (the text that was read),
7cded46f 361 but if EXPFLAG, read it and return the object read.
b278606c
BF
362 If HISTVAR is given, save the value read on that history only if it doesn't
363 match the front of that history list exactly. The value is pushed onto
e5d4686b 364 the list as the string that was read.
770970cb 365
4f9f637a 366 DEFALT specifies the default value for the sake of history commands.
c3421833 367
7cded46f 368 If ALLOW_PROPS, do not throw away text properties.
cee54539 369
7cded46f 370 if INHERIT_INPUT_METHOD, the minibuffer inherits the
cee54539 371 current input method. */
e5d4686b
RS
372
373static Lisp_Object
d5a3eaaf 374read_minibuf (Lisp_Object map, Lisp_Object initial, Lisp_Object prompt,
7cded46f 375 bool expflag,
d5a3eaaf 376 Lisp_Object histvar, Lisp_Object histpos, Lisp_Object defalt,
7cded46f 377 bool allow_props, bool inherit_input_method)
f927c5ae 378{
00a34088 379 Lisp_Object val;
d311d28c 380 ptrdiff_t count = SPECPDL_INDEX ();
cee54539
KH
381 Lisp_Object mini_frame, ambient_dir, minibuffer, input_method;
382 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5;
c75000c7 383 Lisp_Object enable_multibyte;
d311d28c 384 EMACS_INT pos = 0;
4f9f637a
RS
385 /* String to add to the history. */
386 Lisp_Object histstring;
387
b20de1cd
RS
388 Lisp_Object empty_minibuf;
389 Lisp_Object dummy, frame;
390
e5d4686b 391 specbind (Qminibuffer_default, defalt);
7f6feb56 392 specbind (intern ("inhibit-read-only"), Qnil);
e5d4686b 393
ef72eaff
KS
394 /* If Vminibuffer_completing_file_name is `lambda' on entry, it was t
395 in previous recursive minibuffer, but was not set explicitly
396 to t for this invocation, so set it to nil in this minibuffer.
397 Save the old value now, before we change it. */
398 specbind (intern ("minibuffer-completing-file-name"), Vminibuffer_completing_file_name);
399 if (EQ (Vminibuffer_completing_file_name, Qlambda))
400 Vminibuffer_completing_file_name = Qnil;
401
d148e14d 402#ifdef HAVE_WINDOW_SYSTEM
526a058f
GM
403 if (display_hourglass_p)
404 cancel_hourglass ();
e5baa1a7 405#endif
718d3251 406
6b61353c
KH
407 if (!NILP (initial))
408 {
409 if (CONSP (initial))
410 {
34348bd4 411 Lisp_Object backup_n = XCDR (initial);
7d7bbefd 412 initial = XCAR (initial);
6b61353c
KH
413 CHECK_STRING (initial);
414 if (!NILP (backup_n))
415 {
416 CHECK_NUMBER (backup_n);
417 /* Convert to distance from end of input. */
418 if (XINT (backup_n) < 1)
419 /* A number too small means the beginning of the string. */
420 pos = - SCHARS (initial);
421 else
422 pos = XINT (backup_n) - 1 - SCHARS (initial);
423 }
424 }
425 else
426 CHECK_STRING (initial);
427 }
00a34088 428 val = Qnil;
4b4deea2 429 ambient_dir = BVAR (current_buffer, directory);
cee54539 430 input_method = Qnil;
c75000c7 431 enable_multibyte = Qnil;
57ceaa8a 432
00a34088
RS
433 /* Don't need to protect PROMPT, HISTVAR, and HISTPOS because we
434 store them away before we can GC. Don't need to protect
435 BACKUP_N because we use the value only if it is an integer. */
cee54539 436 GCPRO5 (map, initial, val, ambient_dir, input_method);
f927c5ae 437
7510b296 438 if (!STRINGP (prompt))
a2665596 439 prompt = empty_unibyte_string;
f927c5ae 440
f927c5ae 441 if (!enable_recursive_minibuffers
be15a518
RS
442 && minibuf_level > 0)
443 {
444 if (EQ (selected_window, minibuf_window))
445 error ("Command attempted to use minibuffer while in minibuffer");
446 else
447 /* If we're in another window, cancel the minibuffer that's active. */
448 Fthrow (Qexit,
449 build_string ("Command attempted to use minibuffer while in minibuffer"));
450 }
f927c5ae 451
a9051c88
DN
452 if ((noninteractive
453 /* In case we are running as a daemon, only do this before
454 detaching from the terminal. */
455 || (IS_DAEMON && (daemon_pipe[1] >= 0)))
456 && NILP (Vexecuting_kbd_macro))
c28b847b 457 {
6b61353c
KH
458 val = read_minibuf_noninteractive (map, initial, prompt,
459 make_number (pos),
c28b847b
GM
460 expflag, histvar, histpos, defalt,
461 allow_props, inherit_input_method);
f9b9ccef 462 UNGCPRO;
c28b847b
GM
463 return unbind_to (count, val);
464 }
edfef199 465
748dc60a 466 /* Choose the minibuffer window and frame, and take action on them. */
f927c5ae 467
218e997a
MR
468 /* Prepare for restoring the current buffer since choose_minibuf_frame
469 calling Fset_frame_selected_window may change it (Bug#12766). */
27e498e6 470 record_unwind_protect (restore_buffer, Fcurrent_buffer ());
218e997a 471
c5b6b680
RS
472 choose_minibuf_frame ();
473
27e498e6 474 record_unwind_protect_void (choose_minibuf_frame);
0c94f256 475
27e498e6 476 record_unwind_protect (restore_window_configuration,
b2b2c677
JB
477 Fcurrent_window_configuration (Qnil));
478
ff11dfa1
JB
479 /* If the minibuffer window is on a different frame, save that
480 frame's configuration too. */
75f00e72 481 mini_frame = WINDOW_FRAME (XWINDOW (minibuf_window));
a4aafc54 482 if (!EQ (mini_frame, selected_frame))
27e498e6 483 record_unwind_protect (restore_window_configuration,
5061d9c3 484 Fcurrent_window_configuration (mini_frame));
5563e8e8
KH
485
486 /* If the minibuffer is on an iconified or invisible frame,
487 make it visible now. */
488 Fmake_frame_visible (mini_frame);
489
6a9ee000
RS
490 if (minibuffer_auto_raise)
491 Fraise_frame (mini_frame);
f927c5ae 492
b3e6f69c 493 temporarily_switch_to_single_kboard (XFRAME (mini_frame));
256c9c3a 494
748dc60a
RS
495 /* We have to do this after saving the window configuration
496 since that is what restores the current buffer. */
497
498 /* Arrange to restore a number of minibuffer-related variables.
499 We could bind each variable separately, but that would use lots of
500 specpdl slots. */
501 minibuf_save_list
502 = Fcons (Voverriding_local_map,
3372a51b 503 Fcons (minibuf_window,
ef72eaff 504 minibuf_save_list));
748dc60a
RS
505 minibuf_save_list
506 = Fcons (minibuf_prompt,
507 Fcons (make_number (minibuf_prompt_width),
508 Fcons (Vhelp_form,
509 Fcons (Vcurrent_prefix_arg,
510 Fcons (Vminibuffer_history_position,
511 Fcons (Vminibuffer_history_variable,
512 minibuf_save_list))))));
513
27e498e6 514 record_unwind_protect_void (read_minibuf_unwind);
748dc60a 515 minibuf_level++;
7292839d
SM
516 /* We are exiting the minibuffer one way or the other, so run the hook.
517 It should be run before unwinding the minibuf settings. Do it
518 separately from read_minibuf_unwind because we need to make sure that
519 read_minibuf_unwind is fully executed even if exit-minibuffer-hook
520 signals an error. --Stef */
27e498e6 521 record_unwind_protect_void (run_exit_minibuf_hook);
748dc60a
RS
522
523 /* Now that we can restore all those variables, start changing them. */
524
1e3f16d5 525 minibuf_prompt_width = 0;
748dc60a
RS
526 minibuf_prompt = Fcopy_sequence (prompt);
527 Vminibuffer_history_position = histpos;
528 Vminibuffer_history_variable = histvar;
529 Vhelp_form = Vminibuffer_help_form;
ef72eaff
KS
530 /* If this minibuffer is reading a file name, that doesn't mean
531 recursive ones are. But we cannot set it to nil, because
532 completion code still need to know the minibuffer is completing a
533 file name. So use `lambda' as intermediate value meaning
534 "t" in this minibuffer, but "nil" in next minibuffer. */
535 if (!NILP (Vminibuffer_completing_file_name))
536 Vminibuffer_completing_file_name = Qlambda;
748dc60a 537
cee54539 538 if (inherit_input_method)
c75000c7 539 {
fd771ceb 540 /* `current-input-method' is buffer local. So, remember it in
c75000c7
RS
541 INPUT_METHOD before changing the current buffer. */
542 input_method = Fsymbol_value (Qcurrent_input_method);
4b4deea2 543 enable_multibyte = BVAR (current_buffer, enable_multibyte_characters);
c75000c7 544 }
cee54539 545
748dc60a
RS
546 /* Switch to the minibuffer. */
547
4f69d8f6
RS
548 minibuffer = get_minibuffer (minibuf_level);
549 Fset_buffer (minibuffer);
64a3a3c0 550
cddde921
GM
551 /* Defeat (setq-default truncate-lines t), since truncated lines do
552 not work correctly in minibuffers. (Bug#5715, etc) */
39eb03f1 553 bset_truncate_lines (current_buffer, Qnil);
cddde921 554
1d69c502
RS
555 /* If appropriate, copy enable-multibyte-characters into the minibuffer. */
556 if (inherit_input_method)
39eb03f1 557 bset_enable_multibyte_characters (current_buffer, enable_multibyte);
1d69c502 558
64a3a3c0
JB
559 /* The current buffer's default directory is usually the right thing
560 for our minibuffer here. However, if you're typing a command at
561 a minibuffer-only frame when minibuf_level is zero, then buf IS
562 the current_buffer, so reset_buffer leaves buf's default
563 directory unchanged. This is a bummer when you've just started
564 up Emacs and buf's default directory is Qnil. Here's a hack; can
565 you think of something better to do? Find another buffer with a
566 better directory, and use that one instead. */
748dc60a 567 if (STRINGP (ambient_dir))
39eb03f1 568 bset_directory (current_buffer, ambient_dir);
64a3a3c0
JB
569 else
570 {
8f3a2c26 571 Lisp_Object tail, buf;
64a3a3c0 572
8f3a2c26
DA
573 FOR_EACH_LIVE_BUFFER (tail, buf)
574 if (STRINGP (BVAR (XBUFFER (buf), directory)))
575 {
576 bset_directory (current_buffer,
577 BVAR (XBUFFER (buf), directory));
578 break;
579 }
64a3a3c0
JB
580 }
581
a4aafc54
GM
582 if (!EQ (mini_frame, selected_frame))
583 Fredirect_frame_focus (selected_frame, mini_frame);
43bad991 584
f927c5ae 585 Vminibuf_scroll_window = selected_window;
6122844a 586 if (minibuf_level == 1 || !EQ (minibuf_window, selected_window))
5705966b 587 minibuf_selected_window = selected_window;
b20de1cd
RS
588
589 /* Empty out the minibuffers of all frames other than the one
590 where we are going to display one now.
591 Set them to point to ` *Minibuf-0*', which is always empty. */
620c53a6 592 empty_minibuf = get_minibuffer (0);
b20de1cd
RS
593
594 FOR_EACH_FRAME (dummy, frame)
595 {
596 Lisp_Object root_window = Fframe_root_window (frame);
d3d50620 597 Lisp_Object mini_window = XWINDOW (root_window)->next;
b20de1cd 598
dd95745a
RS
599 if (! NILP (mini_window) && ! EQ (mini_window, minibuf_window)
600 && !NILP (Fwindow_minibuffer_p (mini_window)))
08908aca
MR
601 /* Use set_window_buffer instead of Fset_window_buffer (see
602 discussion of bug#11984, bug#12025, bug#12026). */
603 set_window_buffer (mini_window, empty_minibuf, 0, 0);
b20de1cd
RS
604 }
605
606 /* Display this minibuffer in the proper window. */
08908aca
MR
607 /* Use set_window_buffer instead of Fset_window_buffer (see
608 discussion of bug#11984, bug#12025, bug#12026). */
609 set_window_buffer (minibuf_window, Fcurrent_buffer (), 0, 0);
f1321dc3 610 Fselect_window (minibuf_window, Qnil);
80b00b08 611 XWINDOW (minibuf_window)->hscroll = 0;
f927c5ae 612
748dc60a
RS
613 Fmake_local_variable (Qprint_escape_newlines);
614 print_escape_newlines = 1;
615
616 /* Erase the buffer. */
59115a22 617 {
d311d28c 618 ptrdiff_t count1 = SPECPDL_INDEX ();
59115a22 619 specbind (Qinhibit_read_only, Qt);
a41edd99 620 specbind (Qinhibit_modification_hooks, Qt);
59115a22 621 Ferase_buffer ();
d9d7b298 622
4b4deea2 623 if (!NILP (BVAR (current_buffer, enable_multibyte_characters))
d9d7b298
SM
624 && ! STRING_MULTIBYTE (minibuf_prompt))
625 minibuf_prompt = Fstring_make_multibyte (minibuf_prompt);
6cc62df0 626
d9d7b298
SM
627 /* Insert the prompt, record where it ends. */
628 Finsert (1, &minibuf_prompt);
629 if (PT > BEG)
630 {
631 Fput_text_property (make_number (BEG), make_number (PT),
632 Qfront_sticky, Qt, Qnil);
633 Fput_text_property (make_number (BEG), make_number (PT),
634 Qrear_nonsticky, Qt, Qnil);
635 Fput_text_property (make_number (BEG), make_number (PT),
636 Qfield, Qt, Qnil);
637 Fadd_text_properties (make_number (BEG), make_number (PT),
638 Vminibuffer_prompt_properties, Qnil);
639 }
59115a22
RS
640 unbind_to (count1, Qnil);
641 }
642
7831777b 643 minibuf_prompt_width = current_column ();
9ab4a725 644
748dc60a 645 /* Put in the initial input. */
56a98455 646 if (!NILP (initial))
f927c5ae
JB
647 {
648 Finsert (1, &initial);
6b61353c 649 Fforward_char (make_number (pos));
f927c5ae
JB
650 }
651
39e98b38 652 clear_message (1, 1);
39eb03f1 653 bset_keymap (current_buffer, map);
f927c5ae 654
cee54539 655 /* Turn on an input method stored in INPUT_METHOD if any. */
6801b300 656 if (STRINGP (input_method) && !NILP (Ffboundp (Qactivate_input_method)))
cee54539
KH
657 call1 (Qactivate_input_method, input_method);
658
dee091a3 659 Frun_hooks (1, &Qminibuffer_setup_hook);
5c781212 660
4e6b7204 661 /* Don't allow the user to undo past this point. */
39eb03f1 662 bset_undo_list (current_buffer, Qnil);
4e6b7204 663
f927c5ae
JB
664 recursive_edit_1 ();
665
666 /* If cursor is on the minibuffer line,
667 show the user we have exited by putting it in column 0. */
279cf52c 668 if (XWINDOW (minibuf_window)->cursor.vpos >= 0
f927c5ae
JB
669 && !noninteractive)
670 {
279cf52c
GM
671 XWINDOW (minibuf_window)->cursor.hpos = 0;
672 XWINDOW (minibuf_window)->cursor.x = 0;
673 XWINDOW (minibuf_window)->must_be_updated_p = 1;
a4aafc54 674 update_frame (XFRAME (selected_frame), 1, 1);
fd462129 675 flush_frame (XFRAME (XWINDOW (minibuf_window)->frame));
f927c5ae
JB
676 }
677
c3421833 678 /* Make minibuffer contents into a string. */
4f69d8f6 679 Fset_buffer (minibuffer);
be95a9b6 680 if (allow_props)
a346ec72 681 val = Fminibuffer_contents ();
be95a9b6 682 else
a346ec72 683 val = Fminibuffer_contents_no_properties ();
770970cb 684
b278606c 685 /* VAL is the string of minibuffer text. */
7019cca7 686
b278606c
BF
687 last_minibuf_string = val;
688
4f9f637a 689 /* Choose the string to add to the history. */
b35cd215 690 if (SCHARS (val) != 0)
4f9f637a
RS
691 histstring = val;
692 else if (STRINGP (defalt))
693 histstring = defalt;
fb30dfd2
JL
694 else if (CONSP (defalt) && STRINGP (XCAR (defalt)))
695 histstring = XCAR (defalt);
4f9f637a
RS
696 else
697 histstring = Qnil;
698
699 /* Add the value to the appropriate history list, if any. */
179a4ca7
JL
700 if (!NILP (Vhistory_add_new_input)
701 && SYMBOLP (Vminibuffer_history_variable)
4f9f637a 702 && !NILP (histstring))
3ab14176
KH
703 {
704 /* If the caller wanted to save the value read on a history list,
705 then do so if the value is not already the front of the list. */
706 Lisp_Object histval;
c6d65724
RS
707
708 /* If variable is unbound, make it nil. */
c6d65724 709
8c2dccbf
SM
710 histval = find_symbol_value (Vminibuffer_history_variable);
711 if (EQ (histval, Qunbound))
712 Fset (Vminibuffer_history_variable, Qnil);
3ab14176
KH
713
714 /* The value of the history variable must be a cons or nil. Other
715 values are unacceptable. We silently ignore these values. */
4f9f637a 716
3ab14176 717 if (NILP (histval)
9f6131cf 718 || (CONSP (histval)
4f9f637a 719 /* Don't duplicate the most recent entry in the history. */
b35cd215 720 && (NILP (Fequal (histstring, Fcar (histval))))))
77aa8edf
RS
721 {
722 Lisp_Object length;
723
0da4d471 724 if (history_delete_duplicates) Fdelete (histstring, histval);
4f9f637a 725 histval = Fcons (histstring, histval);
77aa8edf
RS
726 Fset (Vminibuffer_history_variable, histval);
727
728 /* Truncate if requested. */
729 length = Fget (Vminibuffer_history_variable, Qhistory_length);
730 if (NILP (length)) length = Vhistory_length;
e5d4686b
RS
731 if (INTEGERP (length))
732 {
733 if (XINT (length) <= 0)
734 Fset (Vminibuffer_history_variable, Qnil);
735 else
736 {
737 Lisp_Object temp;
738
739 temp = Fnthcdr (Fsub1 (length), histval);
740 if (CONSP (temp)) Fsetcdr (temp, Qnil);
741 }
742 }
77aa8edf 743 }
9f6131cf
RS
744 }
745
fd6fa53f 746 /* If Lisp form desired instead of string, parse it. */
9f6131cf 747 if (expflag)
edfef199 748 val = string_to_object (val, defalt);
3ab14176 749
00a34088
RS
750 /* The appropriate frame will get selected
751 in set-window-configuration. */
f9b9ccef
SM
752 UNGCPRO;
753 return unbind_to (count, val);
f927c5ae
JB
754}
755
756/* Return a buffer to be used as the minibuffer at depth `depth'.
757 depth = 0 is the lowest allowed argument, and that is the value
fd6fa53f 758 used for nonrecursive minibuffer invocations. */
f927c5ae
JB
759
760Lisp_Object
62f19c19 761get_minibuffer (EMACS_INT depth)
f927c5ae
JB
762{
763 Lisp_Object tail, num, buf;
62f19c19 764 char name[sizeof " *Minibuf-*" + INT_STRLEN_BOUND (EMACS_INT)];
f927c5ae 765
5a866662 766 XSETFASTINT (num, depth);
f927c5ae 767 tail = Fnthcdr (num, Vminibuffer_list);
56a98455 768 if (NILP (tail))
f927c5ae 769 {
6c6f1994 770 tail = list1 (Qnil);
f927c5ae
JB
771 Vminibuffer_list = nconc2 (Vminibuffer_list, tail);
772 }
773 buf = Fcar (tail);
e578f381 774 if (NILP (buf) || !BUFFER_LIVE_P (XBUFFER (buf)))
f927c5ae 775 {
a8290ec3
DA
776 buf = Fget_buffer_create
777 (make_formatted_string (name, " *Minibuf-%"pI"d*", depth));
5d6533f1
JB
778
779 /* Although the buffer's name starts with a space, undo should be
780 enabled in it. */
781 Fbuffer_enable_undo (buf);
782
f3fbd155 783 XSETCAR (tail, buf);
f927c5ae
JB
784 }
785 else
5956f71d 786 {
d311d28c 787 ptrdiff_t count = SPECPDL_INDEX ();
041a49a6
DA
788 /* We have to empty both overlay lists. Otherwise we end
789 up with overlays that think they belong to this buffer
790 while the buffer doesn't know about them any more. */
599ca9c2
SM
791 delete_all_overlays (XBUFFER (buf));
792 reset_buffer (XBUFFER (buf));
66322887 793 record_unwind_current_buffer ();
6b3faad8 794 Fset_buffer (buf);
fd6fa53f
SM
795 if (!NILP (Ffboundp (intern ("minibuffer-inactive-mode"))))
796 call0 (intern ("minibuffer-inactive-mode"));
797 else
798 Fkill_all_local_variables ();
6b3faad8 799 unbind_to (count, Qnil);
5956f71d 800 }
64a3a3c0 801
f927c5ae
JB
802 return buf;
803}
804
27e498e6
PE
805static void
806run_exit_minibuf_hook (void)
7292839d 807{
dee091a3 808 safe_run_hooks (Qminibuffer_exit_hook);
7292839d
SM
809}
810
279cf52c 811/* This function is called on exiting minibuffer, whether normally or
fd6fa53f 812 not, and it restores the current window, buffer, etc. */
f927c5ae 813
27e498e6
PE
814static void
815read_minibuf_unwind (void)
f927c5ae 816{
c24e1160 817 Lisp_Object old_deactivate_mark;
59115a22 818 Lisp_Object window;
c24e1160 819
f927c5ae 820 /* If this was a recursive minibuffer,
59115a22 821 tie the minibuffer window back to the outer level minibuffer buffer. */
f927c5ae 822 minibuf_level--;
f927c5ae 823
59115a22 824 window = minibuf_window;
279cf52c
GM
825 /* To keep things predictable, in case it matters, let's be in the
826 minibuffer when we reset the relevant variables. */
e74aeda8 827 Fset_buffer (XWINDOW (window)->contents);
59115a22
RS
828
829 /* Restore prompt, etc, from outer minibuffer level. */
4d04c1f1
KH
830 minibuf_prompt = Fcar (minibuf_save_list);
831 minibuf_save_list = Fcdr (minibuf_save_list);
832 minibuf_prompt_width = XFASTINT (Fcar (minibuf_save_list));
833 minibuf_save_list = Fcdr (minibuf_save_list);
834 Vhelp_form = Fcar (minibuf_save_list);
835 minibuf_save_list = Fcdr (minibuf_save_list);
ee9e37ab 836 Vcurrent_prefix_arg = Fcar (minibuf_save_list);
4d04c1f1
KH
837 minibuf_save_list = Fcdr (minibuf_save_list);
838 Vminibuffer_history_position = Fcar (minibuf_save_list);
839 minibuf_save_list = Fcdr (minibuf_save_list);
840 Vminibuffer_history_variable = Fcar (minibuf_save_list);
841 minibuf_save_list = Fcdr (minibuf_save_list);
30e13e56 842 Voverriding_local_map = Fcar (minibuf_save_list);
c5b6b680 843 minibuf_save_list = Fcdr (minibuf_save_list);
914860c2
RS
844#if 0
845 temp = Fcar (minibuf_save_list);
846 if (FRAME_LIVE_P (XFRAME (WINDOW_FRAME (XWINDOW (temp)))))
847 minibuf_window = temp;
848#endif
30e13e56 849 minibuf_save_list = Fcdr (minibuf_save_list);
59115a22
RS
850
851 /* Erase the minibuffer we were using at this level. */
852 {
d311d28c 853 ptrdiff_t count = SPECPDL_INDEX ();
59115a22
RS
854 /* Prevent error in erase-buffer. */
855 specbind (Qinhibit_read_only, Qt);
bd819d14 856 specbind (Qinhibit_modification_hooks, Qt);
59115a22
RS
857 old_deactivate_mark = Vdeactivate_mark;
858 Ferase_buffer ();
859 Vdeactivate_mark = old_deactivate_mark;
860 unbind_to (count, Qnil);
861 }
862
544e358d
GM
863 /* When we get to the outmost level, make sure we resize the
864 mini-window back to its normal size. */
865 if (minibuf_level == 0)
1e3f16d5 866 resize_mini_window (XWINDOW (window), 0);
544e358d 867
628fdc56 868 /* Enforce full redisplay. FIXME: make it more selective. */
94ae2ad4 869 windows_or_buffers_changed = 22;
fd6fa53f
SM
870
871 /* In case the previous minibuffer displayed in this miniwindow is
872 dead, we may keep displaying this buffer (tho it's inactive), so reset it,
873 to make sure we don't leave around bindings and stuff which only
874 made sense during the read_minibuf invocation. */
875 call0 (intern ("minibuffer-inactive-mode"));
f927c5ae
JB
876}
877\f
b9d721de 878
a7ca3326 879DEFUN ("read-from-minibuffer", Fread_from_minibuffer,
16a97296 880 Sread_from_minibuffer, 1, 7, 0,
af52c32d 881 doc: /* Read a string from the minibuffer, prompting with string PROMPT.
6b61353c
KH
882The optional second arg INITIAL-CONTENTS is an obsolete alternative to
883 DEFAULT-VALUE. It normally should be nil in new code, except when
884 HIST is a cons. It is discussed in more detail below.
f6fc4d87 885
a1f17501
PJ
886Third arg KEYMAP is a keymap to use whilst reading;
887 if omitted or nil, the default is `minibuffer-local-map'.
f6fc4d87
CY
888
889If fourth arg READ is non-nil, interpret the result as a Lisp object
a1f17501
PJ
890 and return that object:
891 in other words, do `(car (read-from-string INPUT-STRING))'
f6fc4d87 892
6b61353c
KH
893Fifth arg HIST, if non-nil, specifies a history list and optionally
894 the initial position in the list. It can be a symbol, which is the
f6fc4d87
CY
895 history list variable to use, or a cons cell (HISTVAR . HISTPOS).
896 In that case, HISTVAR is the history list variable to use, and
897 HISTPOS is the initial position for use by the minibuffer history
898 commands. For consistency, you should also specify that element of
899 the history as the value of INITIAL-CONTENTS. Positions are counted
900 starting from 1 at the beginning of the list.
901
902Sixth arg DEFAULT-VALUE, if non-nil, should be a string, which is used
903 as the default to `read' if READ is non-nil and the user enters
904 empty input. But if READ is nil, this function does _not_ return
905 DEFAULT-VALUE for empty input! Instead, it returns the empty string.
906
907 Whatever the value of READ, DEFAULT-VALUE is made available via the
908 minibuffer history commands. DEFAULT-VALUE can also be a list of
909 strings, in which case all the strings are available in the history,
910 and the first string is the default to `read' if READ is non-nil.
911
a1f17501 912Seventh arg INHERIT-INPUT-METHOD, if non-nil, means the minibuffer inherits
029a305c 913 the current input method and the setting of `enable-multibyte-characters'.
f6fc4d87 914
a1f17501
PJ
915If the variable `minibuffer-allow-text-properties' is non-nil,
916 then the string which is returned includes whatever text properties
6b61353c
KH
917 were present in the minibuffer. Otherwise the value has no text properties.
918
919The remainder of this documentation string describes the
920INITIAL-CONTENTS argument in more detail. It is only relevant when
921studying existing code, or when HIST is a cons. If non-nil,
922INITIAL-CONTENTS is a string to be inserted into the minibuffer before
923reading input. Normally, point is put at the end of that string.
924However, if INITIAL-CONTENTS is \(STRING . POSITION), the initial
925input is STRING, but point is placed at _one-indexed_ position
926POSITION in the minibuffer. Any integer value less than or equal to
927one puts point at the beginning of the string. *Note* that this
928behavior differs from the way such arguments are used in `completing-read'
929and some related functions, which use zero-indexing for POSITION. */)
5842a27b 930 (Lisp_Object prompt, Lisp_Object initial_contents, Lisp_Object keymap, Lisp_Object read, Lisp_Object hist, Lisp_Object default_value, Lisp_Object inherit_input_method)
f927c5ae 931{
6b61353c 932 Lisp_Object histvar, histpos, val;
1d8d92f4
RS
933 struct gcpro gcpro1;
934
b7826503 935 CHECK_STRING (prompt);
56a98455 936 if (NILP (keymap))
f927c5ae
JB
937 keymap = Vminibuffer_local_map;
938 else
02067692 939 keymap = get_keymap (keymap, 1, 0);
770970cb 940
7510b296 941 if (SYMBOLP (hist))
770970cb
RS
942 {
943 histvar = hist;
944 histpos = Qnil;
945 }
946 else
947 {
948 histvar = Fcar_safe (hist);
949 histpos = Fcdr_safe (hist);
950 }
951 if (NILP (histvar))
952 histvar = Qminibuffer_history;
953 if (NILP (histpos))
5a866662 954 XSETFASTINT (histpos, 0);
770970cb 955
1d8d92f4 956 GCPRO1 (default_value);
e5d4686b 957 val = read_minibuf (keymap, initial_contents, prompt,
d311d28c 958 !NILP (read),
c3421833 959 histvar, histpos, default_value,
cee54539 960 minibuffer_allow_text_properties,
b35cd215 961 !NILP (inherit_input_method));
1d8d92f4 962 UNGCPRO;
e5d4686b 963 return val;
f927c5ae
JB
964}
965
fd6fa53f 966/* Functions that use the minibuffer to read various things. */
f927c5ae 967
a7ca3326 968DEFUN ("read-string", Fread_string, Sread_string, 1, 5, 0,
af52c32d 969 doc: /* Read a string from the minibuffer, prompting with string PROMPT.
a1f17501 970If non-nil, second arg INITIAL-INPUT is a string to insert before reading.
6b61353c
KH
971 This argument has been superseded by DEFAULT-VALUE and should normally
972 be nil in new code. It behaves as in `read-from-minibuffer'. See the
973 documentation string of that function for details.
a1f17501
PJ
974The third arg HISTORY, if non-nil, specifies a history list
975 and optionally the initial position in the list.
976See `read-from-minibuffer' for details of HISTORY argument.
2e3148e2
JL
977Fourth arg DEFAULT-VALUE is the default value or the list of default values.
978 If non-nil, it is used for history commands, and as the value (or the first
979 element of the list of default values) to return if the user enters the
980 empty string.
a1f17501 981Fifth arg INHERIT-INPUT-METHOD, if non-nil, means the minibuffer inherits
029a305c 982 the current input method and the setting of `enable-multibyte-characters'. */)
5842a27b 983 (Lisp_Object prompt, Lisp_Object initial_input, Lisp_Object history, Lisp_Object default_value, Lisp_Object inherit_input_method)
f927c5ae 984{
b9a86585 985 Lisp_Object val;
ec6de1e2
SM
986 ptrdiff_t count = SPECPDL_INDEX ();
987
988 /* Just in case we're in a recursive minibuffer, make it clear that the
989 previous minibuffer's completion table does not apply to the new
990 minibuffer.
991 FIXME: `minibuffer-completion-table' should be buffer-local instead. */
992 specbind (Qminibuffer_completion_table, Qnil);
993
b9a86585
RS
994 val = Fread_from_minibuffer (prompt, initial_input, Qnil,
995 Qnil, history, default_value,
b35cd215 996 inherit_input_method);
d5db4077 997 if (STRINGP (val) && SCHARS (val) == 0 && ! NILP (default_value))
fb30dfd2 998 val = CONSP (default_value) ? XCAR (default_value) : default_value;
ec6de1e2 999 return unbind_to (count, val);
f927c5ae
JB
1000}
1001
cee54539 1002DEFUN ("read-no-blanks-input", Fread_no_blanks_input, Sread_no_blanks_input, 1, 3, 0,
af52c32d 1003 doc: /* Read a string from the terminal, not allowing blanks.
6b61353c
KH
1004Prompt with PROMPT. Whitespace terminates the input. If INITIAL is
1005non-nil, it should be a string, which is used as initial input, with
1006point positioned at the end, so that SPACE will accept the input.
1007\(Actually, INITIAL can also be a cons of a string and an integer.
1008Such values are treated as in `read-from-minibuffer', but are normally
1009not useful in this function.)
a1f17501 1010Third arg INHERIT-INPUT-METHOD, if non-nil, means the minibuffer inherits
6b61353c 1011the current input method and the setting of`enable-multibyte-characters'. */)
5842a27b 1012 (Lisp_Object prompt, Lisp_Object initial, Lisp_Object inherit_input_method)
f927c5ae 1013{
b7826503 1014 CHECK_STRING (prompt);
d311d28c 1015 return read_minibuf (Vminibuffer_local_ns_map, initial, prompt,
cee54539 1016 0, Qminibuffer_history, make_number (0), Qnil, 0,
b35cd215 1017 !NILP (inherit_input_method));
f927c5ae
JB
1018}
1019
e5d4686b 1020DEFUN ("read-command", Fread_command, Sread_command, 1, 2, 0,
af52c32d 1021 doc: /* Read the name of a command and return as a symbol.
2e3148e2
JL
1022Prompt with PROMPT. By default, return DEFAULT-VALUE or its first element
1023if it is a list. */)
5842a27b 1024 (Lisp_Object prompt, Lisp_Object default_value)
f927c5ae 1025{
7c8d9931
RS
1026 Lisp_Object name, default_string;
1027
1028 if (NILP (default_value))
1029 default_string = Qnil;
1030 else if (SYMBOLP (default_value))
caa4733e 1031 default_string = SYMBOL_NAME (default_value);
7c8d9931
RS
1032 else
1033 default_string = default_value;
9ab4a725 1034
7c8d9931
RS
1035 name = Fcompleting_read (prompt, Vobarray, Qcommandp, Qt,
1036 Qnil, Qnil, default_string, Qnil);
1037 if (NILP (name))
1038 return name;
1039 return Fintern (name, Qnil);
f927c5ae
JB
1040}
1041
1042#ifdef NOTDEF
1043DEFUN ("read-function", Fread_function, Sread_function, 1, 1, 0,
af52c32d 1044 doc: /* One arg PROMPT, a string. Read the name of a function and return as a symbol.
fd771ceb 1045Prompt with PROMPT. */)
5842a27b 1046 (Lisp_Object prompt)
f927c5ae 1047{
cee54539 1048 return Fintern (Fcompleting_read (prompt, Vobarray, Qfboundp, Qt, Qnil, Qnil, Qnil, Qnil),
f927c5ae
JB
1049 Qnil);
1050}
1051#endif /* NOTDEF */
1052
a7ca3326 1053DEFUN ("read-variable", Fread_variable, Sread_variable, 1, 2, 0,
b4d3bc10 1054 doc: /* Read the name of a user option and return it as a symbol.
2e3148e2
JL
1055Prompt with PROMPT. By default, return DEFAULT-VALUE or its first element
1056if it is a list.
b4d3bc10
CY
1057A user option, or customizable variable, is one for which
1058`custom-variable-p' returns non-nil. */)
5842a27b 1059 (Lisp_Object prompt, Lisp_Object default_value)
f927c5ae 1060{
7c8d9931
RS
1061 Lisp_Object name, default_string;
1062
1063 if (NILP (default_value))
1064 default_string = Qnil;
1065 else if (SYMBOLP (default_value))
caa4733e 1066 default_string = SYMBOL_NAME (default_value);
7c8d9931
RS
1067 else
1068 default_string = default_value;
9ab4a725 1069
7c8d9931 1070 name = Fcompleting_read (prompt, Vobarray,
b4d3bc10 1071 Qcustom_variable_p, Qt,
7c8d9931
RS
1072 Qnil, Qnil, default_string, Qnil);
1073 if (NILP (name))
1074 return name;
1075 return Fintern (name, Qnil);
f927c5ae
JB
1076}
1077
a7ca3326 1078DEFUN ("read-buffer", Fread_buffer, Sread_buffer, 1, 3, 0,
fd771ceb
PJ
1079 doc: /* Read the name of a buffer and return as a string.
1080Prompt with PROMPT.
a1f17501 1081Optional second arg DEF is value to return if user enters an empty line.
2e3148e2 1082 If DEF is a list of default values, return its first element.
5fedada7
CY
1083Optional third arg REQUIRE-MATCH determines whether non-existing
1084 buffer names are allowed. It has the same meaning as the
a2a0d36b 1085 REQUIRE-MATCH argument of `completing-read'.
33df281c
CY
1086The argument PROMPT should be a string ending with a colon and a space.
1087If `read-buffer-completion-ignore-case' is non-nil, completion ignores
1088case while reading the buffer name.
1089If `read-buffer-function' is non-nil, this works by calling it as a
1090function, instead of the usual behavior. */)
5842a27b 1091 (Lisp_Object prompt, Lisp_Object def, Lisp_Object require_match)
f927c5ae 1092{
33df281c 1093 Lisp_Object args[4], result;
637de37e 1094 char *s;
ad39faca 1095 ptrdiff_t len;
d311d28c 1096 ptrdiff_t count = SPECPDL_INDEX ();
9ab4a725 1097
7510b296 1098 if (BUFFERP (def))
4b4deea2 1099 def = BVAR (XBUFFER (def), name);
eebbfb01 1100
33df281c
CY
1101 specbind (Qcompletion_ignore_case,
1102 read_buffer_completion_ignore_case ? Qt : Qnil);
1103
eebbfb01
KH
1104 if (NILP (Vread_buffer_function))
1105 {
1106 if (!NILP (def))
1107 {
97c3e4cc
RF
1108 /* A default value was provided: we must change PROMPT,
1109 editing the default value in before the colon. To achieve
1110 this, we replace PROMPT with a substring that doesn't
1111 contain the terminal space and colon (if present). They
1112 are then added back using Fformat. */
1113
1114 if (STRINGP (prompt))
1115 {
637de37e 1116 s = SSDATA (prompt);
ad39faca 1117 len = SBYTES (prompt);
97c3e4cc
RF
1118 if (len >= 2 && s[len - 2] == ':' && s[len - 1] == ' ')
1119 len = len - 2;
1120 else if (len >= 1 && (s[len - 1] == ':' || s[len - 1] == ' '))
1121 len--;
1122
1123 prompt = make_specified_string (s, -1, len,
1124 STRING_MULTIBYTE (prompt));
1125 }
1126
1127 args[0] = build_string ("%s (default %s): ");
eebbfb01 1128 args[1] = prompt;
fb30dfd2 1129 args[2] = CONSP (def) ? XCAR (def) : def;
eebbfb01
KH
1130 prompt = Fformat (3, args);
1131 }
1132
33df281c 1133 result = Fcompleting_read (prompt, intern ("internal-complete-buffer"),
620c53a6
SM
1134 Qnil, require_match, Qnil,
1135 Qbuffer_name_history, def, Qnil);
eebbfb01
KH
1136 }
1137 else
f927c5ae 1138 {
eebbfb01 1139 args[0] = Vread_buffer_function;
f927c5ae
JB
1140 args[1] = prompt;
1141 args[2] = def;
eebbfb01 1142 args[3] = require_match;
fd6fa53f 1143 result = Ffuncall (4, args);
f927c5ae 1144 }
33df281c 1145 return unbind_to (count, result);
f927c5ae
JB
1146}
1147\f
ec067ec7 1148static Lisp_Object
971de7fb 1149minibuf_conform_representation (Lisp_Object string, Lisp_Object basis)
ec067ec7
RS
1150{
1151 if (STRING_MULTIBYTE (string) == STRING_MULTIBYTE (basis))
1152 return string;
1153
1154 if (STRING_MULTIBYTE (string))
1155 return Fstring_make_unibyte (string);
1156 else
1157 return Fstring_make_multibyte (string);
1158}
1159
f927c5ae 1160DEFUN ("try-completion", Ftry_completion, Stry_completion, 2, 3, 0,
a284cdbb
RS
1161 doc: /* Return common substring of all completions of STRING in COLLECTION.
1162Test each possible completion specified by COLLECTION
1163to see if it begins with STRING. The possible completions may be
3809648a
KS
1164strings or symbols. Symbols are converted to strings before testing,
1165see `symbol-name'.
a284cdbb
RS
1166All that match STRING are compared together; the longest initial sequence
1167common to all these matches is the return value.
1168If there is no match at all, the return value is nil.
1169For a unique match which is exact, the return value is t.
1170
1171If COLLECTION is an alist, the keys (cars of elements) are the
1172possible completions. If an element is not a cons cell, then the
1173element itself is the possible completion.
1174If COLLECTION is a hash-table, all the keys that are strings or symbols
1175are the possible completions.
1176If COLLECTION is an obarray, the names of all symbols in the obarray
1177are the possible completions.
1178
1179COLLECTION can also be a function to do the completion itself.
a1f17501
PJ
1180It receives three arguments: the values STRING, PREDICATE and nil.
1181Whatever it returns becomes the value of `try-completion'.
1182
1183If optional third argument PREDICATE is non-nil,
1184it is used to test each possible match.
1185The match is a candidate only if PREDICATE returns non-nil.
1186The argument given to PREDICATE is the alist element
a284cdbb 1187or the symbol from the obarray. If COLLECTION is a hash-table,
85cd4372 1188predicate is called with two arguments: the key and the value.
a1f17501 1189Additionally to this predicate, `completion-regexp-list'
af52c32d 1190is used to further constrain the set of candidates. */)
5842a27b 1191 (Lisp_Object string, Lisp_Object collection, Lisp_Object predicate)
f927c5ae
JB
1192{
1193 Lisp_Object bestmatch, tail, elt, eltstring;
af2b7cd5 1194 /* Size in bytes of BESTMATCH. */
d311d28c 1195 ptrdiff_t bestmatchsize = 0;
af2b7cd5 1196 /* These are in bytes, too. */
d311d28c 1197 ptrdiff_t compare, matchsize;
f6d4c7a4
RS
1198 enum { function_table, list_table, obarray_table, hash_table}
1199 type = (HASH_TABLE_P (collection) ? hash_table
1200 : VECTORP (collection) ? obarray_table
1201 : ((NILP (collection)
1202 || (CONSP (collection)
1203 && (!SYMBOLP (XCAR (collection))
1204 || NILP (XCAR (collection)))))
1205 ? list_table : function_table));
d311d28c 1206 ptrdiff_t idx = 0, obsize = 0;
f927c5ae 1207 int matchcount = 0;
d311d28c 1208 ptrdiff_t bindcount = -1;
f927c5ae
JB
1209 Lisp_Object bucket, zero, end, tem;
1210 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
1211
b7826503 1212 CHECK_STRING (string);
f6d4c7a4 1213 if (type == function_table)
a284cdbb 1214 return call3 (collection, string, predicate, Qnil);
f927c5ae 1215
6bbd7a29 1216 bestmatch = bucket = Qnil;
c8ae863b 1217 zero = make_number (0);
f927c5ae 1218
a284cdbb
RS
1219 /* If COLLECTION is not a list, set TAIL just for gc pro. */
1220 tail = collection;
f6d4c7a4 1221 if (type == obarray_table)
f927c5ae 1222 {
a284cdbb 1223 collection = check_obarray (collection);
77b37c05 1224 obsize = ASIZE (collection);
28be1ada 1225 bucket = AREF (collection, idx);
f927c5ae
JB
1226 }
1227
1228 while (1)
1229 {
fd6fa53f
SM
1230 /* Get the next element of the alist, obarray, or hash-table. */
1231 /* Exit the loop if the elements are all used up. */
f927c5ae 1232 /* elt gets the alist element or symbol.
fd6fa53f 1233 eltstring gets the name to check as a completion. */
f927c5ae 1234
f6d4c7a4 1235 if (type == list_table)
f927c5ae 1236 {
695deb18 1237 if (!CONSP (tail))
f927c5ae 1238 break;
695deb18
SM
1239 elt = XCAR (tail);
1240 eltstring = CONSP (elt) ? XCAR (elt) : elt;
1241 tail = XCDR (tail);
f927c5ae 1242 }
f6d4c7a4 1243 else if (type == obarray_table)
f927c5ae 1244 {
c8ae863b 1245 if (!EQ (bucket, zero))
f927c5ae 1246 {
9b6b374a
JB
1247 if (!SYMBOLP (bucket))
1248 error ("Bad data in guts of obarray");
f927c5ae 1249 elt = bucket;
3809648a 1250 eltstring = elt;
f927c5ae
JB
1251 if (XSYMBOL (bucket)->next)
1252 XSETSYMBOL (bucket, XSYMBOL (bucket)->next);
1253 else
5a866662 1254 XSETFASTINT (bucket, 0);
f927c5ae 1255 }
62137a95 1256 else if (++idx >= obsize)
f927c5ae
JB
1257 break;
1258 else
1259 {
28be1ada 1260 bucket = AREF (collection, idx);
f927c5ae
JB
1261 continue;
1262 }
1263 }
f6d4c7a4 1264 else /* if (type == hash_table) */
85cd4372 1265 {
62137a95
PE
1266 while (idx < HASH_TABLE_SIZE (XHASH_TABLE (collection))
1267 && NILP (HASH_HASH (XHASH_TABLE (collection), idx)))
1268 idx++;
1269 if (idx >= HASH_TABLE_SIZE (XHASH_TABLE (collection)))
85cd4372
SM
1270 break;
1271 else
62137a95 1272 elt = eltstring = HASH_KEY (XHASH_TABLE (collection), idx++);
85cd4372 1273 }
f927c5ae 1274
fd6fa53f 1275 /* Is this element a possible completion? */
f927c5ae 1276
3809648a
KS
1277 if (SYMBOLP (eltstring))
1278 eltstring = Fsymbol_name (eltstring);
1279
7510b296 1280 if (STRINGP (eltstring)
d5db4077 1281 && SCHARS (string) <= SCHARS (eltstring)
c8ae863b 1282 && (tem = Fcompare_strings (eltstring, zero,
d5db4077 1283 make_number (SCHARS (string)),
c8ae863b 1284 string, zero, Qnil,
6b61353c 1285 completion_ignore_case ? Qt : Qnil),
69f4ef20 1286 EQ (Qt, tem)))
f927c5ae 1287 {
fd6fa53f 1288 /* Yes. */
42006772 1289 Lisp_Object regexps;
42006772
RS
1290
1291 /* Ignore this element if it fails to match all the regexps. */
6b61353c 1292 {
6b61353c
KH
1293 for (regexps = Vcompletion_regexp_list; CONSP (regexps);
1294 regexps = XCDR (regexps))
1295 {
acd81db9
DK
1296 if (bindcount < 0) {
1297 bindcount = SPECPDL_INDEX ();
1298 specbind (Qcase_fold_search,
1299 completion_ignore_case ? Qt : Qnil);
77443789 1300 }
6b61353c
KH
1301 tem = Fstring_match (XCAR (regexps), eltstring, zero);
1302 if (NILP (tem))
1303 break;
1304 }
6b61353c
KH
1305 if (CONSP (regexps))
1306 continue;
1307 }
42006772 1308
f927c5ae 1309 /* Ignore this element if there is a predicate
fd6fa53f 1310 and the predicate doesn't like it. */
f927c5ae 1311
7efd36fc 1312 if (!NILP (predicate))
f927c5ae 1313 {
7efd36fc 1314 if (EQ (predicate, Qcommandp))
c837f4f9 1315 tem = Fcommandp (elt, Qnil);
f927c5ae
JB
1316 else
1317 {
f6d4c7a4
RS
1318 if (bindcount >= 0)
1319 {
1320 unbind_to (bindcount, Qnil);
1321 bindcount = -1;
1322 }
f927c5ae 1323 GCPRO4 (tail, string, eltstring, bestmatch);
f6d4c7a4
RS
1324 tem = (type == hash_table
1325 ? call2 (predicate, elt,
1326 HASH_VALUE (XHASH_TABLE (collection),
62137a95 1327 idx - 1))
f6d4c7a4 1328 : call1 (predicate, elt));
f927c5ae
JB
1329 UNGCPRO;
1330 }
56a98455 1331 if (NILP (tem)) continue;
f927c5ae
JB
1332 }
1333
1334 /* Update computation of how much all possible completions match */
1335
56a98455 1336 if (NILP (bestmatch))
af2b7cd5 1337 {
85cd4372 1338 matchcount = 1;
af2b7cd5 1339 bestmatch = eltstring;
d5db4077 1340 bestmatchsize = SCHARS (eltstring);
af2b7cd5 1341 }
f927c5ae
JB
1342 else
1343 {
d5db4077 1344 compare = min (bestmatchsize, SCHARS (eltstring));
c8ae863b 1345 tem = Fcompare_strings (bestmatch, zero,
69f4ef20 1346 make_number (compare),
c8ae863b 1347 eltstring, zero,
69f4ef20
RS
1348 make_number (compare),
1349 completion_ignore_case ? Qt : Qnil);
71376d4b 1350 matchsize = EQ (tem, Qt) ? compare : eabs (XINT (tem)) - 1;
69f4ef20 1351
52b14ac0
JB
1352 if (completion_ignore_case)
1353 {
1354 /* If this is an exact match except for case,
1355 use it as the best match rather than one that is not an
1356 exact match. This way, we get the case pattern
1357 of the actual match. */
d5db4077
KR
1358 if ((matchsize == SCHARS (eltstring)
1359 && matchsize < SCHARS (bestmatch))
52b14ac0
JB
1360 ||
1361 /* If there is more than one exact match ignoring case,
1362 and one of them is exact including case,
1363 prefer that one. */
1364 /* If there is no exact match ignoring case,
1365 prefer a match that does not change the case
1366 of the input. */
d5db4077 1367 ((matchsize == SCHARS (eltstring))
52b14ac0 1368 ==
d5db4077 1369 (matchsize == SCHARS (bestmatch))
c8ae863b 1370 && (tem = Fcompare_strings (eltstring, zero,
d5db4077 1371 make_number (SCHARS (string)),
c8ae863b 1372 string, zero,
69f4ef20
RS
1373 Qnil,
1374 Qnil),
1375 EQ (Qt, tem))
c8ae863b 1376 && (tem = Fcompare_strings (bestmatch, zero,
d5db4077 1377 make_number (SCHARS (string)),
c8ae863b 1378 string, zero,
69f4ef20
RS
1379 Qnil,
1380 Qnil),
1381 ! EQ (Qt, tem))))
52b14ac0
JB
1382 bestmatch = eltstring;
1383 }
d5db4077 1384 if (bestmatchsize != SCHARS (eltstring)
85cd4372
SM
1385 || bestmatchsize != matchsize)
1386 /* Don't count the same string multiple times. */
7cded46f 1387 matchcount += matchcount <= 1;
52b14ac0 1388 bestmatchsize = matchsize;
d5db4077 1389 if (matchsize <= SCHARS (string)
78893e05
CY
1390 /* If completion-ignore-case is non-nil, don't
1391 short-circuit because we want to find the best
1392 possible match *including* case differences. */
1393 && !completion_ignore_case
695deb18
SM
1394 && matchcount > 1)
1395 /* No need to look any further. */
1396 break;
f927c5ae
JB
1397 }
1398 }
1399 }
1400
acd81db9
DK
1401 if (bindcount >= 0) {
1402 unbind_to (bindcount, Qnil);
1403 bindcount = -1;
1404 }
1405
56a98455 1406 if (NILP (bestmatch))
fd6fa53f 1407 return Qnil; /* No completions found. */
52b14ac0
JB
1408 /* If we are ignoring case, and there is no exact match,
1409 and no additional text was supplied,
1410 don't change the case of what the user typed. */
d5db4077
KR
1411 if (completion_ignore_case && bestmatchsize == SCHARS (string)
1412 && SCHARS (bestmatch) > bestmatchsize)
ec067ec7 1413 return minibuf_conform_representation (string, bestmatch);
52b14ac0
JB
1414
1415 /* Return t if the supplied string is an exact match (counting case);
1416 it does not require any change to be made. */
928b5acc 1417 if (matchcount == 1 && !NILP (Fequal (bestmatch, string)))
f927c5ae
JB
1418 return Qt;
1419
5a866662 1420 XSETFASTINT (zero, 0); /* Else extract the part in which */
fd6fa53f 1421 XSETFASTINT (end, bestmatchsize); /* all completions agree. */
f927c5ae
JB
1422 return Fsubstring (bestmatch, zero, end);
1423}
f927c5ae 1424\f
89a255dc 1425DEFUN ("all-completions", Fall_completions, Sall_completions, 2, 4, 0,
a284cdbb
RS
1426 doc: /* Search for partial matches to STRING in COLLECTION.
1427Test each of the possible completions specified by COLLECTION
1428to see if it begins with STRING. The possible completions may be
3809648a
KS
1429strings or symbols. Symbols are converted to strings before testing,
1430see `symbol-name'.
a284cdbb 1431The value is a list of all the possible completions that match STRING.
a1f17501 1432
a284cdbb
RS
1433If COLLECTION is an alist, the keys (cars of elements) are the
1434possible completions. If an element is not a cons cell, then the
1435element itself is the possible completion.
1436If COLLECTION is a hash-table, all the keys that are strings or symbols
1437are the possible completions.
1438If COLLECTION is an obarray, the names of all symbols in the obarray
1439are the possible completions.
a1f17501 1440
a284cdbb 1441COLLECTION can also be a function to do the completion itself.
a1f17501
PJ
1442It receives three arguments: the values STRING, PREDICATE and t.
1443Whatever it returns becomes the value of `all-completions'.
1444
1445If optional third argument PREDICATE is non-nil,
1446it is used to test each possible match.
1447The match is a candidate only if PREDICATE returns non-nil.
1448The argument given to PREDICATE is the alist element
a284cdbb 1449or the symbol from the obarray. If COLLECTION is a hash-table,
85cd4372 1450predicate is called with two arguments: the key and the value.
a1f17501
PJ
1451Additionally to this predicate, `completion-regexp-list'
1452is used to further constrain the set of candidates.
1453
782a943e 1454An obsolete optional fourth argument HIDE-SPACES is still accepted for
057bce6f 1455backward compatibility. If non-nil, strings in COLLECTION that start
4fcc3d32 1456with a space are ignored unless STRING itself starts with a space. */)
5842a27b 1457 (Lisp_Object string, Lisp_Object collection, Lisp_Object predicate, Lisp_Object hide_spaces)
f927c5ae
JB
1458{
1459 Lisp_Object tail, elt, eltstring;
1460 Lisp_Object allmatches;
a284cdbb
RS
1461 int type = HASH_TABLE_P (collection) ? 3
1462 : VECTORP (collection) ? 2
1463 : NILP (collection) || (CONSP (collection)
1464 && (!SYMBOLP (XCAR (collection))
1465 || NILP (XCAR (collection))));
d311d28c
PE
1466 ptrdiff_t idx = 0, obsize = 0;
1467 ptrdiff_t bindcount = -1;
c8ae863b 1468 Lisp_Object bucket, tem, zero;
f927c5ae
JB
1469 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
1470
b7826503 1471 CHECK_STRING (string);
85cd4372 1472 if (type == 0)
a284cdbb 1473 return call3 (collection, string, predicate, Qt);
6bbd7a29 1474 allmatches = bucket = Qnil;
c8ae863b 1475 zero = make_number (0);
f927c5ae 1476
a284cdbb
RS
1477 /* If COLLECTION is not a list, set TAIL just for gc pro. */
1478 tail = collection;
85cd4372 1479 if (type == 2)
f927c5ae 1480 {
373bf2b7 1481 collection = check_obarray (collection);
77b37c05 1482 obsize = ASIZE (collection);
28be1ada 1483 bucket = AREF (collection, idx);
f927c5ae
JB
1484 }
1485
1486 while (1)
1487 {
fd6fa53f
SM
1488 /* Get the next element of the alist, obarray, or hash-table. */
1489 /* Exit the loop if the elements are all used up. */
f927c5ae 1490 /* elt gets the alist element or symbol.
fd6fa53f 1491 eltstring gets the name to check as a completion. */
f927c5ae 1492
85cd4372 1493 if (type == 1)
f927c5ae 1494 {
695deb18 1495 if (!CONSP (tail))
f927c5ae 1496 break;
695deb18
SM
1497 elt = XCAR (tail);
1498 eltstring = CONSP (elt) ? XCAR (elt) : elt;
1499 tail = XCDR (tail);
f927c5ae 1500 }
85cd4372 1501 else if (type == 2)
f927c5ae 1502 {
373bf2b7 1503 if (!EQ (bucket, zero))
f927c5ae 1504 {
373bf2b7
AS
1505 if (!SYMBOLP (bucket))
1506 error ("Bad data in guts of obarray");
f927c5ae 1507 elt = bucket;
3809648a 1508 eltstring = elt;
f927c5ae
JB
1509 if (XSYMBOL (bucket)->next)
1510 XSETSYMBOL (bucket, XSYMBOL (bucket)->next);
1511 else
5a866662 1512 XSETFASTINT (bucket, 0);
f927c5ae 1513 }
62137a95 1514 else if (++idx >= obsize)
f927c5ae
JB
1515 break;
1516 else
1517 {
28be1ada 1518 bucket = AREF (collection, idx);
f927c5ae
JB
1519 continue;
1520 }
1521 }
85cd4372
SM
1522 else /* if (type == 3) */
1523 {
62137a95
PE
1524 while (idx < HASH_TABLE_SIZE (XHASH_TABLE (collection))
1525 && NILP (HASH_HASH (XHASH_TABLE (collection), idx)))
1526 idx++;
1527 if (idx >= HASH_TABLE_SIZE (XHASH_TABLE (collection)))
85cd4372
SM
1528 break;
1529 else
62137a95 1530 elt = eltstring = HASH_KEY (XHASH_TABLE (collection), idx++);
85cd4372 1531 }
f927c5ae 1532
fd6fa53f 1533 /* Is this element a possible completion? */
f927c5ae 1534
3809648a
KS
1535 if (SYMBOLP (eltstring))
1536 eltstring = Fsymbol_name (eltstring);
1537
7510b296 1538 if (STRINGP (eltstring)
d5db4077 1539 && SCHARS (string) <= SCHARS (eltstring)
89a255dc 1540 /* If HIDE_SPACES, reject alternatives that start with space
2cbaf886 1541 unless the input starts with space. */
11e3c684
CY
1542 && (NILP (hide_spaces)
1543 || (SBYTES (string) > 0
1544 && SREF (string, 0) == ' ')
1545 || SREF (eltstring, 0) != ' ')
c8ae863b 1546 && (tem = Fcompare_strings (eltstring, zero,
d5db4077 1547 make_number (SCHARS (string)),
c8ae863b 1548 string, zero,
d5db4077 1549 make_number (SCHARS (string)),
69f4ef20
RS
1550 completion_ignore_case ? Qt : Qnil),
1551 EQ (Qt, tem)))
f927c5ae 1552 {
fd6fa53f 1553 /* Yes. */
42006772 1554 Lisp_Object regexps;
42006772
RS
1555
1556 /* Ignore this element if it fails to match all the regexps. */
6b61353c 1557 {
6b61353c
KH
1558 for (regexps = Vcompletion_regexp_list; CONSP (regexps);
1559 regexps = XCDR (regexps))
1560 {
acd81db9
DK
1561 if (bindcount < 0) {
1562 bindcount = SPECPDL_INDEX ();
1563 specbind (Qcase_fold_search,
1564 completion_ignore_case ? Qt : Qnil);
77443789 1565 }
6b61353c
KH
1566 tem = Fstring_match (XCAR (regexps), eltstring, zero);
1567 if (NILP (tem))
1568 break;
1569 }
6b61353c
KH
1570 if (CONSP (regexps))
1571 continue;
1572 }
42006772 1573
f927c5ae 1574 /* Ignore this element if there is a predicate
fd6fa53f 1575 and the predicate doesn't like it. */
f927c5ae 1576
7efd36fc 1577 if (!NILP (predicate))
f927c5ae 1578 {
7efd36fc 1579 if (EQ (predicate, Qcommandp))
c837f4f9 1580 tem = Fcommandp (elt, Qnil);
f927c5ae
JB
1581 else
1582 {
acd81db9
DK
1583 if (bindcount >= 0) {
1584 unbind_to (bindcount, Qnil);
1585 bindcount = -1;
1586 }
f927c5ae 1587 GCPRO4 (tail, eltstring, allmatches, string);
85cd4372
SM
1588 tem = type == 3
1589 ? call2 (predicate, elt,
62137a95 1590 HASH_VALUE (XHASH_TABLE (collection), idx - 1))
85cd4372 1591 : call1 (predicate, elt);
f927c5ae
JB
1592 UNGCPRO;
1593 }
56a98455 1594 if (NILP (tem)) continue;
f927c5ae 1595 }
fd6fa53f 1596 /* Ok => put it on the list. */
f927c5ae
JB
1597 allmatches = Fcons (eltstring, allmatches);
1598 }
1599 }
1600
acd81db9
DK
1601 if (bindcount >= 0) {
1602 unbind_to (bindcount, Qnil);
1603 bindcount = -1;
1604 }
1605
f927c5ae
JB
1606 return Fnreverse (allmatches);
1607}
1608\f
a7ca3326 1609DEFUN ("completing-read", Fcompleting_read, Scompleting_read, 2, 8, 0,
af52c32d 1610 doc: /* Read a string in the minibuffer, with completion.
a1f17501 1611PROMPT is a string to prompt with; normally it ends in a colon and a space.
a284cdbb
RS
1612COLLECTION can be a list of strings, an alist, an obarray or a hash table.
1613COLLECTION can also be a function to do the completion itself.
1614PREDICATE limits completion to a subset of COLLECTION.
a1f17501 1615See `try-completion' and `all-completions' for more details
a284cdbb 1616 on completion, COLLECTION, and PREDICATE.
a1f17501 1617
4d02fc25
SM
1618REQUIRE-MATCH can take the following values:
1619- t means that the user is not allowed to exit unless
1620 the input is (or completes to) an element of COLLECTION or is null.
1621- nil means that the user can exit with any input.
b47d0e56
CY
1622- `confirm' means that the user can exit with any input, but she needs
1623 to confirm her choice if the input is not an element of COLLECTION.
1624- `confirm-after-completion' means that the user can exit with any
1625 input, but she needs to confirm her choice if she called
1626 `minibuffer-complete' right before `minibuffer-complete-and-exit'
1627 and the input is not an element of COLLECTION.
4d02fc25
SM
1628- anything else behaves like t except that typing RET does not exit if it
1629 does non-null completion.
1630
2e3148e2
JL
1631If the input is null, `completing-read' returns DEF, or the first element
1632of the list of default values, or an empty string if DEF is nil,
1633regardless of the value of REQUIRE-MATCH.
6b61353c
KH
1634
1635If INITIAL-INPUT is non-nil, insert it in the minibuffer initially,
1636 with point positioned at the end.
1637 If it is (STRING . POSITION), the initial input is STRING, but point
1638 is placed at _zero-indexed_ position POSITION in STRING. (*Note*
1639 that this is different from `read-from-minibuffer' and related
1640 functions, which use one-indexing for POSITION.) This feature is
1641 deprecated--it is best to pass nil for INITIAL-INPUT and supply the
1642 default value DEF instead. The user can yank the default value into
ca347e3d 1643 the minibuffer easily using \\<minibuffer-local-map>\\[next-history-element].
6b61353c
KH
1644
1645HIST, if non-nil, specifies a history list and optionally the initial
1646 position in the list. It can be a symbol, which is the history list
1647 variable to use, or it can be a cons cell (HISTVAR . HISTPOS). In
1648 that case, HISTVAR is the history list variable to use, and HISTPOS
1649 is the initial position (the position in the list used by the
1650 minibuffer history commands). For consistency, you should also
1651 specify that element of the history as the value of
1fb101f3 1652 INITIAL-INPUT. (This is the only case in which you should use
6b61353c
KH
1653 INITIAL-INPUT instead of DEF.) Positions are counted starting from
1654 1 at the beginning of the list. The variable `history-length'
1655 controls the maximum length of a history list.
38668f81 1656
2e3148e2 1657DEF, if non-nil, is the default value or the list of default values.
a1f17501
PJ
1658
1659If INHERIT-INPUT-METHOD is non-nil, the minibuffer inherits
029a305c 1660 the current input method and the setting of `enable-multibyte-characters'.
a1f17501
PJ
1661
1662Completion ignores case if the ambient value of
3ec03f7e
LL
1663 `completion-ignore-case' is non-nil.
1664
1665See also `completing-read-function'. */)
1666 (Lisp_Object prompt, Lisp_Object collection, Lisp_Object predicate, Lisp_Object require_match, Lisp_Object initial_input, Lisp_Object hist, Lisp_Object def, Lisp_Object inherit_input_method)
1667{
1668 Lisp_Object args[9];
4e323265 1669 args[0] = Fsymbol_value (intern ("completing-read-function"));
3ec03f7e
LL
1670 args[1] = prompt;
1671 args[2] = collection;
1672 args[3] = predicate;
1673 args[4] = require_match;
1674 args[5] = initial_input;
1675 args[6] = hist;
1676 args[7] = def;
1677 args[8] = inherit_input_method;
1678 return Ffuncall (9, args);
1679}
f927c5ae 1680\f
5d2ca7ae 1681/* Test whether TXT is an exact completion. */
695deb18
SM
1682DEFUN ("test-completion", Ftest_completion, Stest_completion, 2, 3, 0,
1683 doc: /* Return non-nil if STRING is a valid completion.
1684Takes the same arguments as `all-completions' and `try-completion'.
a284cdbb 1685If COLLECTION is a function, it is called with three arguments:
695deb18 1686the values STRING, PREDICATE and `lambda'. */)
5842a27b 1687 (Lisp_Object string, Lisp_Object collection, Lisp_Object predicate)
5d2ca7ae 1688{
6b61353c 1689 Lisp_Object regexps, tail, tem = Qnil;
d3411f89 1690 ptrdiff_t i = 0;
5d2ca7ae 1691
695deb18
SM
1692 CHECK_STRING (string);
1693
a284cdbb
RS
1694 if ((CONSP (collection)
1695 && (!SYMBOLP (XCAR (collection)) || NILP (XCAR (collection))))
1696 || NILP (collection))
695deb18 1697 {
a284cdbb 1698 tem = Fassoc_string (string, collection, completion_ignore_case ? Qt : Qnil);
9f4a578d 1699 if (NILP (tem))
695deb18
SM
1700 return Qnil;
1701 }
a284cdbb 1702 else if (VECTORP (collection))
5d2ca7ae 1703 {
695deb18 1704 /* Bypass intern-soft as that loses for nil. */
a284cdbb 1705 tem = oblookup (collection,
42a5b22f 1706 SSDATA (string),
d5db4077
KR
1707 SCHARS (string),
1708 SBYTES (string));
44472c88 1709 if (!SYMBOLP (tem))
9404446f 1710 {
695deb18
SM
1711 if (STRING_MULTIBYTE (string))
1712 string = Fstring_make_unibyte (string);
9404446f 1713 else
695deb18 1714 string = Fstring_make_multibyte (string);
9404446f 1715
a284cdbb 1716 tem = oblookup (collection,
42a5b22f 1717 SSDATA (string),
d5db4077
KR
1718 SCHARS (string),
1719 SBYTES (string));
9404446f 1720 }
6b61353c
KH
1721
1722 if (completion_ignore_case && !SYMBOLP (tem))
1723 {
77b37c05 1724 for (i = ASIZE (collection) - 1; i >= 0; i--)
6b61353c 1725 {
28be1ada 1726 tail = AREF (collection, i);
6b61353c
KH
1727 if (SYMBOLP (tail))
1728 while (1)
1729 {
fd6fa53f 1730 if (EQ (Fcompare_strings (string, make_number (0), Qnil,
6b61353c 1731 Fsymbol_name (tail),
fd6fa53f 1732 make_number (0) , Qnil, Qt),
6b61353c
KH
1733 Qt))
1734 {
1735 tem = tail;
1736 break;
1737 }
1738 if (XSYMBOL (tail)->next == 0)
1739 break;
1740 XSETSYMBOL (tail, XSYMBOL (tail)->next);
1741 }
1742 }
1743 }
1744
1745 if (!SYMBOLP (tem))
1746 return Qnil;
5d2ca7ae 1747 }
a284cdbb 1748 else if (HASH_TABLE_P (collection))
85cd4372 1749 {
a284cdbb 1750 struct Lisp_Hash_Table *h = XHASH_TABLE (collection);
a8036e40 1751 Lisp_Object key = Qnil;
9cc2810b 1752 i = hash_lookup (h, string, NULL);
85cd4372 1753 if (i >= 0)
6b61353c 1754 tem = HASH_KEY (h, i);
85cd4372 1755 else
6b61353c 1756 for (i = 0; i < HASH_TABLE_SIZE (h); ++i)
fd6fa53f 1757 if (!NILP (HASH_HASH (h, i))
a8036e40
SM
1758 && (key = HASH_KEY (h, i),
1759 SYMBOLP (key) ? key = Fsymbol_name (key) : key,
1760 STRINGP (key))
fd6fa53f 1761 && EQ (Fcompare_strings (string, make_number (0), Qnil,
a8036e40 1762 key, make_number (0) , Qnil,
fd6fa53f
SM
1763 completion_ignore_case ? Qt : Qnil),
1764 Qt))
6b61353c 1765 {
a8036e40 1766 tem = key;
6b61353c
KH
1767 break;
1768 }
1769 if (!STRINGP (tem))
85cd4372
SM
1770 return Qnil;
1771 }
5d2ca7ae 1772 else
a284cdbb 1773 return call3 (collection, string, predicate, Qlambda);
695deb18
SM
1774
1775 /* Reject this element if it fails to match all the regexps. */
77443789
AS
1776 if (CONSP (Vcompletion_regexp_list))
1777 {
d311d28c 1778 ptrdiff_t count = SPECPDL_INDEX ();
77443789
AS
1779 specbind (Qcase_fold_search, completion_ignore_case ? Qt : Qnil);
1780 for (regexps = Vcompletion_regexp_list; CONSP (regexps);
1781 regexps = XCDR (regexps))
1782 {
1783 if (NILP (Fstring_match (XCAR (regexps),
1784 SYMBOLP (tem) ? string : tem,
1785 Qnil)))
1786 return unbind_to (count, Qnil);
1787 }
1788 unbind_to (count, Qnil);
1789 }
695deb18
SM
1790
1791 /* Finally, check the predicate. */
1792 if (!NILP (predicate))
6b61353c 1793 {
a284cdbb
RS
1794 return HASH_TABLE_P (collection)
1795 ? call2 (predicate, tem, HASH_VALUE (XHASH_TABLE (collection), i))
6b61353c
KH
1796 : call1 (predicate, tem);
1797 }
695deb18
SM
1798 else
1799 return Qt;
5d2ca7ae 1800}
f927c5ae 1801
4b66faf3 1802static Lisp_Object Qmetadata;
620c53a6 1803
655ea21c
JD
1804DEFUN ("internal-complete-buffer", Finternal_complete_buffer, Sinternal_complete_buffer, 3, 3, 0,
1805 doc: /* Perform completion on buffer names.
c88b867f
CY
1806STRING and PREDICATE have the same meanings as in `try-completion',
1807`all-completions', and `test-completion'.
655ea21c 1808
c88b867f
CY
1809If FLAG is nil, invoke `try-completion'; if it is t, invoke
1810`all-completions'; otherwise invoke `test-completion'. */)
5842a27b 1811 (Lisp_Object string, Lisp_Object predicate, Lisp_Object flag)
655ea21c
JD
1812{
1813 if (NILP (flag))
1814 return Ftry_completion (string, Vbuffer_alist, predicate);
1815 else if (EQ (flag, Qt))
8c2dccbf 1816 {
73913e2e 1817 Lisp_Object res = Fall_completions (string, Vbuffer_alist, predicate, Qnil);
8c2dccbf
SM
1818 if (SCHARS (string) > 0)
1819 return res;
1820 else
1821 { /* Strip out internal buffers. */
1822 Lisp_Object bufs = res;
1823 /* First, look for a non-internal buffer in `res'. */
1824 while (CONSP (bufs) && SREF (XCAR (bufs), 0) == ' ')
1825 bufs = XCDR (bufs);
127827c0
SM
1826 if (NILP (bufs))
1827 return (EQ (Flength (res), Flength (Vbuffer_alist))
1828 /* If all bufs are internal don't strip them out. */
1829 ? res : bufs);
8c2dccbf
SM
1830 res = bufs;
1831 while (CONSP (XCDR (bufs)))
1832 if (SREF (XCAR (XCDR (bufs)), 0) == ' ')
1833 XSETCDR (bufs, XCDR (XCDR (bufs)));
1834 else
1835 bufs = XCDR (bufs);
1836 return res;
1837 }
1838 }
620c53a6 1839 else if (EQ (flag, Qlambda))
655ea21c 1840 return Ftest_completion (string, Vbuffer_alist, predicate);
620c53a6 1841 else if (EQ (flag, Qmetadata))
6c6f1994 1842 return list2 (Qmetadata, Fcons (Qcategory, Qbuffer));
620c53a6
SM
1843 else
1844 return Qnil;
655ea21c
JD
1845}
1846
52b14ac0
JB
1847/* Like assoc but assumes KEY is a string, and ignores case if appropriate. */
1848
a7ca3326 1849DEFUN ("assoc-string", Fassoc_string, Sassoc_string, 2, 3, 0,
d3fc66fb 1850 doc: /* Like `assoc' but specifically for strings (and symbols).
c6a82c18
CY
1851
1852This returns the first element of LIST whose car matches the string or
1853symbol KEY, or nil if no match exists. When performing the
1854comparison, symbols are first converted to strings, and unibyte
1855strings to multibyte. If the optional arg CASE-FOLD is non-nil, case
1856is ignored.
1857
1858Unlike `assoc', KEY can also match an entry in LIST consisting of a
1859single string, rather than a cons cell whose car is a string. */)
5842a27b 1860 (register Lisp_Object key, Lisp_Object list, Lisp_Object case_fold)
52b14ac0
JB
1861{
1862 register Lisp_Object tail;
1863
d3fc66fb
KS
1864 if (SYMBOLP (key))
1865 key = Fsymbol_name (key);
1866
99784d63 1867 for (tail = list; CONSP (tail); tail = XCDR (tail))
52b14ac0
JB
1868 {
1869 register Lisp_Object elt, tem, thiscar;
99784d63 1870 elt = XCAR (tail);
695deb18 1871 thiscar = CONSP (elt) ? XCAR (elt) : elt;
1954495f
KS
1872 if (SYMBOLP (thiscar))
1873 thiscar = Fsymbol_name (thiscar);
1874 else if (!STRINGP (thiscar))
52b14ac0 1875 continue;
9404446f
RS
1876 tem = Fcompare_strings (thiscar, make_number (0), Qnil,
1877 key, make_number (0), Qnil,
695deb18 1878 case_fold);
9404446f
RS
1879 if (EQ (tem, Qt))
1880 return elt;
52b14ac0
JB
1881 QUIT;
1882 }
1883 return Qnil;
1884}
f927c5ae 1885
e4c97a67 1886\f
f927c5ae 1887DEFUN ("minibuffer-depth", Fminibuffer_depth, Sminibuffer_depth, 0, 0, 0,
af52c32d 1888 doc: /* Return current depth of activations of minibuffer, a nonnegative integer. */)
5842a27b 1889 (void)
f927c5ae
JB
1890{
1891 return make_number (minibuf_level);
1892}
1893
37e9a934 1894DEFUN ("minibuffer-prompt", Fminibuffer_prompt, Sminibuffer_prompt, 0, 0, 0,
af52c32d
MB
1895 doc: /* Return the prompt string of the currently-active minibuffer.
1896If no minibuffer is active, return nil. */)
5842a27b 1897 (void)
37e9a934 1898{
4d04c1f1 1899 return Fcopy_sequence (minibuf_prompt);
37e9a934
KH
1900}
1901
f927c5ae 1902\f
9d815fd9 1903void
971de7fb 1904init_minibuf_once (void)
f927c5ae
JB
1905{
1906 Vminibuffer_list = Qnil;
1907 staticpro (&Vminibuffer_list);
1908}
1909
9d815fd9 1910void
971de7fb 1911syms_of_minibuf (void)
f927c5ae
JB
1912{
1913 minibuf_level = 0;
4d04c1f1
KH
1914 minibuf_prompt = Qnil;
1915 staticpro (&minibuf_prompt);
1916
1917 minibuf_save_list = Qnil;
1918 staticpro (&minibuf_save_list);
f927c5ae 1919
620c53a6
SM
1920 DEFSYM (Qcompletion_ignore_case, "completion-ignore-case");
1921 DEFSYM (Qread_file_name_internal, "read-file-name-internal");
1922 DEFSYM (Qminibuffer_default, "minibuffer-default");
e5d4686b
RS
1923 Fset (Qminibuffer_default, Qnil);
1924
620c53a6
SM
1925 DEFSYM (Qminibuffer_completion_table, "minibuffer-completion-table");
1926 DEFSYM (Qminibuffer_completion_confirm, "minibuffer-completion-confirm");
1927 DEFSYM (Qminibuffer_completion_predicate, "minibuffer-completion-predicate");
f927c5ae
JB
1928
1929 staticpro (&last_minibuf_string);
1930 last_minibuf_string = Qnil;
1931
620c53a6
SM
1932 DEFSYM (Qminibuffer_history, "minibuffer-history");
1933 DEFSYM (Qbuffer_name_history, "buffer-name-history");
33d0a17f 1934 Fset (Qbuffer_name_history, Qnil);
406e55df 1935
b4d3bc10 1936 DEFSYM (Qcustom_variable_p, "custom-variable-p");
620c53a6
SM
1937 DEFSYM (Qminibuffer_setup_hook, "minibuffer-setup-hook");
1938 DEFSYM (Qminibuffer_exit_hook, "minibuffer-exit-hook");
1939 DEFSYM (Qhistory_length, "history-length");
1940 DEFSYM (Qcurrent_input_method, "current-input-method");
1941 DEFSYM (Qactivate_input_method, "activate-input-method");
1942 DEFSYM (Qcase_fold_search, "case-fold-search");
1943 DEFSYM (Qmetadata, "metadata");
6b61353c 1944
c11136ec
GM
1945 DEFVAR_LISP ("read-expression-history", Vread_expression_history,
1946 doc: /* A history list for arguments that are Lisp expressions to evaluate.
1947For example, `eval-expression' uses this. */);
1948 Vread_expression_history = Qnil;
1949
620c53a6 1950 DEFSYM (Qread_expression_history, "read-expression-history");
627fb581 1951
29208e82 1952 DEFVAR_LISP ("read-buffer-function", Vread_buffer_function,
b4f588fa
JB
1953 doc: /* If this is non-nil, `read-buffer' does its work by calling this function.
1954The function is called with the arguments passed to `read-buffer'. */);
eebbfb01
KH
1955 Vread_buffer_function = Qnil;
1956
33df281c 1957 DEFVAR_BOOL ("read-buffer-completion-ignore-case",
29208e82 1958 read_buffer_completion_ignore_case,
cc0adcb0 1959 doc: /* Non-nil means completion ignores case when reading a buffer name. */);
33df281c
CY
1960 read_buffer_completion_ignore_case = 0;
1961
29208e82 1962 DEFVAR_LISP ("minibuffer-setup-hook", Vminibuffer_setup_hook,
af52c32d 1963 doc: /* Normal hook run just after entry to minibuffer. */);
5c781212
RS
1964 Vminibuffer_setup_hook = Qnil;
1965
29208e82 1966 DEFVAR_LISP ("minibuffer-exit-hook", Vminibuffer_exit_hook,
af52c32d 1967 doc: /* Normal hook run just after exit from minibuffer. */);
177aecf9
KH
1968 Vminibuffer_exit_hook = Qnil;
1969
29208e82 1970 DEFVAR_LISP ("history-length", Vhistory_length,
cc0adcb0
CY
1971 doc: /* Maximum length of history lists before truncation takes place.
1972A number means truncate to that length; truncation deletes old
1973elements, and is done just after inserting a new element.
1974A value of t means no truncation.
1975
1976This variable only affects history lists that don't specify their own
1977maximum lengths. Setting the `history-length' property of a history
1978variable overrides this default. */);
77aa8edf
RS
1979 XSETFASTINT (Vhistory_length, 30);
1980
29208e82 1981 DEFVAR_BOOL ("history-delete-duplicates", history_delete_duplicates,
cc0adcb0 1982 doc: /* Non-nil means to delete duplicates in history.
0da4d471 1983If set to t when adding a new history element, all previous identical
179a4ca7 1984elements are deleted from the history list. */);
0da4d471
JL
1985 history_delete_duplicates = 0;
1986
29208e82 1987 DEFVAR_LISP ("history-add-new-input", Vhistory_add_new_input,
cc0adcb0 1988 doc: /* Non-nil means to add new elements in history.
179a4ca7
JL
1989If set to nil, minibuffer reading functions don't add new elements to the
1990history list, so it is possible to do this afterwards by calling
1991`add-to-history' explicitly. */);
1992 Vhistory_add_new_input = Qt;
1993
29208e82 1994 DEFVAR_BOOL ("completion-ignore-case", completion_ignore_case,
75028673 1995 doc: /* Non-nil means don't consider case significant in completion.
f562df03
CY
1996For file-name completion, `read-file-name-completion-ignore-case'
1997controls the behavior, rather than this variable.
1998For buffer name completion, `read-buffer-completion-ignore-case'
d9a03ad2 1999controls the behavior, rather than this variable. */);
f927c5ae
JB
2000 completion_ignore_case = 0;
2001
29208e82 2002 DEFVAR_BOOL ("enable-recursive-minibuffers", enable_recursive_minibuffers,
cc0adcb0 2003 doc: /* Non-nil means to allow minibuffer commands while in the minibuffer.
a1f17501 2004This variable makes a difference whenever the minibuffer window is active. */);
f927c5ae
JB
2005 enable_recursive_minibuffers = 0;
2006
29208e82 2007 DEFVAR_LISP ("minibuffer-completion-table", Vminibuffer_completion_table,
af52c32d 2008 doc: /* Alist or obarray used for completion in the minibuffer.
6b61353c
KH
2009This becomes the ALIST argument to `try-completion' and `all-completions'.
2010The value can also be a list of strings or a hash table.
a1f17501
PJ
2011
2012The value may alternatively be a function, which is given three arguments:
2013 STRING, the current buffer contents;
2014 PREDICATE, the predicate for filtering possible matches;
2015 CODE, which says what kind of things to do.
b2ef9714
JB
2016CODE can be nil, t or `lambda':
2017 nil -- return the best completion of STRING, or nil if there is none.
2018 t -- return a list of all possible completions of STRING.
2019 lambda -- return t if STRING is a valid completion as it stands. */);
f927c5ae
JB
2020 Vminibuffer_completion_table = Qnil;
2021
29208e82 2022 DEFVAR_LISP ("minibuffer-completion-predicate", Vminibuffer_completion_predicate,
af52c32d 2023 doc: /* Within call to `completing-read', this holds the PREDICATE argument. */);
f927c5ae
JB
2024 Vminibuffer_completion_predicate = Qnil;
2025
29208e82 2026 DEFVAR_LISP ("minibuffer-completion-confirm", Vminibuffer_completion_confirm,
b47d0e56
CY
2027 doc: /* Whether to demand confirmation of completion before exiting minibuffer.
2028If nil, confirmation is not required.
2029If the value is `confirm', the user may exit with an input that is not
2030 a valid completion alternative, but Emacs asks for confirmation.
2031If the value is `confirm-after-completion', the user may exit with an
2032 input that is not a valid completion alternative, but Emacs asks for
1b79e224
CY
2033 confirmation if the user submitted the input right after any of the
2034 completion commands listed in `minibuffer-confirm-exit-commands'. */);
f927c5ae
JB
2035 Vminibuffer_completion_confirm = Qnil;
2036
ccf330a6 2037 DEFVAR_LISP ("minibuffer-completing-file-name",
29208e82 2038 Vminibuffer_completing_file_name,
6ddfc113 2039 doc: /* Non-nil means completing file names. */);
ccf330a6
RS
2040 Vminibuffer_completing_file_name = Qnil;
2041
29208e82 2042 DEFVAR_LISP ("minibuffer-help-form", Vminibuffer_help_form,
af52c32d 2043 doc: /* Value that `help-form' takes on inside the minibuffer. */);
f927c5ae
JB
2044 Vminibuffer_help_form = Qnil;
2045
29208e82 2046 DEFVAR_LISP ("minibuffer-history-variable", Vminibuffer_history_variable,
af52c32d 2047 doc: /* History list symbol to add minibuffer values to.
a1f17501
PJ
2048Each string of minibuffer input, as it appears on exit from the minibuffer,
2049is added with
2050 (set minibuffer-history-variable
2051 (cons STRING (symbol-value minibuffer-history-variable))) */);
5a866662 2052 XSETFASTINT (Vminibuffer_history_variable, 0);
770970cb 2053
29208e82 2054 DEFVAR_LISP ("minibuffer-history-position", Vminibuffer_history_position,
af52c32d 2055 doc: /* Current position of redoing in the history list. */);
770970cb
RS
2056 Vminibuffer_history_position = Qnil;
2057
29208e82 2058 DEFVAR_BOOL ("minibuffer-auto-raise", minibuffer_auto_raise,
cc0adcb0 2059 doc: /* Non-nil means entering the minibuffer raises the minibuffer's frame.
a1f17501 2060Some uses of the echo area also raise that frame (since they use it too). */);
6a9ee000
RS
2061 minibuffer_auto_raise = 0;
2062
29208e82 2063 DEFVAR_LISP ("completion-regexp-list", Vcompletion_regexp_list,
6b61353c
KH
2064 doc: /* List of regexps that should restrict possible completions.
2065The basic completion functions only consider a completion acceptable
2066if it matches all regular expressions in this list, with
2067`case-fold-search' bound to the value of `completion-ignore-case'.
2068See Info node `(elisp)Basic Completion', for a description of these
2069functions. */);
42006772
RS
2070 Vcompletion_regexp_list = Qnil;
2071
c3421833 2072 DEFVAR_BOOL ("minibuffer-allow-text-properties",
29208e82 2073 minibuffer_allow_text_properties,
af52c32d 2074 doc: /* Non-nil means `read-from-minibuffer' should not discard text properties.
a1f17501
PJ
2075This also affects `read-string', but it does not affect `read-minibuffer',
2076`read-no-blanks-input', or any of the functions that do minibuffer input
2077with completion; they always discard text properties. */);
c3421833
RS
2078 minibuffer_allow_text_properties = 0;
2079
29208e82 2080 DEFVAR_LISP ("minibuffer-prompt-properties", Vminibuffer_prompt_properties,
af52c32d 2081 doc: /* Text properties that are added to minibuffer prompts.
a1f17501
PJ
2082These are in addition to the basic `field' property, and stickiness
2083properties. */);
cc64f5c9
MB
2084 /* We use `intern' here instead of Qread_only to avoid
2085 initialization-order problems. */
6c6f1994 2086 Vminibuffer_prompt_properties = list2 (intern_c_string ("read-only"), Qt);
cc64f5c9 2087
727e958e 2088 defsubr (&Sactive_minibuffer_window);
68313ed8 2089 defsubr (&Sset_minibuffer_window);
f927c5ae 2090 defsubr (&Sread_from_minibuffer);
f927c5ae
JB
2091 defsubr (&Sread_string);
2092 defsubr (&Sread_command);
2093 defsubr (&Sread_variable);
ff137f16 2094 defsubr (&Sinternal_complete_buffer);
f927c5ae
JB
2095 defsubr (&Sread_buffer);
2096 defsubr (&Sread_no_blanks_input);
2097 defsubr (&Sminibuffer_depth);
37e9a934 2098 defsubr (&Sminibuffer_prompt);
f927c5ae 2099
873ef78e 2100 defsubr (&Sminibufferp);
a346ec72
MB
2101 defsubr (&Sminibuffer_prompt_end);
2102 defsubr (&Sminibuffer_contents);
2103 defsubr (&Sminibuffer_contents_no_properties);
b5e1e449 2104 defsubr (&Sminibuffer_completion_contents);
a346ec72 2105
f927c5ae
JB
2106 defsubr (&Stry_completion);
2107 defsubr (&Sall_completions);
695deb18
SM
2108 defsubr (&Stest_completion);
2109 defsubr (&Sassoc_string);
f927c5ae 2110 defsubr (&Scompleting_read);
f927c5ae 2111}