* isearch.el (isearch-filter-predicate): Documentation typo fix
[bpt/emacs.git] / src / minibuf.c
CommitLineData
f927c5ae 1/* Minibuffer input and completion.
c11136ec 2
ba318903 3Copyright (C) 1985-1986, 1993-2014 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
fd6fa53f
SM
868 /* In case the previous minibuffer displayed in this miniwindow is
869 dead, we may keep displaying this buffer (tho it's inactive), so reset it,
870 to make sure we don't leave around bindings and stuff which only
871 made sense during the read_minibuf invocation. */
872 call0 (intern ("minibuffer-inactive-mode"));
f927c5ae
JB
873}
874\f
b9d721de 875
a7ca3326 876DEFUN ("read-from-minibuffer", Fread_from_minibuffer,
16a97296 877 Sread_from_minibuffer, 1, 7, 0,
af52c32d 878 doc: /* Read a string from the minibuffer, prompting with string PROMPT.
6b61353c
KH
879The optional second arg INITIAL-CONTENTS is an obsolete alternative to
880 DEFAULT-VALUE. It normally should be nil in new code, except when
881 HIST is a cons. It is discussed in more detail below.
f6fc4d87 882
a1f17501
PJ
883Third arg KEYMAP is a keymap to use whilst reading;
884 if omitted or nil, the default is `minibuffer-local-map'.
f6fc4d87
CY
885
886If fourth arg READ is non-nil, interpret the result as a Lisp object
a1f17501
PJ
887 and return that object:
888 in other words, do `(car (read-from-string INPUT-STRING))'
f6fc4d87 889
6b61353c
KH
890Fifth arg HIST, if non-nil, specifies a history list and optionally
891 the initial position in the list. It can be a symbol, which is the
f6fc4d87
CY
892 history list variable to use, or a cons cell (HISTVAR . HISTPOS).
893 In that case, HISTVAR is the history list variable to use, and
894 HISTPOS is the initial position for use by the minibuffer history
895 commands. For consistency, you should also specify that element of
896 the history as the value of INITIAL-CONTENTS. Positions are counted
897 starting from 1 at the beginning of the list.
898
899Sixth arg DEFAULT-VALUE, if non-nil, should be a string, which is used
900 as the default to `read' if READ is non-nil and the user enters
901 empty input. But if READ is nil, this function does _not_ return
902 DEFAULT-VALUE for empty input! Instead, it returns the empty string.
903
904 Whatever the value of READ, DEFAULT-VALUE is made available via the
905 minibuffer history commands. DEFAULT-VALUE can also be a list of
906 strings, in which case all the strings are available in the history,
907 and the first string is the default to `read' if READ is non-nil.
908
a1f17501 909Seventh arg INHERIT-INPUT-METHOD, if non-nil, means the minibuffer inherits
029a305c 910 the current input method and the setting of `enable-multibyte-characters'.
f6fc4d87 911
a1f17501
PJ
912If the variable `minibuffer-allow-text-properties' is non-nil,
913 then the string which is returned includes whatever text properties
6b61353c
KH
914 were present in the minibuffer. Otherwise the value has no text properties.
915
916The remainder of this documentation string describes the
917INITIAL-CONTENTS argument in more detail. It is only relevant when
918studying existing code, or when HIST is a cons. If non-nil,
919INITIAL-CONTENTS is a string to be inserted into the minibuffer before
920reading input. Normally, point is put at the end of that string.
921However, if INITIAL-CONTENTS is \(STRING . POSITION), the initial
922input is STRING, but point is placed at _one-indexed_ position
923POSITION in the minibuffer. Any integer value less than or equal to
924one puts point at the beginning of the string. *Note* that this
925behavior differs from the way such arguments are used in `completing-read'
926and some related functions, which use zero-indexing for POSITION. */)
5842a27b 927 (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 928{
6b61353c 929 Lisp_Object histvar, histpos, val;
1d8d92f4
RS
930 struct gcpro gcpro1;
931
b7826503 932 CHECK_STRING (prompt);
56a98455 933 if (NILP (keymap))
f927c5ae
JB
934 keymap = Vminibuffer_local_map;
935 else
02067692 936 keymap = get_keymap (keymap, 1, 0);
770970cb 937
7510b296 938 if (SYMBOLP (hist))
770970cb
RS
939 {
940 histvar = hist;
941 histpos = Qnil;
942 }
943 else
944 {
945 histvar = Fcar_safe (hist);
946 histpos = Fcdr_safe (hist);
947 }
948 if (NILP (histvar))
949 histvar = Qminibuffer_history;
950 if (NILP (histpos))
5a866662 951 XSETFASTINT (histpos, 0);
770970cb 952
1d8d92f4 953 GCPRO1 (default_value);
e5d4686b 954 val = read_minibuf (keymap, initial_contents, prompt,
d311d28c 955 !NILP (read),
c3421833 956 histvar, histpos, default_value,
cee54539 957 minibuffer_allow_text_properties,
b35cd215 958 !NILP (inherit_input_method));
1d8d92f4 959 UNGCPRO;
e5d4686b 960 return val;
f927c5ae
JB
961}
962
fd6fa53f 963/* Functions that use the minibuffer to read various things. */
f927c5ae 964
a7ca3326 965DEFUN ("read-string", Fread_string, Sread_string, 1, 5, 0,
af52c32d 966 doc: /* Read a string from the minibuffer, prompting with string PROMPT.
a1f17501 967If non-nil, second arg INITIAL-INPUT is a string to insert before reading.
6b61353c
KH
968 This argument has been superseded by DEFAULT-VALUE and should normally
969 be nil in new code. It behaves as in `read-from-minibuffer'. See the
970 documentation string of that function for details.
a1f17501
PJ
971The third arg HISTORY, if non-nil, specifies a history list
972 and optionally the initial position in the list.
973See `read-from-minibuffer' for details of HISTORY argument.
2e3148e2
JL
974Fourth arg DEFAULT-VALUE is the default value or the list of default values.
975 If non-nil, it is used for history commands, and as the value (or the first
976 element of the list of default values) to return if the user enters the
977 empty string.
a1f17501 978Fifth arg INHERIT-INPUT-METHOD, if non-nil, means the minibuffer inherits
029a305c 979 the current input method and the setting of `enable-multibyte-characters'. */)
5842a27b 980 (Lisp_Object prompt, Lisp_Object initial_input, Lisp_Object history, Lisp_Object default_value, Lisp_Object inherit_input_method)
f927c5ae 981{
b9a86585 982 Lisp_Object val;
ec6de1e2
SM
983 ptrdiff_t count = SPECPDL_INDEX ();
984
985 /* Just in case we're in a recursive minibuffer, make it clear that the
986 previous minibuffer's completion table does not apply to the new
987 minibuffer.
988 FIXME: `minibuffer-completion-table' should be buffer-local instead. */
989 specbind (Qminibuffer_completion_table, Qnil);
990
b9a86585
RS
991 val = Fread_from_minibuffer (prompt, initial_input, Qnil,
992 Qnil, history, default_value,
b35cd215 993 inherit_input_method);
d5db4077 994 if (STRINGP (val) && SCHARS (val) == 0 && ! NILP (default_value))
fb30dfd2 995 val = CONSP (default_value) ? XCAR (default_value) : default_value;
ec6de1e2 996 return unbind_to (count, val);
f927c5ae
JB
997}
998
cee54539 999DEFUN ("read-no-blanks-input", Fread_no_blanks_input, Sread_no_blanks_input, 1, 3, 0,
af52c32d 1000 doc: /* Read a string from the terminal, not allowing blanks.
6b61353c
KH
1001Prompt with PROMPT. Whitespace terminates the input. If INITIAL is
1002non-nil, it should be a string, which is used as initial input, with
1003point positioned at the end, so that SPACE will accept the input.
1004\(Actually, INITIAL can also be a cons of a string and an integer.
1005Such values are treated as in `read-from-minibuffer', but are normally
1006not useful in this function.)
a1f17501 1007Third arg INHERIT-INPUT-METHOD, if non-nil, means the minibuffer inherits
6b61353c 1008the current input method and the setting of`enable-multibyte-characters'. */)
5842a27b 1009 (Lisp_Object prompt, Lisp_Object initial, Lisp_Object inherit_input_method)
f927c5ae 1010{
b7826503 1011 CHECK_STRING (prompt);
d311d28c 1012 return read_minibuf (Vminibuffer_local_ns_map, initial, prompt,
cee54539 1013 0, Qminibuffer_history, make_number (0), Qnil, 0,
b35cd215 1014 !NILP (inherit_input_method));
f927c5ae
JB
1015}
1016
e5d4686b 1017DEFUN ("read-command", Fread_command, Sread_command, 1, 2, 0,
af52c32d 1018 doc: /* Read the name of a command and return as a symbol.
2e3148e2
JL
1019Prompt with PROMPT. By default, return DEFAULT-VALUE or its first element
1020if it is a list. */)
5842a27b 1021 (Lisp_Object prompt, Lisp_Object default_value)
f927c5ae 1022{
7c8d9931
RS
1023 Lisp_Object name, default_string;
1024
1025 if (NILP (default_value))
1026 default_string = Qnil;
1027 else if (SYMBOLP (default_value))
caa4733e 1028 default_string = SYMBOL_NAME (default_value);
7c8d9931
RS
1029 else
1030 default_string = default_value;
9ab4a725 1031
7c8d9931
RS
1032 name = Fcompleting_read (prompt, Vobarray, Qcommandp, Qt,
1033 Qnil, Qnil, default_string, Qnil);
1034 if (NILP (name))
1035 return name;
1036 return Fintern (name, Qnil);
f927c5ae
JB
1037}
1038
1039#ifdef NOTDEF
1040DEFUN ("read-function", Fread_function, Sread_function, 1, 1, 0,
af52c32d 1041 doc: /* One arg PROMPT, a string. Read the name of a function and return as a symbol.
fd771ceb 1042Prompt with PROMPT. */)
5842a27b 1043 (Lisp_Object prompt)
f927c5ae 1044{
cee54539 1045 return Fintern (Fcompleting_read (prompt, Vobarray, Qfboundp, Qt, Qnil, Qnil, Qnil, Qnil),
f927c5ae
JB
1046 Qnil);
1047}
1048#endif /* NOTDEF */
1049
a7ca3326 1050DEFUN ("read-variable", Fread_variable, Sread_variable, 1, 2, 0,
b4d3bc10 1051 doc: /* Read the name of a user option and return it as a symbol.
2e3148e2
JL
1052Prompt with PROMPT. By default, return DEFAULT-VALUE or its first element
1053if it is a list.
b4d3bc10
CY
1054A user option, or customizable variable, is one for which
1055`custom-variable-p' returns non-nil. */)
5842a27b 1056 (Lisp_Object prompt, Lisp_Object default_value)
f927c5ae 1057{
7c8d9931
RS
1058 Lisp_Object name, default_string;
1059
1060 if (NILP (default_value))
1061 default_string = Qnil;
1062 else if (SYMBOLP (default_value))
caa4733e 1063 default_string = SYMBOL_NAME (default_value);
7c8d9931
RS
1064 else
1065 default_string = default_value;
9ab4a725 1066
7c8d9931 1067 name = Fcompleting_read (prompt, Vobarray,
b4d3bc10 1068 Qcustom_variable_p, Qt,
7c8d9931
RS
1069 Qnil, Qnil, default_string, Qnil);
1070 if (NILP (name))
1071 return name;
1072 return Fintern (name, Qnil);
f927c5ae
JB
1073}
1074
a7ca3326 1075DEFUN ("read-buffer", Fread_buffer, Sread_buffer, 1, 3, 0,
fd771ceb
PJ
1076 doc: /* Read the name of a buffer and return as a string.
1077Prompt with PROMPT.
a1f17501 1078Optional second arg DEF is value to return if user enters an empty line.
2e3148e2 1079 If DEF is a list of default values, return its first element.
5fedada7
CY
1080Optional third arg REQUIRE-MATCH determines whether non-existing
1081 buffer names are allowed. It has the same meaning as the
a2a0d36b 1082 REQUIRE-MATCH argument of `completing-read'.
33df281c
CY
1083The argument PROMPT should be a string ending with a colon and a space.
1084If `read-buffer-completion-ignore-case' is non-nil, completion ignores
1085case while reading the buffer name.
1086If `read-buffer-function' is non-nil, this works by calling it as a
1087function, instead of the usual behavior. */)
5842a27b 1088 (Lisp_Object prompt, Lisp_Object def, Lisp_Object require_match)
f927c5ae 1089{
33df281c 1090 Lisp_Object args[4], result;
637de37e 1091 char *s;
ad39faca 1092 ptrdiff_t len;
d311d28c 1093 ptrdiff_t count = SPECPDL_INDEX ();
9ab4a725 1094
7510b296 1095 if (BUFFERP (def))
4b4deea2 1096 def = BVAR (XBUFFER (def), name);
eebbfb01 1097
33df281c
CY
1098 specbind (Qcompletion_ignore_case,
1099 read_buffer_completion_ignore_case ? Qt : Qnil);
1100
eebbfb01
KH
1101 if (NILP (Vread_buffer_function))
1102 {
1103 if (!NILP (def))
1104 {
97c3e4cc
RF
1105 /* A default value was provided: we must change PROMPT,
1106 editing the default value in before the colon. To achieve
1107 this, we replace PROMPT with a substring that doesn't
1108 contain the terminal space and colon (if present). They
1109 are then added back using Fformat. */
1110
1111 if (STRINGP (prompt))
1112 {
637de37e 1113 s = SSDATA (prompt);
ad39faca 1114 len = SBYTES (prompt);
97c3e4cc
RF
1115 if (len >= 2 && s[len - 2] == ':' && s[len - 1] == ' ')
1116 len = len - 2;
1117 else if (len >= 1 && (s[len - 1] == ':' || s[len - 1] == ' '))
1118 len--;
1119
1120 prompt = make_specified_string (s, -1, len,
1121 STRING_MULTIBYTE (prompt));
1122 }
1123
1124 args[0] = build_string ("%s (default %s): ");
eebbfb01 1125 args[1] = prompt;
fb30dfd2 1126 args[2] = CONSP (def) ? XCAR (def) : def;
eebbfb01
KH
1127 prompt = Fformat (3, args);
1128 }
1129
33df281c 1130 result = Fcompleting_read (prompt, intern ("internal-complete-buffer"),
620c53a6
SM
1131 Qnil, require_match, Qnil,
1132 Qbuffer_name_history, def, Qnil);
eebbfb01
KH
1133 }
1134 else
f927c5ae 1135 {
eebbfb01 1136 args[0] = Vread_buffer_function;
f927c5ae
JB
1137 args[1] = prompt;
1138 args[2] = def;
eebbfb01 1139 args[3] = require_match;
fd6fa53f 1140 result = Ffuncall (4, args);
f927c5ae 1141 }
33df281c 1142 return unbind_to (count, result);
f927c5ae
JB
1143}
1144\f
ec067ec7 1145static Lisp_Object
971de7fb 1146minibuf_conform_representation (Lisp_Object string, Lisp_Object basis)
ec067ec7
RS
1147{
1148 if (STRING_MULTIBYTE (string) == STRING_MULTIBYTE (basis))
1149 return string;
1150
1151 if (STRING_MULTIBYTE (string))
1152 return Fstring_make_unibyte (string);
1153 else
1154 return Fstring_make_multibyte (string);
1155}
1156
f927c5ae 1157DEFUN ("try-completion", Ftry_completion, Stry_completion, 2, 3, 0,
a284cdbb
RS
1158 doc: /* Return common substring of all completions of STRING in COLLECTION.
1159Test each possible completion specified by COLLECTION
1160to see if it begins with STRING. The possible completions may be
3809648a
KS
1161strings or symbols. Symbols are converted to strings before testing,
1162see `symbol-name'.
a284cdbb
RS
1163All that match STRING are compared together; the longest initial sequence
1164common to all these matches is the return value.
1165If there is no match at all, the return value is nil.
1166For a unique match which is exact, the return value is t.
1167
1168If COLLECTION is an alist, the keys (cars of elements) are the
1169possible completions. If an element is not a cons cell, then the
1170element itself is the possible completion.
1171If COLLECTION is a hash-table, all the keys that are strings or symbols
1172are the possible completions.
1173If COLLECTION is an obarray, the names of all symbols in the obarray
1174are the possible completions.
1175
1176COLLECTION can also be a function to do the completion itself.
a1f17501
PJ
1177It receives three arguments: the values STRING, PREDICATE and nil.
1178Whatever it returns becomes the value of `try-completion'.
1179
1180If optional third argument PREDICATE is non-nil,
1181it is used to test each possible match.
1182The match is a candidate only if PREDICATE returns non-nil.
1183The argument given to PREDICATE is the alist element
a284cdbb 1184or the symbol from the obarray. If COLLECTION is a hash-table,
85cd4372 1185predicate is called with two arguments: the key and the value.
a1f17501 1186Additionally to this predicate, `completion-regexp-list'
af52c32d 1187is used to further constrain the set of candidates. */)
5842a27b 1188 (Lisp_Object string, Lisp_Object collection, Lisp_Object predicate)
f927c5ae
JB
1189{
1190 Lisp_Object bestmatch, tail, elt, eltstring;
af2b7cd5 1191 /* Size in bytes of BESTMATCH. */
d311d28c 1192 ptrdiff_t bestmatchsize = 0;
af2b7cd5 1193 /* These are in bytes, too. */
d311d28c 1194 ptrdiff_t compare, matchsize;
f6d4c7a4
RS
1195 enum { function_table, list_table, obarray_table, hash_table}
1196 type = (HASH_TABLE_P (collection) ? hash_table
1197 : VECTORP (collection) ? obarray_table
1198 : ((NILP (collection)
a1f03e89 1199 || (CONSP (collection) && !FUNCTIONP (collection)))
f6d4c7a4 1200 ? list_table : function_table));
d311d28c 1201 ptrdiff_t idx = 0, obsize = 0;
f927c5ae 1202 int matchcount = 0;
d311d28c 1203 ptrdiff_t bindcount = -1;
f927c5ae
JB
1204 Lisp_Object bucket, zero, end, tem;
1205 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
1206
b7826503 1207 CHECK_STRING (string);
f6d4c7a4 1208 if (type == function_table)
a284cdbb 1209 return call3 (collection, string, predicate, Qnil);
f927c5ae 1210
6bbd7a29 1211 bestmatch = bucket = Qnil;
c8ae863b 1212 zero = make_number (0);
f927c5ae 1213
a284cdbb
RS
1214 /* If COLLECTION is not a list, set TAIL just for gc pro. */
1215 tail = collection;
f6d4c7a4 1216 if (type == obarray_table)
f927c5ae 1217 {
a284cdbb 1218 collection = check_obarray (collection);
77b37c05 1219 obsize = ASIZE (collection);
28be1ada 1220 bucket = AREF (collection, idx);
f927c5ae
JB
1221 }
1222
1223 while (1)
1224 {
fd6fa53f
SM
1225 /* Get the next element of the alist, obarray, or hash-table. */
1226 /* Exit the loop if the elements are all used up. */
f927c5ae 1227 /* elt gets the alist element or symbol.
fd6fa53f 1228 eltstring gets the name to check as a completion. */
f927c5ae 1229
f6d4c7a4 1230 if (type == list_table)
f927c5ae 1231 {
695deb18 1232 if (!CONSP (tail))
f927c5ae 1233 break;
695deb18
SM
1234 elt = XCAR (tail);
1235 eltstring = CONSP (elt) ? XCAR (elt) : elt;
1236 tail = XCDR (tail);
f927c5ae 1237 }
f6d4c7a4 1238 else if (type == obarray_table)
f927c5ae 1239 {
c8ae863b 1240 if (!EQ (bucket, zero))
f927c5ae 1241 {
9b6b374a
JB
1242 if (!SYMBOLP (bucket))
1243 error ("Bad data in guts of obarray");
f927c5ae 1244 elt = bucket;
3809648a 1245 eltstring = elt;
f927c5ae
JB
1246 if (XSYMBOL (bucket)->next)
1247 XSETSYMBOL (bucket, XSYMBOL (bucket)->next);
1248 else
5a866662 1249 XSETFASTINT (bucket, 0);
f927c5ae 1250 }
62137a95 1251 else if (++idx >= obsize)
f927c5ae
JB
1252 break;
1253 else
1254 {
28be1ada 1255 bucket = AREF (collection, idx);
f927c5ae
JB
1256 continue;
1257 }
1258 }
f6d4c7a4 1259 else /* if (type == hash_table) */
85cd4372 1260 {
62137a95
PE
1261 while (idx < HASH_TABLE_SIZE (XHASH_TABLE (collection))
1262 && NILP (HASH_HASH (XHASH_TABLE (collection), idx)))
1263 idx++;
1264 if (idx >= HASH_TABLE_SIZE (XHASH_TABLE (collection)))
85cd4372
SM
1265 break;
1266 else
62137a95 1267 elt = eltstring = HASH_KEY (XHASH_TABLE (collection), idx++);
85cd4372 1268 }
f927c5ae 1269
fd6fa53f 1270 /* Is this element a possible completion? */
f927c5ae 1271
3809648a
KS
1272 if (SYMBOLP (eltstring))
1273 eltstring = Fsymbol_name (eltstring);
1274
7510b296 1275 if (STRINGP (eltstring)
d5db4077 1276 && SCHARS (string) <= SCHARS (eltstring)
c8ae863b 1277 && (tem = Fcompare_strings (eltstring, zero,
d5db4077 1278 make_number (SCHARS (string)),
c8ae863b 1279 string, zero, Qnil,
6b61353c 1280 completion_ignore_case ? Qt : Qnil),
69f4ef20 1281 EQ (Qt, tem)))
f927c5ae 1282 {
fd6fa53f 1283 /* Yes. */
42006772 1284 Lisp_Object regexps;
42006772
RS
1285
1286 /* Ignore this element if it fails to match all the regexps. */
6b61353c 1287 {
6b61353c
KH
1288 for (regexps = Vcompletion_regexp_list; CONSP (regexps);
1289 regexps = XCDR (regexps))
1290 {
acd81db9
DK
1291 if (bindcount < 0) {
1292 bindcount = SPECPDL_INDEX ();
1293 specbind (Qcase_fold_search,
1294 completion_ignore_case ? Qt : Qnil);
77443789 1295 }
6b61353c
KH
1296 tem = Fstring_match (XCAR (regexps), eltstring, zero);
1297 if (NILP (tem))
1298 break;
1299 }
6b61353c
KH
1300 if (CONSP (regexps))
1301 continue;
1302 }
42006772 1303
f927c5ae 1304 /* Ignore this element if there is a predicate
fd6fa53f 1305 and the predicate doesn't like it. */
f927c5ae 1306
7efd36fc 1307 if (!NILP (predicate))
f927c5ae 1308 {
7efd36fc 1309 if (EQ (predicate, Qcommandp))
c837f4f9 1310 tem = Fcommandp (elt, Qnil);
f927c5ae
JB
1311 else
1312 {
f6d4c7a4
RS
1313 if (bindcount >= 0)
1314 {
1315 unbind_to (bindcount, Qnil);
1316 bindcount = -1;
1317 }
f927c5ae 1318 GCPRO4 (tail, string, eltstring, bestmatch);
f6d4c7a4
RS
1319 tem = (type == hash_table
1320 ? call2 (predicate, elt,
1321 HASH_VALUE (XHASH_TABLE (collection),
62137a95 1322 idx - 1))
f6d4c7a4 1323 : call1 (predicate, elt));
f927c5ae
JB
1324 UNGCPRO;
1325 }
56a98455 1326 if (NILP (tem)) continue;
f927c5ae
JB
1327 }
1328
1329 /* Update computation of how much all possible completions match */
1330
56a98455 1331 if (NILP (bestmatch))
af2b7cd5 1332 {
85cd4372 1333 matchcount = 1;
af2b7cd5 1334 bestmatch = eltstring;
d5db4077 1335 bestmatchsize = SCHARS (eltstring);
af2b7cd5 1336 }
f927c5ae
JB
1337 else
1338 {
d5db4077 1339 compare = min (bestmatchsize, SCHARS (eltstring));
c8ae863b 1340 tem = Fcompare_strings (bestmatch, zero,
69f4ef20 1341 make_number (compare),
c8ae863b 1342 eltstring, zero,
69f4ef20
RS
1343 make_number (compare),
1344 completion_ignore_case ? Qt : Qnil);
71376d4b 1345 matchsize = EQ (tem, Qt) ? compare : eabs (XINT (tem)) - 1;
69f4ef20 1346
52b14ac0
JB
1347 if (completion_ignore_case)
1348 {
1349 /* If this is an exact match except for case,
1350 use it as the best match rather than one that is not an
1351 exact match. This way, we get the case pattern
1352 of the actual match. */
d5db4077
KR
1353 if ((matchsize == SCHARS (eltstring)
1354 && matchsize < SCHARS (bestmatch))
52b14ac0
JB
1355 ||
1356 /* If there is more than one exact match ignoring case,
1357 and one of them is exact including case,
1358 prefer that one. */
1359 /* If there is no exact match ignoring case,
1360 prefer a match that does not change the case
1361 of the input. */
d5db4077 1362 ((matchsize == SCHARS (eltstring))
52b14ac0 1363 ==
d5db4077 1364 (matchsize == SCHARS (bestmatch))
c8ae863b 1365 && (tem = Fcompare_strings (eltstring, zero,
d5db4077 1366 make_number (SCHARS (string)),
c8ae863b 1367 string, zero,
69f4ef20
RS
1368 Qnil,
1369 Qnil),
1370 EQ (Qt, tem))
c8ae863b 1371 && (tem = Fcompare_strings (bestmatch, zero,
d5db4077 1372 make_number (SCHARS (string)),
c8ae863b 1373 string, zero,
69f4ef20
RS
1374 Qnil,
1375 Qnil),
1376 ! EQ (Qt, tem))))
52b14ac0
JB
1377 bestmatch = eltstring;
1378 }
d5db4077 1379 if (bestmatchsize != SCHARS (eltstring)
85cd4372
SM
1380 || bestmatchsize != matchsize)
1381 /* Don't count the same string multiple times. */
7cded46f 1382 matchcount += matchcount <= 1;
52b14ac0 1383 bestmatchsize = matchsize;
d5db4077 1384 if (matchsize <= SCHARS (string)
78893e05
CY
1385 /* If completion-ignore-case is non-nil, don't
1386 short-circuit because we want to find the best
1387 possible match *including* case differences. */
1388 && !completion_ignore_case
695deb18
SM
1389 && matchcount > 1)
1390 /* No need to look any further. */
1391 break;
f927c5ae
JB
1392 }
1393 }
1394 }
1395
acd81db9
DK
1396 if (bindcount >= 0) {
1397 unbind_to (bindcount, Qnil);
1398 bindcount = -1;
1399 }
1400
56a98455 1401 if (NILP (bestmatch))
fd6fa53f 1402 return Qnil; /* No completions found. */
52b14ac0
JB
1403 /* If we are ignoring case, and there is no exact match,
1404 and no additional text was supplied,
1405 don't change the case of what the user typed. */
d5db4077
KR
1406 if (completion_ignore_case && bestmatchsize == SCHARS (string)
1407 && SCHARS (bestmatch) > bestmatchsize)
ec067ec7 1408 return minibuf_conform_representation (string, bestmatch);
52b14ac0
JB
1409
1410 /* Return t if the supplied string is an exact match (counting case);
1411 it does not require any change to be made. */
928b5acc 1412 if (matchcount == 1 && !NILP (Fequal (bestmatch, string)))
f927c5ae
JB
1413 return Qt;
1414
5a866662 1415 XSETFASTINT (zero, 0); /* Else extract the part in which */
fd6fa53f 1416 XSETFASTINT (end, bestmatchsize); /* all completions agree. */
f927c5ae
JB
1417 return Fsubstring (bestmatch, zero, end);
1418}
f927c5ae 1419\f
89a255dc 1420DEFUN ("all-completions", Fall_completions, Sall_completions, 2, 4, 0,
a284cdbb
RS
1421 doc: /* Search for partial matches to STRING in COLLECTION.
1422Test each of the possible completions specified by COLLECTION
1423to see if it begins with STRING. The possible completions may be
3809648a
KS
1424strings or symbols. Symbols are converted to strings before testing,
1425see `symbol-name'.
a284cdbb 1426The value is a list of all the possible completions that match STRING.
a1f17501 1427
a284cdbb
RS
1428If COLLECTION is an alist, the keys (cars of elements) are the
1429possible completions. If an element is not a cons cell, then the
1430element itself is the possible completion.
1431If COLLECTION is a hash-table, all the keys that are strings or symbols
1432are the possible completions.
1433If COLLECTION is an obarray, the names of all symbols in the obarray
1434are the possible completions.
a1f17501 1435
a284cdbb 1436COLLECTION can also be a function to do the completion itself.
a1f17501
PJ
1437It receives three arguments: the values STRING, PREDICATE and t.
1438Whatever it returns becomes the value of `all-completions'.
1439
1440If optional third argument PREDICATE is non-nil,
1441it is used to test each possible match.
1442The match is a candidate only if PREDICATE returns non-nil.
1443The argument given to PREDICATE is the alist element
a284cdbb 1444or the symbol from the obarray. If COLLECTION is a hash-table,
85cd4372 1445predicate is called with two arguments: the key and the value.
a1f17501
PJ
1446Additionally to this predicate, `completion-regexp-list'
1447is used to further constrain the set of candidates.
1448
782a943e 1449An obsolete optional fourth argument HIDE-SPACES is still accepted for
057bce6f 1450backward compatibility. If non-nil, strings in COLLECTION that start
4fcc3d32 1451with a space are ignored unless STRING itself starts with a space. */)
5842a27b 1452 (Lisp_Object string, Lisp_Object collection, Lisp_Object predicate, Lisp_Object hide_spaces)
f927c5ae
JB
1453{
1454 Lisp_Object tail, elt, eltstring;
1455 Lisp_Object allmatches;
a284cdbb
RS
1456 int type = HASH_TABLE_P (collection) ? 3
1457 : VECTORP (collection) ? 2
a1f03e89 1458 : NILP (collection) || (CONSP (collection) && !FUNCTIONP (collection));
d311d28c
PE
1459 ptrdiff_t idx = 0, obsize = 0;
1460 ptrdiff_t bindcount = -1;
c8ae863b 1461 Lisp_Object bucket, tem, zero;
f927c5ae
JB
1462 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
1463
b7826503 1464 CHECK_STRING (string);
85cd4372 1465 if (type == 0)
a284cdbb 1466 return call3 (collection, string, predicate, Qt);
6bbd7a29 1467 allmatches = bucket = Qnil;
c8ae863b 1468 zero = make_number (0);
f927c5ae 1469
a284cdbb
RS
1470 /* If COLLECTION is not a list, set TAIL just for gc pro. */
1471 tail = collection;
85cd4372 1472 if (type == 2)
f927c5ae 1473 {
373bf2b7 1474 collection = check_obarray (collection);
77b37c05 1475 obsize = ASIZE (collection);
28be1ada 1476 bucket = AREF (collection, idx);
f927c5ae
JB
1477 }
1478
1479 while (1)
1480 {
fd6fa53f
SM
1481 /* Get the next element of the alist, obarray, or hash-table. */
1482 /* Exit the loop if the elements are all used up. */
f927c5ae 1483 /* elt gets the alist element or symbol.
fd6fa53f 1484 eltstring gets the name to check as a completion. */
f927c5ae 1485
85cd4372 1486 if (type == 1)
f927c5ae 1487 {
695deb18 1488 if (!CONSP (tail))
f927c5ae 1489 break;
695deb18
SM
1490 elt = XCAR (tail);
1491 eltstring = CONSP (elt) ? XCAR (elt) : elt;
1492 tail = XCDR (tail);
f927c5ae 1493 }
85cd4372 1494 else if (type == 2)
f927c5ae 1495 {
373bf2b7 1496 if (!EQ (bucket, zero))
f927c5ae 1497 {
373bf2b7
AS
1498 if (!SYMBOLP (bucket))
1499 error ("Bad data in guts of obarray");
f927c5ae 1500 elt = bucket;
3809648a 1501 eltstring = elt;
f927c5ae
JB
1502 if (XSYMBOL (bucket)->next)
1503 XSETSYMBOL (bucket, XSYMBOL (bucket)->next);
1504 else
5a866662 1505 XSETFASTINT (bucket, 0);
f927c5ae 1506 }
62137a95 1507 else if (++idx >= obsize)
f927c5ae
JB
1508 break;
1509 else
1510 {
28be1ada 1511 bucket = AREF (collection, idx);
f927c5ae
JB
1512 continue;
1513 }
1514 }
85cd4372
SM
1515 else /* if (type == 3) */
1516 {
62137a95
PE
1517 while (idx < HASH_TABLE_SIZE (XHASH_TABLE (collection))
1518 && NILP (HASH_HASH (XHASH_TABLE (collection), idx)))
1519 idx++;
1520 if (idx >= HASH_TABLE_SIZE (XHASH_TABLE (collection)))
85cd4372
SM
1521 break;
1522 else
62137a95 1523 elt = eltstring = HASH_KEY (XHASH_TABLE (collection), idx++);
85cd4372 1524 }
f927c5ae 1525
fd6fa53f 1526 /* Is this element a possible completion? */
f927c5ae 1527
3809648a
KS
1528 if (SYMBOLP (eltstring))
1529 eltstring = Fsymbol_name (eltstring);
1530
7510b296 1531 if (STRINGP (eltstring)
d5db4077 1532 && SCHARS (string) <= SCHARS (eltstring)
89a255dc 1533 /* If HIDE_SPACES, reject alternatives that start with space
2cbaf886 1534 unless the input starts with space. */
11e3c684
CY
1535 && (NILP (hide_spaces)
1536 || (SBYTES (string) > 0
1537 && SREF (string, 0) == ' ')
1538 || SREF (eltstring, 0) != ' ')
c8ae863b 1539 && (tem = Fcompare_strings (eltstring, zero,
d5db4077 1540 make_number (SCHARS (string)),
c8ae863b 1541 string, zero,
d5db4077 1542 make_number (SCHARS (string)),
69f4ef20
RS
1543 completion_ignore_case ? Qt : Qnil),
1544 EQ (Qt, tem)))
f927c5ae 1545 {
fd6fa53f 1546 /* Yes. */
42006772 1547 Lisp_Object regexps;
42006772
RS
1548
1549 /* Ignore this element if it fails to match all the regexps. */
6b61353c 1550 {
6b61353c
KH
1551 for (regexps = Vcompletion_regexp_list; CONSP (regexps);
1552 regexps = XCDR (regexps))
1553 {
acd81db9
DK
1554 if (bindcount < 0) {
1555 bindcount = SPECPDL_INDEX ();
1556 specbind (Qcase_fold_search,
1557 completion_ignore_case ? Qt : Qnil);
77443789 1558 }
6b61353c
KH
1559 tem = Fstring_match (XCAR (regexps), eltstring, zero);
1560 if (NILP (tem))
1561 break;
1562 }
6b61353c
KH
1563 if (CONSP (regexps))
1564 continue;
1565 }
42006772 1566
f927c5ae 1567 /* Ignore this element if there is a predicate
fd6fa53f 1568 and the predicate doesn't like it. */
f927c5ae 1569
7efd36fc 1570 if (!NILP (predicate))
f927c5ae 1571 {
7efd36fc 1572 if (EQ (predicate, Qcommandp))
c837f4f9 1573 tem = Fcommandp (elt, Qnil);
f927c5ae
JB
1574 else
1575 {
acd81db9
DK
1576 if (bindcount >= 0) {
1577 unbind_to (bindcount, Qnil);
1578 bindcount = -1;
1579 }
f927c5ae 1580 GCPRO4 (tail, eltstring, allmatches, string);
85cd4372
SM
1581 tem = type == 3
1582 ? call2 (predicate, elt,
62137a95 1583 HASH_VALUE (XHASH_TABLE (collection), idx - 1))
85cd4372 1584 : call1 (predicate, elt);
f927c5ae
JB
1585 UNGCPRO;
1586 }
56a98455 1587 if (NILP (tem)) continue;
f927c5ae 1588 }
fd6fa53f 1589 /* Ok => put it on the list. */
f927c5ae
JB
1590 allmatches = Fcons (eltstring, allmatches);
1591 }
1592 }
1593
acd81db9
DK
1594 if (bindcount >= 0) {
1595 unbind_to (bindcount, Qnil);
1596 bindcount = -1;
1597 }
1598
f927c5ae
JB
1599 return Fnreverse (allmatches);
1600}
1601\f
a7ca3326 1602DEFUN ("completing-read", Fcompleting_read, Scompleting_read, 2, 8, 0,
af52c32d 1603 doc: /* Read a string in the minibuffer, with completion.
a1f17501 1604PROMPT is a string to prompt with; normally it ends in a colon and a space.
a284cdbb
RS
1605COLLECTION can be a list of strings, an alist, an obarray or a hash table.
1606COLLECTION can also be a function to do the completion itself.
1607PREDICATE limits completion to a subset of COLLECTION.
a1f17501 1608See `try-completion' and `all-completions' for more details
a284cdbb 1609 on completion, COLLECTION, and PREDICATE.
a1f17501 1610
4d02fc25
SM
1611REQUIRE-MATCH can take the following values:
1612- t means that the user is not allowed to exit unless
1613 the input is (or completes to) an element of COLLECTION or is null.
1614- nil means that the user can exit with any input.
b47d0e56
CY
1615- `confirm' means that the user can exit with any input, but she needs
1616 to confirm her choice if the input is not an element of COLLECTION.
1617- `confirm-after-completion' means that the user can exit with any
1618 input, but she needs to confirm her choice if she called
1619 `minibuffer-complete' right before `minibuffer-complete-and-exit'
1620 and the input is not an element of COLLECTION.
4d02fc25
SM
1621- anything else behaves like t except that typing RET does not exit if it
1622 does non-null completion.
1623
2e3148e2
JL
1624If the input is null, `completing-read' returns DEF, or the first element
1625of the list of default values, or an empty string if DEF is nil,
1626regardless of the value of REQUIRE-MATCH.
6b61353c
KH
1627
1628If INITIAL-INPUT is non-nil, insert it in the minibuffer initially,
1629 with point positioned at the end.
1630 If it is (STRING . POSITION), the initial input is STRING, but point
1631 is placed at _zero-indexed_ position POSITION in STRING. (*Note*
1632 that this is different from `read-from-minibuffer' and related
1633 functions, which use one-indexing for POSITION.) This feature is
1634 deprecated--it is best to pass nil for INITIAL-INPUT and supply the
1635 default value DEF instead. The user can yank the default value into
ca347e3d 1636 the minibuffer easily using \\<minibuffer-local-map>\\[next-history-element].
6b61353c
KH
1637
1638HIST, if non-nil, specifies a history list and optionally the initial
1639 position in the list. It can be a symbol, which is the history list
1640 variable to use, or it can be a cons cell (HISTVAR . HISTPOS). In
1641 that case, HISTVAR is the history list variable to use, and HISTPOS
1642 is the initial position (the position in the list used by the
1643 minibuffer history commands). For consistency, you should also
1644 specify that element of the history as the value of
1fb101f3 1645 INITIAL-INPUT. (This is the only case in which you should use
6b61353c
KH
1646 INITIAL-INPUT instead of DEF.) Positions are counted starting from
1647 1 at the beginning of the list. The variable `history-length'
1648 controls the maximum length of a history list.
38668f81 1649
2e3148e2 1650DEF, if non-nil, is the default value or the list of default values.
a1f17501
PJ
1651
1652If INHERIT-INPUT-METHOD is non-nil, the minibuffer inherits
029a305c 1653 the current input method and the setting of `enable-multibyte-characters'.
a1f17501
PJ
1654
1655Completion ignores case if the ambient value of
3ec03f7e
LL
1656 `completion-ignore-case' is non-nil.
1657
1658See also `completing-read-function'. */)
1659 (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)
1660{
1661 Lisp_Object args[9];
4e323265 1662 args[0] = Fsymbol_value (intern ("completing-read-function"));
3ec03f7e
LL
1663 args[1] = prompt;
1664 args[2] = collection;
1665 args[3] = predicate;
1666 args[4] = require_match;
1667 args[5] = initial_input;
1668 args[6] = hist;
1669 args[7] = def;
1670 args[8] = inherit_input_method;
1671 return Ffuncall (9, args);
1672}
f927c5ae 1673\f
5d2ca7ae 1674/* Test whether TXT is an exact completion. */
695deb18
SM
1675DEFUN ("test-completion", Ftest_completion, Stest_completion, 2, 3, 0,
1676 doc: /* Return non-nil if STRING is a valid completion.
1677Takes the same arguments as `all-completions' and `try-completion'.
a284cdbb 1678If COLLECTION is a function, it is called with three arguments:
695deb18 1679the values STRING, PREDICATE and `lambda'. */)
5842a27b 1680 (Lisp_Object string, Lisp_Object collection, Lisp_Object predicate)
5d2ca7ae 1681{
6b61353c 1682 Lisp_Object regexps, tail, tem = Qnil;
d3411f89 1683 ptrdiff_t i = 0;
5d2ca7ae 1684
695deb18
SM
1685 CHECK_STRING (string);
1686
a1f03e89 1687 if (NILP (collection) || (CONSP (collection) && !FUNCTIONP (collection)))
695deb18 1688 {
a284cdbb 1689 tem = Fassoc_string (string, collection, completion_ignore_case ? Qt : Qnil);
9f4a578d 1690 if (NILP (tem))
695deb18
SM
1691 return Qnil;
1692 }
a284cdbb 1693 else if (VECTORP (collection))
5d2ca7ae 1694 {
695deb18 1695 /* Bypass intern-soft as that loses for nil. */
a284cdbb 1696 tem = oblookup (collection,
42a5b22f 1697 SSDATA (string),
d5db4077
KR
1698 SCHARS (string),
1699 SBYTES (string));
44472c88 1700 if (!SYMBOLP (tem))
9404446f 1701 {
695deb18
SM
1702 if (STRING_MULTIBYTE (string))
1703 string = Fstring_make_unibyte (string);
9404446f 1704 else
695deb18 1705 string = Fstring_make_multibyte (string);
9404446f 1706
a284cdbb 1707 tem = oblookup (collection,
42a5b22f 1708 SSDATA (string),
d5db4077
KR
1709 SCHARS (string),
1710 SBYTES (string));
9404446f 1711 }
6b61353c
KH
1712
1713 if (completion_ignore_case && !SYMBOLP (tem))
1714 {
77b37c05 1715 for (i = ASIZE (collection) - 1; i >= 0; i--)
6b61353c 1716 {
28be1ada 1717 tail = AREF (collection, i);
6b61353c
KH
1718 if (SYMBOLP (tail))
1719 while (1)
1720 {
fd6fa53f 1721 if (EQ (Fcompare_strings (string, make_number (0), Qnil,
6b61353c 1722 Fsymbol_name (tail),
fd6fa53f 1723 make_number (0) , Qnil, Qt),
6b61353c
KH
1724 Qt))
1725 {
1726 tem = tail;
1727 break;
1728 }
1729 if (XSYMBOL (tail)->next == 0)
1730 break;
1731 XSETSYMBOL (tail, XSYMBOL (tail)->next);
1732 }
1733 }
1734 }
1735
1736 if (!SYMBOLP (tem))
1737 return Qnil;
5d2ca7ae 1738 }
a284cdbb 1739 else if (HASH_TABLE_P (collection))
85cd4372 1740 {
a284cdbb 1741 struct Lisp_Hash_Table *h = XHASH_TABLE (collection);
a8036e40 1742 Lisp_Object key = Qnil;
9cc2810b 1743 i = hash_lookup (h, string, NULL);
85cd4372 1744 if (i >= 0)
6b61353c 1745 tem = HASH_KEY (h, i);
85cd4372 1746 else
6b61353c 1747 for (i = 0; i < HASH_TABLE_SIZE (h); ++i)
fd6fa53f 1748 if (!NILP (HASH_HASH (h, i))
a8036e40
SM
1749 && (key = HASH_KEY (h, i),
1750 SYMBOLP (key) ? key = Fsymbol_name (key) : key,
1751 STRINGP (key))
fd6fa53f 1752 && EQ (Fcompare_strings (string, make_number (0), Qnil,
a8036e40 1753 key, make_number (0) , Qnil,
fd6fa53f
SM
1754 completion_ignore_case ? Qt : Qnil),
1755 Qt))
6b61353c 1756 {
a8036e40 1757 tem = key;
6b61353c
KH
1758 break;
1759 }
1760 if (!STRINGP (tem))
85cd4372
SM
1761 return Qnil;
1762 }
5d2ca7ae 1763 else
a284cdbb 1764 return call3 (collection, string, predicate, Qlambda);
695deb18
SM
1765
1766 /* Reject this element if it fails to match all the regexps. */
77443789
AS
1767 if (CONSP (Vcompletion_regexp_list))
1768 {
d311d28c 1769 ptrdiff_t count = SPECPDL_INDEX ();
77443789
AS
1770 specbind (Qcase_fold_search, completion_ignore_case ? Qt : Qnil);
1771 for (regexps = Vcompletion_regexp_list; CONSP (regexps);
1772 regexps = XCDR (regexps))
1773 {
1774 if (NILP (Fstring_match (XCAR (regexps),
1775 SYMBOLP (tem) ? string : tem,
1776 Qnil)))
1777 return unbind_to (count, Qnil);
1778 }
1779 unbind_to (count, Qnil);
1780 }
695deb18
SM
1781
1782 /* Finally, check the predicate. */
1783 if (!NILP (predicate))
6b61353c 1784 {
a284cdbb
RS
1785 return HASH_TABLE_P (collection)
1786 ? call2 (predicate, tem, HASH_VALUE (XHASH_TABLE (collection), i))
6b61353c
KH
1787 : call1 (predicate, tem);
1788 }
695deb18
SM
1789 else
1790 return Qt;
5d2ca7ae 1791}
f927c5ae 1792
4b66faf3 1793static Lisp_Object Qmetadata;
620c53a6 1794
655ea21c
JD
1795DEFUN ("internal-complete-buffer", Finternal_complete_buffer, Sinternal_complete_buffer, 3, 3, 0,
1796 doc: /* Perform completion on buffer names.
c88b867f
CY
1797STRING and PREDICATE have the same meanings as in `try-completion',
1798`all-completions', and `test-completion'.
655ea21c 1799
c88b867f
CY
1800If FLAG is nil, invoke `try-completion'; if it is t, invoke
1801`all-completions'; otherwise invoke `test-completion'. */)
5842a27b 1802 (Lisp_Object string, Lisp_Object predicate, Lisp_Object flag)
655ea21c
JD
1803{
1804 if (NILP (flag))
1805 return Ftry_completion (string, Vbuffer_alist, predicate);
1806 else if (EQ (flag, Qt))
8c2dccbf 1807 {
73913e2e 1808 Lisp_Object res = Fall_completions (string, Vbuffer_alist, predicate, Qnil);
8c2dccbf
SM
1809 if (SCHARS (string) > 0)
1810 return res;
1811 else
1812 { /* Strip out internal buffers. */
1813 Lisp_Object bufs = res;
1814 /* First, look for a non-internal buffer in `res'. */
1815 while (CONSP (bufs) && SREF (XCAR (bufs), 0) == ' ')
1816 bufs = XCDR (bufs);
127827c0
SM
1817 if (NILP (bufs))
1818 return (EQ (Flength (res), Flength (Vbuffer_alist))
1819 /* If all bufs are internal don't strip them out. */
1820 ? res : bufs);
8c2dccbf
SM
1821 res = bufs;
1822 while (CONSP (XCDR (bufs)))
1823 if (SREF (XCAR (XCDR (bufs)), 0) == ' ')
1824 XSETCDR (bufs, XCDR (XCDR (bufs)));
1825 else
1826 bufs = XCDR (bufs);
1827 return res;
1828 }
1829 }
620c53a6 1830 else if (EQ (flag, Qlambda))
655ea21c 1831 return Ftest_completion (string, Vbuffer_alist, predicate);
620c53a6 1832 else if (EQ (flag, Qmetadata))
6c6f1994 1833 return list2 (Qmetadata, Fcons (Qcategory, Qbuffer));
620c53a6
SM
1834 else
1835 return Qnil;
655ea21c
JD
1836}
1837
52b14ac0
JB
1838/* Like assoc but assumes KEY is a string, and ignores case if appropriate. */
1839
a7ca3326 1840DEFUN ("assoc-string", Fassoc_string, Sassoc_string, 2, 3, 0,
d3fc66fb 1841 doc: /* Like `assoc' but specifically for strings (and symbols).
c6a82c18
CY
1842
1843This returns the first element of LIST whose car matches the string or
1844symbol KEY, or nil if no match exists. When performing the
1845comparison, symbols are first converted to strings, and unibyte
1846strings to multibyte. If the optional arg CASE-FOLD is non-nil, case
1847is ignored.
1848
1849Unlike `assoc', KEY can also match an entry in LIST consisting of a
1850single string, rather than a cons cell whose car is a string. */)
5842a27b 1851 (register Lisp_Object key, Lisp_Object list, Lisp_Object case_fold)
52b14ac0
JB
1852{
1853 register Lisp_Object tail;
1854
d3fc66fb
KS
1855 if (SYMBOLP (key))
1856 key = Fsymbol_name (key);
1857
99784d63 1858 for (tail = list; CONSP (tail); tail = XCDR (tail))
52b14ac0
JB
1859 {
1860 register Lisp_Object elt, tem, thiscar;
99784d63 1861 elt = XCAR (tail);
695deb18 1862 thiscar = CONSP (elt) ? XCAR (elt) : elt;
1954495f
KS
1863 if (SYMBOLP (thiscar))
1864 thiscar = Fsymbol_name (thiscar);
1865 else if (!STRINGP (thiscar))
52b14ac0 1866 continue;
9404446f
RS
1867 tem = Fcompare_strings (thiscar, make_number (0), Qnil,
1868 key, make_number (0), Qnil,
695deb18 1869 case_fold);
9404446f
RS
1870 if (EQ (tem, Qt))
1871 return elt;
52b14ac0
JB
1872 QUIT;
1873 }
1874 return Qnil;
1875}
f927c5ae 1876
e4c97a67 1877\f
f927c5ae 1878DEFUN ("minibuffer-depth", Fminibuffer_depth, Sminibuffer_depth, 0, 0, 0,
af52c32d 1879 doc: /* Return current depth of activations of minibuffer, a nonnegative integer. */)
5842a27b 1880 (void)
f927c5ae
JB
1881{
1882 return make_number (minibuf_level);
1883}
1884
37e9a934 1885DEFUN ("minibuffer-prompt", Fminibuffer_prompt, Sminibuffer_prompt, 0, 0, 0,
af52c32d
MB
1886 doc: /* Return the prompt string of the currently-active minibuffer.
1887If no minibuffer is active, return nil. */)
5842a27b 1888 (void)
37e9a934 1889{
4d04c1f1 1890 return Fcopy_sequence (minibuf_prompt);
37e9a934
KH
1891}
1892
f927c5ae 1893\f
9d815fd9 1894void
971de7fb 1895init_minibuf_once (void)
f927c5ae
JB
1896{
1897 Vminibuffer_list = Qnil;
1898 staticpro (&Vminibuffer_list);
1899}
1900
9d815fd9 1901void
971de7fb 1902syms_of_minibuf (void)
f927c5ae
JB
1903{
1904 minibuf_level = 0;
4d04c1f1
KH
1905 minibuf_prompt = Qnil;
1906 staticpro (&minibuf_prompt);
1907
1908 minibuf_save_list = Qnil;
1909 staticpro (&minibuf_save_list);
f927c5ae 1910
620c53a6
SM
1911 DEFSYM (Qcompletion_ignore_case, "completion-ignore-case");
1912 DEFSYM (Qread_file_name_internal, "read-file-name-internal");
1913 DEFSYM (Qminibuffer_default, "minibuffer-default");
e5d4686b
RS
1914 Fset (Qminibuffer_default, Qnil);
1915
620c53a6
SM
1916 DEFSYM (Qminibuffer_completion_table, "minibuffer-completion-table");
1917 DEFSYM (Qminibuffer_completion_confirm, "minibuffer-completion-confirm");
1918 DEFSYM (Qminibuffer_completion_predicate, "minibuffer-completion-predicate");
f927c5ae
JB
1919
1920 staticpro (&last_minibuf_string);
1921 last_minibuf_string = Qnil;
1922
620c53a6
SM
1923 DEFSYM (Qminibuffer_history, "minibuffer-history");
1924 DEFSYM (Qbuffer_name_history, "buffer-name-history");
33d0a17f 1925 Fset (Qbuffer_name_history, Qnil);
406e55df 1926
b4d3bc10 1927 DEFSYM (Qcustom_variable_p, "custom-variable-p");
620c53a6
SM
1928 DEFSYM (Qminibuffer_setup_hook, "minibuffer-setup-hook");
1929 DEFSYM (Qminibuffer_exit_hook, "minibuffer-exit-hook");
1930 DEFSYM (Qhistory_length, "history-length");
1931 DEFSYM (Qcurrent_input_method, "current-input-method");
1932 DEFSYM (Qactivate_input_method, "activate-input-method");
1933 DEFSYM (Qcase_fold_search, "case-fold-search");
1934 DEFSYM (Qmetadata, "metadata");
6b61353c 1935
c11136ec
GM
1936 DEFVAR_LISP ("read-expression-history", Vread_expression_history,
1937 doc: /* A history list for arguments that are Lisp expressions to evaluate.
1938For example, `eval-expression' uses this. */);
1939 Vread_expression_history = Qnil;
1940
620c53a6 1941 DEFSYM (Qread_expression_history, "read-expression-history");
627fb581 1942
29208e82 1943 DEFVAR_LISP ("read-buffer-function", Vread_buffer_function,
b4f588fa
JB
1944 doc: /* If this is non-nil, `read-buffer' does its work by calling this function.
1945The function is called with the arguments passed to `read-buffer'. */);
eebbfb01
KH
1946 Vread_buffer_function = Qnil;
1947
33df281c 1948 DEFVAR_BOOL ("read-buffer-completion-ignore-case",
29208e82 1949 read_buffer_completion_ignore_case,
cc0adcb0 1950 doc: /* Non-nil means completion ignores case when reading a buffer name. */);
33df281c
CY
1951 read_buffer_completion_ignore_case = 0;
1952
29208e82 1953 DEFVAR_LISP ("minibuffer-setup-hook", Vminibuffer_setup_hook,
af52c32d 1954 doc: /* Normal hook run just after entry to minibuffer. */);
5c781212
RS
1955 Vminibuffer_setup_hook = Qnil;
1956
29208e82 1957 DEFVAR_LISP ("minibuffer-exit-hook", Vminibuffer_exit_hook,
af52c32d 1958 doc: /* Normal hook run just after exit from minibuffer. */);
177aecf9
KH
1959 Vminibuffer_exit_hook = Qnil;
1960
29208e82 1961 DEFVAR_LISP ("history-length", Vhistory_length,
cc0adcb0
CY
1962 doc: /* Maximum length of history lists before truncation takes place.
1963A number means truncate to that length; truncation deletes old
1964elements, and is done just after inserting a new element.
1965A value of t means no truncation.
1966
1967This variable only affects history lists that don't specify their own
1968maximum lengths. Setting the `history-length' property of a history
1969variable overrides this default. */);
77aa8edf
RS
1970 XSETFASTINT (Vhistory_length, 30);
1971
29208e82 1972 DEFVAR_BOOL ("history-delete-duplicates", history_delete_duplicates,
cc0adcb0 1973 doc: /* Non-nil means to delete duplicates in history.
0da4d471 1974If set to t when adding a new history element, all previous identical
179a4ca7 1975elements are deleted from the history list. */);
0da4d471
JL
1976 history_delete_duplicates = 0;
1977
29208e82 1978 DEFVAR_LISP ("history-add-new-input", Vhistory_add_new_input,
cc0adcb0 1979 doc: /* Non-nil means to add new elements in history.
179a4ca7
JL
1980If set to nil, minibuffer reading functions don't add new elements to the
1981history list, so it is possible to do this afterwards by calling
1982`add-to-history' explicitly. */);
1983 Vhistory_add_new_input = Qt;
1984
29208e82 1985 DEFVAR_BOOL ("completion-ignore-case", completion_ignore_case,
75028673 1986 doc: /* Non-nil means don't consider case significant in completion.
f562df03
CY
1987For file-name completion, `read-file-name-completion-ignore-case'
1988controls the behavior, rather than this variable.
1989For buffer name completion, `read-buffer-completion-ignore-case'
d9a03ad2 1990controls the behavior, rather than this variable. */);
f927c5ae
JB
1991 completion_ignore_case = 0;
1992
29208e82 1993 DEFVAR_BOOL ("enable-recursive-minibuffers", enable_recursive_minibuffers,
cc0adcb0 1994 doc: /* Non-nil means to allow minibuffer commands while in the minibuffer.
a1f17501 1995This variable makes a difference whenever the minibuffer window is active. */);
f927c5ae
JB
1996 enable_recursive_minibuffers = 0;
1997
29208e82 1998 DEFVAR_LISP ("minibuffer-completion-table", Vminibuffer_completion_table,
af52c32d 1999 doc: /* Alist or obarray used for completion in the minibuffer.
6b61353c
KH
2000This becomes the ALIST argument to `try-completion' and `all-completions'.
2001The value can also be a list of strings or a hash table.
a1f17501
PJ
2002
2003The value may alternatively be a function, which is given three arguments:
2004 STRING, the current buffer contents;
2005 PREDICATE, the predicate for filtering possible matches;
2006 CODE, which says what kind of things to do.
b2ef9714
JB
2007CODE can be nil, t or `lambda':
2008 nil -- return the best completion of STRING, or nil if there is none.
2009 t -- return a list of all possible completions of STRING.
2010 lambda -- return t if STRING is a valid completion as it stands. */);
f927c5ae
JB
2011 Vminibuffer_completion_table = Qnil;
2012
29208e82 2013 DEFVAR_LISP ("minibuffer-completion-predicate", Vminibuffer_completion_predicate,
af52c32d 2014 doc: /* Within call to `completing-read', this holds the PREDICATE argument. */);
f927c5ae
JB
2015 Vminibuffer_completion_predicate = Qnil;
2016
29208e82 2017 DEFVAR_LISP ("minibuffer-completion-confirm", Vminibuffer_completion_confirm,
b47d0e56
CY
2018 doc: /* Whether to demand confirmation of completion before exiting minibuffer.
2019If nil, confirmation is not required.
2020If the value is `confirm', the user may exit with an input that is not
2021 a valid completion alternative, but Emacs asks for confirmation.
2022If the value is `confirm-after-completion', the user may exit with an
2023 input that is not a valid completion alternative, but Emacs asks for
1b79e224
CY
2024 confirmation if the user submitted the input right after any of the
2025 completion commands listed in `minibuffer-confirm-exit-commands'. */);
f927c5ae
JB
2026 Vminibuffer_completion_confirm = Qnil;
2027
ccf330a6 2028 DEFVAR_LISP ("minibuffer-completing-file-name",
29208e82 2029 Vminibuffer_completing_file_name,
6ddfc113 2030 doc: /* Non-nil means completing file names. */);
ccf330a6
RS
2031 Vminibuffer_completing_file_name = Qnil;
2032
29208e82 2033 DEFVAR_LISP ("minibuffer-help-form", Vminibuffer_help_form,
af52c32d 2034 doc: /* Value that `help-form' takes on inside the minibuffer. */);
f927c5ae
JB
2035 Vminibuffer_help_form = Qnil;
2036
29208e82 2037 DEFVAR_LISP ("minibuffer-history-variable", Vminibuffer_history_variable,
af52c32d 2038 doc: /* History list symbol to add minibuffer values to.
a1f17501
PJ
2039Each string of minibuffer input, as it appears on exit from the minibuffer,
2040is added with
2041 (set minibuffer-history-variable
2042 (cons STRING (symbol-value minibuffer-history-variable))) */);
5a866662 2043 XSETFASTINT (Vminibuffer_history_variable, 0);
770970cb 2044
29208e82 2045 DEFVAR_LISP ("minibuffer-history-position", Vminibuffer_history_position,
af52c32d 2046 doc: /* Current position of redoing in the history list. */);
770970cb
RS
2047 Vminibuffer_history_position = Qnil;
2048
29208e82 2049 DEFVAR_BOOL ("minibuffer-auto-raise", minibuffer_auto_raise,
cc0adcb0 2050 doc: /* Non-nil means entering the minibuffer raises the minibuffer's frame.
a1f17501 2051Some uses of the echo area also raise that frame (since they use it too). */);
6a9ee000
RS
2052 minibuffer_auto_raise = 0;
2053
29208e82 2054 DEFVAR_LISP ("completion-regexp-list", Vcompletion_regexp_list,
6b61353c
KH
2055 doc: /* List of regexps that should restrict possible completions.
2056The basic completion functions only consider a completion acceptable
2057if it matches all regular expressions in this list, with
2058`case-fold-search' bound to the value of `completion-ignore-case'.
2059See Info node `(elisp)Basic Completion', for a description of these
2060functions. */);
42006772
RS
2061 Vcompletion_regexp_list = Qnil;
2062
c3421833 2063 DEFVAR_BOOL ("minibuffer-allow-text-properties",
29208e82 2064 minibuffer_allow_text_properties,
af52c32d 2065 doc: /* Non-nil means `read-from-minibuffer' should not discard text properties.
a1f17501
PJ
2066This also affects `read-string', but it does not affect `read-minibuffer',
2067`read-no-blanks-input', or any of the functions that do minibuffer input
2068with completion; they always discard text properties. */);
c3421833
RS
2069 minibuffer_allow_text_properties = 0;
2070
29208e82 2071 DEFVAR_LISP ("minibuffer-prompt-properties", Vminibuffer_prompt_properties,
af52c32d 2072 doc: /* Text properties that are added to minibuffer prompts.
a1f17501
PJ
2073These are in addition to the basic `field' property, and stickiness
2074properties. */);
cc64f5c9
MB
2075 /* We use `intern' here instead of Qread_only to avoid
2076 initialization-order problems. */
6c6f1994 2077 Vminibuffer_prompt_properties = list2 (intern_c_string ("read-only"), Qt);
cc64f5c9 2078
727e958e 2079 defsubr (&Sactive_minibuffer_window);
68313ed8 2080 defsubr (&Sset_minibuffer_window);
f927c5ae 2081 defsubr (&Sread_from_minibuffer);
f927c5ae
JB
2082 defsubr (&Sread_string);
2083 defsubr (&Sread_command);
2084 defsubr (&Sread_variable);
ff137f16 2085 defsubr (&Sinternal_complete_buffer);
f927c5ae
JB
2086 defsubr (&Sread_buffer);
2087 defsubr (&Sread_no_blanks_input);
2088 defsubr (&Sminibuffer_depth);
37e9a934 2089 defsubr (&Sminibuffer_prompt);
f927c5ae 2090
873ef78e 2091 defsubr (&Sminibufferp);
a346ec72
MB
2092 defsubr (&Sminibuffer_prompt_end);
2093 defsubr (&Sminibuffer_contents);
2094 defsubr (&Sminibuffer_contents_no_properties);
b5e1e449 2095 defsubr (&Sminibuffer_completion_contents);
a346ec72 2096
f927c5ae
JB
2097 defsubr (&Stry_completion);
2098 defsubr (&Sall_completions);
695deb18
SM
2099 defsubr (&Stest_completion);
2100 defsubr (&Sassoc_string);
f927c5ae 2101 defsubr (&Scompleting_read);
f927c5ae 2102}