use dynwind_begin and dynwind_end
[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;
c1ade6f7 234 line = xmalloc_atomic (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;
d1ff9ee4 387 Lisp_Object histval;
4f9f637a 388
b20de1cd
RS
389 Lisp_Object empty_minibuf;
390 Lisp_Object dummy, frame;
391
e5d4686b 392 specbind (Qminibuffer_default, defalt);
7f6feb56 393 specbind (intern ("inhibit-read-only"), Qnil);
e5d4686b 394
ef72eaff
KS
395 /* If Vminibuffer_completing_file_name is `lambda' on entry, it was t
396 in previous recursive minibuffer, but was not set explicitly
397 to t for this invocation, so set it to nil in this minibuffer.
398 Save the old value now, before we change it. */
08a2434e
SM
399 specbind (intern ("minibuffer-completing-file-name"),
400 Vminibuffer_completing_file_name);
ef72eaff
KS
401 if (EQ (Vminibuffer_completing_file_name, Qlambda))
402 Vminibuffer_completing_file_name = Qnil;
403
d148e14d 404#ifdef HAVE_WINDOW_SYSTEM
526a058f
GM
405 if (display_hourglass_p)
406 cancel_hourglass ();
e5baa1a7 407#endif
718d3251 408
6b61353c
KH
409 if (!NILP (initial))
410 {
411 if (CONSP (initial))
412 {
34348bd4 413 Lisp_Object backup_n = XCDR (initial);
7d7bbefd 414 initial = XCAR (initial);
6b61353c
KH
415 CHECK_STRING (initial);
416 if (!NILP (backup_n))
417 {
418 CHECK_NUMBER (backup_n);
419 /* Convert to distance from end of input. */
420 if (XINT (backup_n) < 1)
421 /* A number too small means the beginning of the string. */
422 pos = - SCHARS (initial);
423 else
424 pos = XINT (backup_n) - 1 - SCHARS (initial);
425 }
426 }
427 else
428 CHECK_STRING (initial);
429 }
00a34088 430 val = Qnil;
4b4deea2 431 ambient_dir = BVAR (current_buffer, directory);
cee54539 432 input_method = Qnil;
c75000c7 433 enable_multibyte = Qnil;
57ceaa8a 434
00a34088
RS
435 /* Don't need to protect PROMPT, HISTVAR, and HISTPOS because we
436 store them away before we can GC. Don't need to protect
437 BACKUP_N because we use the value only if it is an integer. */
cee54539 438 GCPRO5 (map, initial, val, ambient_dir, input_method);
f927c5ae 439
7510b296 440 if (!STRINGP (prompt))
a2665596 441 prompt = empty_unibyte_string;
f927c5ae 442
f927c5ae 443 if (!enable_recursive_minibuffers
be15a518
RS
444 && minibuf_level > 0)
445 {
446 if (EQ (selected_window, minibuf_window))
447 error ("Command attempted to use minibuffer while in minibuffer");
448 else
449 /* If we're in another window, cancel the minibuffer that's active. */
450 Fthrow (Qexit,
451 build_string ("Command attempted to use minibuffer while in minibuffer"));
452 }
f927c5ae 453
a9051c88
DN
454 if ((noninteractive
455 /* In case we are running as a daemon, only do this before
456 detaching from the terminal. */
457 || (IS_DAEMON && (daemon_pipe[1] >= 0)))
458 && NILP (Vexecuting_kbd_macro))
c28b847b 459 {
6b61353c
KH
460 val = read_minibuf_noninteractive (map, initial, prompt,
461 make_number (pos),
c28b847b
GM
462 expflag, histvar, histpos, defalt,
463 allow_props, inherit_input_method);
f9b9ccef 464 UNGCPRO;
c28b847b
GM
465 return unbind_to (count, val);
466 }
edfef199 467
748dc60a 468 /* Choose the minibuffer window and frame, and take action on them. */
f927c5ae 469
218e997a
MR
470 /* Prepare for restoring the current buffer since choose_minibuf_frame
471 calling Fset_frame_selected_window may change it (Bug#12766). */
27e498e6 472 record_unwind_protect (restore_buffer, Fcurrent_buffer ());
218e997a 473
c5b6b680
RS
474 choose_minibuf_frame ();
475
27e498e6 476 record_unwind_protect_void (choose_minibuf_frame);
0c94f256 477
27e498e6 478 record_unwind_protect (restore_window_configuration,
b2b2c677
JB
479 Fcurrent_window_configuration (Qnil));
480
ff11dfa1
JB
481 /* If the minibuffer window is on a different frame, save that
482 frame's configuration too. */
75f00e72 483 mini_frame = WINDOW_FRAME (XWINDOW (minibuf_window));
a4aafc54 484 if (!EQ (mini_frame, selected_frame))
27e498e6 485 record_unwind_protect (restore_window_configuration,
5061d9c3 486 Fcurrent_window_configuration (mini_frame));
5563e8e8
KH
487
488 /* If the minibuffer is on an iconified or invisible frame,
489 make it visible now. */
490 Fmake_frame_visible (mini_frame);
491
6a9ee000
RS
492 if (minibuffer_auto_raise)
493 Fraise_frame (mini_frame);
f927c5ae 494
b3e6f69c 495 temporarily_switch_to_single_kboard (XFRAME (mini_frame));
256c9c3a 496
748dc60a
RS
497 /* We have to do this after saving the window configuration
498 since that is what restores the current buffer. */
499
500 /* Arrange to restore a number of minibuffer-related variables.
501 We could bind each variable separately, but that would use lots of
502 specpdl slots. */
503 minibuf_save_list
504 = Fcons (Voverriding_local_map,
3372a51b 505 Fcons (minibuf_window,
ef72eaff 506 minibuf_save_list));
748dc60a
RS
507 minibuf_save_list
508 = Fcons (minibuf_prompt,
509 Fcons (make_number (minibuf_prompt_width),
510 Fcons (Vhelp_form,
511 Fcons (Vcurrent_prefix_arg,
512 Fcons (Vminibuffer_history_position,
513 Fcons (Vminibuffer_history_variable,
514 minibuf_save_list))))));
515
27e498e6 516 record_unwind_protect_void (read_minibuf_unwind);
748dc60a 517 minibuf_level++;
7292839d
SM
518 /* We are exiting the minibuffer one way or the other, so run the hook.
519 It should be run before unwinding the minibuf settings. Do it
520 separately from read_minibuf_unwind because we need to make sure that
521 read_minibuf_unwind is fully executed even if exit-minibuffer-hook
522 signals an error. --Stef */
27e498e6 523 record_unwind_protect_void (run_exit_minibuf_hook);
748dc60a
RS
524
525 /* Now that we can restore all those variables, start changing them. */
526
1e3f16d5 527 minibuf_prompt_width = 0;
748dc60a
RS
528 minibuf_prompt = Fcopy_sequence (prompt);
529 Vminibuffer_history_position = histpos;
530 Vminibuffer_history_variable = histvar;
531 Vhelp_form = Vminibuffer_help_form;
ef72eaff
KS
532 /* If this minibuffer is reading a file name, that doesn't mean
533 recursive ones are. But we cannot set it to nil, because
534 completion code still need to know the minibuffer is completing a
535 file name. So use `lambda' as intermediate value meaning
536 "t" in this minibuffer, but "nil" in next minibuffer. */
537 if (!NILP (Vminibuffer_completing_file_name))
538 Vminibuffer_completing_file_name = Qlambda;
748dc60a 539
73b60c4a 540 /* If variable is unbound, make it nil. */
d1ff9ee4
PE
541 histval = find_symbol_value (Vminibuffer_history_variable);
542 if (EQ (histval, Qunbound))
543 {
544 Fset (Vminibuffer_history_variable, Qnil);
545 histval = Qnil;
546 }
73b60c4a 547
cee54539 548 if (inherit_input_method)
c75000c7 549 {
fd771ceb 550 /* `current-input-method' is buffer local. So, remember it in
c75000c7
RS
551 INPUT_METHOD before changing the current buffer. */
552 input_method = Fsymbol_value (Qcurrent_input_method);
4b4deea2 553 enable_multibyte = BVAR (current_buffer, enable_multibyte_characters);
c75000c7 554 }
cee54539 555
748dc60a
RS
556 /* Switch to the minibuffer. */
557
4f69d8f6
RS
558 minibuffer = get_minibuffer (minibuf_level);
559 Fset_buffer (minibuffer);
64a3a3c0 560
cddde921
GM
561 /* Defeat (setq-default truncate-lines t), since truncated lines do
562 not work correctly in minibuffers. (Bug#5715, etc) */
39eb03f1 563 bset_truncate_lines (current_buffer, Qnil);
cddde921 564
1d69c502
RS
565 /* If appropriate, copy enable-multibyte-characters into the minibuffer. */
566 if (inherit_input_method)
39eb03f1 567 bset_enable_multibyte_characters (current_buffer, enable_multibyte);
1d69c502 568
64a3a3c0
JB
569 /* The current buffer's default directory is usually the right thing
570 for our minibuffer here. However, if you're typing a command at
571 a minibuffer-only frame when minibuf_level is zero, then buf IS
572 the current_buffer, so reset_buffer leaves buf's default
573 directory unchanged. This is a bummer when you've just started
574 up Emacs and buf's default directory is Qnil. Here's a hack; can
575 you think of something better to do? Find another buffer with a
576 better directory, and use that one instead. */
748dc60a 577 if (STRINGP (ambient_dir))
39eb03f1 578 bset_directory (current_buffer, ambient_dir);
64a3a3c0
JB
579 else
580 {
8f3a2c26 581 Lisp_Object tail, buf;
64a3a3c0 582
8f3a2c26
DA
583 FOR_EACH_LIVE_BUFFER (tail, buf)
584 if (STRINGP (BVAR (XBUFFER (buf), directory)))
585 {
586 bset_directory (current_buffer,
587 BVAR (XBUFFER (buf), directory));
588 break;
589 }
64a3a3c0
JB
590 }
591
a4aafc54
GM
592 if (!EQ (mini_frame, selected_frame))
593 Fredirect_frame_focus (selected_frame, mini_frame);
43bad991 594
f927c5ae 595 Vminibuf_scroll_window = selected_window;
6122844a 596 if (minibuf_level == 1 || !EQ (minibuf_window, selected_window))
5705966b 597 minibuf_selected_window = selected_window;
b20de1cd
RS
598
599 /* Empty out the minibuffers of all frames other than the one
600 where we are going to display one now.
601 Set them to point to ` *Minibuf-0*', which is always empty. */
620c53a6 602 empty_minibuf = get_minibuffer (0);
b20de1cd
RS
603
604 FOR_EACH_FRAME (dummy, frame)
605 {
606 Lisp_Object root_window = Fframe_root_window (frame);
d3d50620 607 Lisp_Object mini_window = XWINDOW (root_window)->next;
b20de1cd 608
dd95745a
RS
609 if (! NILP (mini_window) && ! EQ (mini_window, minibuf_window)
610 && !NILP (Fwindow_minibuffer_p (mini_window)))
08908aca
MR
611 /* Use set_window_buffer instead of Fset_window_buffer (see
612 discussion of bug#11984, bug#12025, bug#12026). */
613 set_window_buffer (mini_window, empty_minibuf, 0, 0);
b20de1cd
RS
614 }
615
616 /* Display this minibuffer in the proper window. */
08908aca
MR
617 /* Use set_window_buffer instead of Fset_window_buffer (see
618 discussion of bug#11984, bug#12025, bug#12026). */
619 set_window_buffer (minibuf_window, Fcurrent_buffer (), 0, 0);
f1321dc3 620 Fselect_window (minibuf_window, Qnil);
80b00b08 621 XWINDOW (minibuf_window)->hscroll = 0;
f927c5ae 622
748dc60a
RS
623 Fmake_local_variable (Qprint_escape_newlines);
624 print_escape_newlines = 1;
625
626 /* Erase the buffer. */
59115a22 627 {
d311d28c 628 ptrdiff_t count1 = SPECPDL_INDEX ();
59115a22 629 specbind (Qinhibit_read_only, Qt);
a41edd99 630 specbind (Qinhibit_modification_hooks, Qt);
59115a22 631 Ferase_buffer ();
d9d7b298 632
4b4deea2 633 if (!NILP (BVAR (current_buffer, enable_multibyte_characters))
d9d7b298
SM
634 && ! STRING_MULTIBYTE (minibuf_prompt))
635 minibuf_prompt = Fstring_make_multibyte (minibuf_prompt);
6cc62df0 636
d9d7b298
SM
637 /* Insert the prompt, record where it ends. */
638 Finsert (1, &minibuf_prompt);
639 if (PT > BEG)
640 {
641 Fput_text_property (make_number (BEG), make_number (PT),
642 Qfront_sticky, Qt, Qnil);
643 Fput_text_property (make_number (BEG), make_number (PT),
644 Qrear_nonsticky, Qt, Qnil);
645 Fput_text_property (make_number (BEG), make_number (PT),
646 Qfield, Qt, Qnil);
647 Fadd_text_properties (make_number (BEG), make_number (PT),
648 Vminibuffer_prompt_properties, Qnil);
649 }
59115a22
RS
650 unbind_to (count1, Qnil);
651 }
652
7831777b 653 minibuf_prompt_width = current_column ();
9ab4a725 654
748dc60a 655 /* Put in the initial input. */
56a98455 656 if (!NILP (initial))
f927c5ae
JB
657 {
658 Finsert (1, &initial);
6b61353c 659 Fforward_char (make_number (pos));
f927c5ae
JB
660 }
661
39e98b38 662 clear_message (1, 1);
39eb03f1 663 bset_keymap (current_buffer, map);
f927c5ae 664
cee54539 665 /* Turn on an input method stored in INPUT_METHOD if any. */
6801b300 666 if (STRINGP (input_method) && !NILP (Ffboundp (Qactivate_input_method)))
cee54539
KH
667 call1 (Qactivate_input_method, input_method);
668
dee091a3 669 Frun_hooks (1, &Qminibuffer_setup_hook);
5c781212 670
4e6b7204 671 /* Don't allow the user to undo past this point. */
39eb03f1 672 bset_undo_list (current_buffer, Qnil);
4e6b7204 673
f927c5ae
JB
674 recursive_edit_1 ();
675
676 /* If cursor is on the minibuffer line,
677 show the user we have exited by putting it in column 0. */
279cf52c 678 if (XWINDOW (minibuf_window)->cursor.vpos >= 0
f927c5ae
JB
679 && !noninteractive)
680 {
279cf52c
GM
681 XWINDOW (minibuf_window)->cursor.hpos = 0;
682 XWINDOW (minibuf_window)->cursor.x = 0;
683 XWINDOW (minibuf_window)->must_be_updated_p = 1;
a4aafc54 684 update_frame (XFRAME (selected_frame), 1, 1);
fd462129 685 flush_frame (XFRAME (XWINDOW (minibuf_window)->frame));
f927c5ae
JB
686 }
687
c3421833 688 /* Make minibuffer contents into a string. */
4f69d8f6 689 Fset_buffer (minibuffer);
be95a9b6 690 if (allow_props)
a346ec72 691 val = Fminibuffer_contents ();
be95a9b6 692 else
a346ec72 693 val = Fminibuffer_contents_no_properties ();
770970cb 694
b278606c 695 /* VAL is the string of minibuffer text. */
7019cca7 696
b278606c
BF
697 last_minibuf_string = val;
698
4f9f637a 699 /* Choose the string to add to the history. */
b35cd215 700 if (SCHARS (val) != 0)
4f9f637a
RS
701 histstring = val;
702 else if (STRINGP (defalt))
703 histstring = defalt;
fb30dfd2
JL
704 else if (CONSP (defalt) && STRINGP (XCAR (defalt)))
705 histstring = XCAR (defalt);
4f9f637a
RS
706 else
707 histstring = Qnil;
708
709 /* Add the value to the appropriate history list, if any. */
179a4ca7
JL
710 if (!NILP (Vhistory_add_new_input)
711 && SYMBOLP (Vminibuffer_history_variable)
4f9f637a 712 && !NILP (histstring))
3ab14176
KH
713 {
714 /* If the caller wanted to save the value read on a history list,
715 then do so if the value is not already the front of the list. */
3ab14176
KH
716
717 /* The value of the history variable must be a cons or nil. Other
718 values are unacceptable. We silently ignore these values. */
4f9f637a 719
3ab14176 720 if (NILP (histval)
9f6131cf 721 || (CONSP (histval)
4f9f637a 722 /* Don't duplicate the most recent entry in the history. */
b35cd215 723 && (NILP (Fequal (histstring, Fcar (histval))))))
77aa8edf
RS
724 {
725 Lisp_Object length;
726
0da4d471 727 if (history_delete_duplicates) Fdelete (histstring, histval);
4f9f637a 728 histval = Fcons (histstring, histval);
77aa8edf
RS
729 Fset (Vminibuffer_history_variable, histval);
730
731 /* Truncate if requested. */
732 length = Fget (Vminibuffer_history_variable, Qhistory_length);
733 if (NILP (length)) length = Vhistory_length;
e5d4686b
RS
734 if (INTEGERP (length))
735 {
736 if (XINT (length) <= 0)
737 Fset (Vminibuffer_history_variable, Qnil);
738 else
739 {
740 Lisp_Object temp;
741
742 temp = Fnthcdr (Fsub1 (length), histval);
743 if (CONSP (temp)) Fsetcdr (temp, Qnil);
744 }
745 }
77aa8edf 746 }
9f6131cf
RS
747 }
748
fd6fa53f 749 /* If Lisp form desired instead of string, parse it. */
9f6131cf 750 if (expflag)
edfef199 751 val = string_to_object (val, defalt);
3ab14176 752
00a34088
RS
753 /* The appropriate frame will get selected
754 in set-window-configuration. */
f9b9ccef
SM
755 UNGCPRO;
756 return unbind_to (count, val);
f927c5ae
JB
757}
758
759/* Return a buffer to be used as the minibuffer at depth `depth'.
760 depth = 0 is the lowest allowed argument, and that is the value
fd6fa53f 761 used for nonrecursive minibuffer invocations. */
f927c5ae
JB
762
763Lisp_Object
62f19c19 764get_minibuffer (EMACS_INT depth)
f927c5ae
JB
765{
766 Lisp_Object tail, num, buf;
62f19c19 767 char name[sizeof " *Minibuf-*" + INT_STRLEN_BOUND (EMACS_INT)];
f927c5ae 768
5a866662 769 XSETFASTINT (num, depth);
f927c5ae 770 tail = Fnthcdr (num, Vminibuffer_list);
56a98455 771 if (NILP (tail))
f927c5ae 772 {
6c6f1994 773 tail = list1 (Qnil);
f927c5ae
JB
774 Vminibuffer_list = nconc2 (Vminibuffer_list, tail);
775 }
776 buf = Fcar (tail);
e578f381 777 if (NILP (buf) || !BUFFER_LIVE_P (XBUFFER (buf)))
f927c5ae 778 {
a8290ec3
DA
779 buf = Fget_buffer_create
780 (make_formatted_string (name, " *Minibuf-%"pI"d*", depth));
5d6533f1
JB
781
782 /* Although the buffer's name starts with a space, undo should be
783 enabled in it. */
784 Fbuffer_enable_undo (buf);
785
f3fbd155 786 XSETCAR (tail, buf);
f927c5ae
JB
787 }
788 else
5956f71d 789 {
d311d28c 790 ptrdiff_t count = SPECPDL_INDEX ();
041a49a6
DA
791 /* We have to empty both overlay lists. Otherwise we end
792 up with overlays that think they belong to this buffer
793 while the buffer doesn't know about them any more. */
599ca9c2
SM
794 delete_all_overlays (XBUFFER (buf));
795 reset_buffer (XBUFFER (buf));
66322887 796 record_unwind_current_buffer ();
6b3faad8 797 Fset_buffer (buf);
fd6fa53f
SM
798 if (!NILP (Ffboundp (intern ("minibuffer-inactive-mode"))))
799 call0 (intern ("minibuffer-inactive-mode"));
800 else
801 Fkill_all_local_variables ();
6b3faad8 802 unbind_to (count, Qnil);
5956f71d 803 }
64a3a3c0 804
f927c5ae
JB
805 return buf;
806}
807
27e498e6
PE
808static void
809run_exit_minibuf_hook (void)
7292839d 810{
dee091a3 811 safe_run_hooks (Qminibuffer_exit_hook);
7292839d
SM
812}
813
279cf52c 814/* This function is called on exiting minibuffer, whether normally or
fd6fa53f 815 not, and it restores the current window, buffer, etc. */
f927c5ae 816
27e498e6
PE
817static void
818read_minibuf_unwind (void)
f927c5ae 819{
c24e1160 820 Lisp_Object old_deactivate_mark;
59115a22 821 Lisp_Object window;
c24e1160 822
f927c5ae 823 /* If this was a recursive minibuffer,
59115a22 824 tie the minibuffer window back to the outer level minibuffer buffer. */
f927c5ae 825 minibuf_level--;
f927c5ae 826
59115a22 827 window = minibuf_window;
279cf52c
GM
828 /* To keep things predictable, in case it matters, let's be in the
829 minibuffer when we reset the relevant variables. */
e74aeda8 830 Fset_buffer (XWINDOW (window)->contents);
59115a22
RS
831
832 /* Restore prompt, etc, from outer minibuffer level. */
4d04c1f1
KH
833 minibuf_prompt = Fcar (minibuf_save_list);
834 minibuf_save_list = Fcdr (minibuf_save_list);
835 minibuf_prompt_width = XFASTINT (Fcar (minibuf_save_list));
836 minibuf_save_list = Fcdr (minibuf_save_list);
837 Vhelp_form = Fcar (minibuf_save_list);
838 minibuf_save_list = Fcdr (minibuf_save_list);
ee9e37ab 839 Vcurrent_prefix_arg = Fcar (minibuf_save_list);
4d04c1f1
KH
840 minibuf_save_list = Fcdr (minibuf_save_list);
841 Vminibuffer_history_position = Fcar (minibuf_save_list);
842 minibuf_save_list = Fcdr (minibuf_save_list);
843 Vminibuffer_history_variable = Fcar (minibuf_save_list);
844 minibuf_save_list = Fcdr (minibuf_save_list);
30e13e56 845 Voverriding_local_map = Fcar (minibuf_save_list);
c5b6b680 846 minibuf_save_list = Fcdr (minibuf_save_list);
914860c2
RS
847#if 0
848 temp = Fcar (minibuf_save_list);
849 if (FRAME_LIVE_P (XFRAME (WINDOW_FRAME (XWINDOW (temp)))))
850 minibuf_window = temp;
851#endif
30e13e56 852 minibuf_save_list = Fcdr (minibuf_save_list);
59115a22
RS
853
854 /* Erase the minibuffer we were using at this level. */
855 {
d311d28c 856 ptrdiff_t count = SPECPDL_INDEX ();
59115a22
RS
857 /* Prevent error in erase-buffer. */
858 specbind (Qinhibit_read_only, Qt);
bd819d14 859 specbind (Qinhibit_modification_hooks, Qt);
59115a22
RS
860 old_deactivate_mark = Vdeactivate_mark;
861 Ferase_buffer ();
862 Vdeactivate_mark = old_deactivate_mark;
863 unbind_to (count, Qnil);
864 }
865
544e358d
GM
866 /* When we get to the outmost level, make sure we resize the
867 mini-window back to its normal size. */
868 if (minibuf_level == 0)
1e3f16d5 869 resize_mini_window (XWINDOW (window), 0);
544e358d 870
fd6fa53f
SM
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.
aa60235a
LI
971 This argument has been superseded by DEFAULT-VALUE and should normally be nil
972 in new code. It behaves as INITIAL-CONTENTS in `read-from-minibuffer' (which
973 see).
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)
a1f03e89 1202 || (CONSP (collection) && !FUNCTIONP (collection)))
f6d4c7a4 1203 ? list_table : function_table));
d311d28c 1204 ptrdiff_t idx = 0, obsize = 0;
f927c5ae
JB
1205 int matchcount = 0;
1206 Lisp_Object bucket, zero, end, tem;
1207 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
1208
b7826503 1209 CHECK_STRING (string);
f6d4c7a4 1210 if (type == function_table)
a284cdbb 1211 return call3 (collection, string, predicate, Qnil);
f927c5ae 1212
6bbd7a29 1213 bestmatch = bucket = Qnil;
c8ae863b 1214 zero = make_number (0);
f927c5ae 1215
a284cdbb
RS
1216 /* If COLLECTION is not a list, set TAIL just for gc pro. */
1217 tail = collection;
f6d4c7a4 1218 if (type == obarray_table)
f927c5ae 1219 {
a284cdbb 1220 collection = check_obarray (collection);
77b37c05 1221 obsize = ASIZE (collection);
28be1ada 1222 bucket = AREF (collection, idx);
f927c5ae
JB
1223 }
1224
1225 while (1)
1226 {
fd6fa53f
SM
1227 /* Get the next element of the alist, obarray, or hash-table. */
1228 /* Exit the loop if the elements are all used up. */
f927c5ae 1229 /* elt gets the alist element or symbol.
fd6fa53f 1230 eltstring gets the name to check as a completion. */
f927c5ae 1231
f6d4c7a4 1232 if (type == list_table)
f927c5ae 1233 {
695deb18 1234 if (!CONSP (tail))
f927c5ae 1235 break;
695deb18
SM
1236 elt = XCAR (tail);
1237 eltstring = CONSP (elt) ? XCAR (elt) : elt;
1238 tail = XCDR (tail);
f927c5ae 1239 }
f6d4c7a4 1240 else if (type == obarray_table)
f927c5ae 1241 {
c8ae863b 1242 if (!EQ (bucket, zero))
f927c5ae 1243 {
9b6b374a
JB
1244 if (!SYMBOLP (bucket))
1245 error ("Bad data in guts of obarray");
f927c5ae 1246 elt = bucket;
3809648a 1247 eltstring = elt;
f927c5ae
JB
1248 if (XSYMBOL (bucket)->next)
1249 XSETSYMBOL (bucket, XSYMBOL (bucket)->next);
1250 else
5a866662 1251 XSETFASTINT (bucket, 0);
f927c5ae 1252 }
62137a95 1253 else if (++idx >= obsize)
f927c5ae
JB
1254 break;
1255 else
1256 {
28be1ada 1257 bucket = AREF (collection, idx);
f927c5ae
JB
1258 continue;
1259 }
1260 }
f6d4c7a4 1261 else /* if (type == hash_table) */
85cd4372 1262 {
62137a95
PE
1263 while (idx < HASH_TABLE_SIZE (XHASH_TABLE (collection))
1264 && NILP (HASH_HASH (XHASH_TABLE (collection), idx)))
1265 idx++;
1266 if (idx >= HASH_TABLE_SIZE (XHASH_TABLE (collection)))
85cd4372
SM
1267 break;
1268 else
62137a95 1269 elt = eltstring = HASH_KEY (XHASH_TABLE (collection), idx++);
85cd4372 1270 }
f927c5ae 1271
fd6fa53f 1272 /* Is this element a possible completion? */
f927c5ae 1273
3809648a
KS
1274 if (SYMBOLP (eltstring))
1275 eltstring = Fsymbol_name (eltstring);
1276
7510b296 1277 if (STRINGP (eltstring)
d5db4077 1278 && SCHARS (string) <= SCHARS (eltstring)
c8ae863b 1279 && (tem = Fcompare_strings (eltstring, zero,
d5db4077 1280 make_number (SCHARS (string)),
c8ae863b 1281 string, zero, Qnil,
6b61353c 1282 completion_ignore_case ? Qt : Qnil),
69f4ef20 1283 EQ (Qt, tem)))
f927c5ae 1284 {
fd6fa53f 1285 /* Yes. */
42006772 1286 Lisp_Object regexps;
42006772
RS
1287
1288 /* Ignore this element if it fails to match all the regexps. */
6b61353c 1289 {
9f62b5dd
BT
1290 dynwind_begin ();
1291 specbind (Qcase_fold_search,
1292 completion_ignore_case ? Qt : Qnil);
6b61353c
KH
1293 for (regexps = Vcompletion_regexp_list; CONSP (regexps);
1294 regexps = XCDR (regexps))
1295 {
1296 tem = Fstring_match (XCAR (regexps), eltstring, zero);
1297 if (NILP (tem))
1298 break;
1299 }
9f62b5dd 1300 dynwind_end ();
6b61353c
KH
1301 if (CONSP (regexps))
1302 continue;
1303 }
42006772 1304
f927c5ae 1305 /* Ignore this element if there is a predicate
fd6fa53f 1306 and the predicate doesn't like it. */
f927c5ae 1307
7efd36fc 1308 if (!NILP (predicate))
f927c5ae 1309 {
7efd36fc 1310 if (EQ (predicate, Qcommandp))
c837f4f9 1311 tem = Fcommandp (elt, Qnil);
f927c5ae
JB
1312 else
1313 {
1314 GCPRO4 (tail, string, eltstring, bestmatch);
f6d4c7a4
RS
1315 tem = (type == hash_table
1316 ? call2 (predicate, elt,
1317 HASH_VALUE (XHASH_TABLE (collection),
62137a95 1318 idx - 1))
f6d4c7a4 1319 : call1 (predicate, elt));
f927c5ae
JB
1320 UNGCPRO;
1321 }
56a98455 1322 if (NILP (tem)) continue;
f927c5ae
JB
1323 }
1324
1325 /* Update computation of how much all possible completions match */
1326
56a98455 1327 if (NILP (bestmatch))
af2b7cd5 1328 {
85cd4372 1329 matchcount = 1;
af2b7cd5 1330 bestmatch = eltstring;
d5db4077 1331 bestmatchsize = SCHARS (eltstring);
af2b7cd5 1332 }
f927c5ae
JB
1333 else
1334 {
d5db4077 1335 compare = min (bestmatchsize, SCHARS (eltstring));
c8ae863b 1336 tem = Fcompare_strings (bestmatch, zero,
69f4ef20 1337 make_number (compare),
c8ae863b 1338 eltstring, zero,
69f4ef20
RS
1339 make_number (compare),
1340 completion_ignore_case ? Qt : Qnil);
71376d4b 1341 matchsize = EQ (tem, Qt) ? compare : eabs (XINT (tem)) - 1;
69f4ef20 1342
52b14ac0
JB
1343 if (completion_ignore_case)
1344 {
1345 /* If this is an exact match except for case,
1346 use it as the best match rather than one that is not an
1347 exact match. This way, we get the case pattern
1348 of the actual match. */
d5db4077
KR
1349 if ((matchsize == SCHARS (eltstring)
1350 && matchsize < SCHARS (bestmatch))
52b14ac0
JB
1351 ||
1352 /* If there is more than one exact match ignoring case,
1353 and one of them is exact including case,
1354 prefer that one. */
1355 /* If there is no exact match ignoring case,
1356 prefer a match that does not change the case
1357 of the input. */
d5db4077 1358 ((matchsize == SCHARS (eltstring))
52b14ac0 1359 ==
d5db4077 1360 (matchsize == SCHARS (bestmatch))
c8ae863b 1361 && (tem = Fcompare_strings (eltstring, zero,
d5db4077 1362 make_number (SCHARS (string)),
c8ae863b 1363 string, zero,
69f4ef20
RS
1364 Qnil,
1365 Qnil),
1366 EQ (Qt, tem))
c8ae863b 1367 && (tem = Fcompare_strings (bestmatch, zero,
d5db4077 1368 make_number (SCHARS (string)),
c8ae863b 1369 string, zero,
69f4ef20
RS
1370 Qnil,
1371 Qnil),
1372 ! EQ (Qt, tem))))
52b14ac0
JB
1373 bestmatch = eltstring;
1374 }
d5db4077 1375 if (bestmatchsize != SCHARS (eltstring)
85cd4372
SM
1376 || bestmatchsize != matchsize)
1377 /* Don't count the same string multiple times. */
7cded46f 1378 matchcount += matchcount <= 1;
52b14ac0 1379 bestmatchsize = matchsize;
d5db4077 1380 if (matchsize <= SCHARS (string)
78893e05
CY
1381 /* If completion-ignore-case is non-nil, don't
1382 short-circuit because we want to find the best
1383 possible match *including* case differences. */
1384 && !completion_ignore_case
695deb18
SM
1385 && matchcount > 1)
1386 /* No need to look any further. */
1387 break;
f927c5ae
JB
1388 }
1389 }
1390 }
1391
56a98455 1392 if (NILP (bestmatch))
fd6fa53f 1393 return Qnil; /* No completions found. */
52b14ac0
JB
1394 /* If we are ignoring case, and there is no exact match,
1395 and no additional text was supplied,
1396 don't change the case of what the user typed. */
d5db4077
KR
1397 if (completion_ignore_case && bestmatchsize == SCHARS (string)
1398 && SCHARS (bestmatch) > bestmatchsize)
ec067ec7 1399 return minibuf_conform_representation (string, bestmatch);
52b14ac0
JB
1400
1401 /* Return t if the supplied string is an exact match (counting case);
1402 it does not require any change to be made. */
928b5acc 1403 if (matchcount == 1 && !NILP (Fequal (bestmatch, string)))
f927c5ae
JB
1404 return Qt;
1405
5a866662 1406 XSETFASTINT (zero, 0); /* Else extract the part in which */
fd6fa53f 1407 XSETFASTINT (end, bestmatchsize); /* all completions agree. */
f927c5ae
JB
1408 return Fsubstring (bestmatch, zero, end);
1409}
f927c5ae 1410\f
89a255dc 1411DEFUN ("all-completions", Fall_completions, Sall_completions, 2, 4, 0,
a284cdbb
RS
1412 doc: /* Search for partial matches to STRING in COLLECTION.
1413Test each of the possible completions specified by COLLECTION
1414to see if it begins with STRING. The possible completions may be
3809648a
KS
1415strings or symbols. Symbols are converted to strings before testing,
1416see `symbol-name'.
a284cdbb 1417The value is a list of all the possible completions that match STRING.
a1f17501 1418
a284cdbb
RS
1419If COLLECTION is an alist, the keys (cars of elements) are the
1420possible completions. If an element is not a cons cell, then the
1421element itself is the possible completion.
1422If COLLECTION is a hash-table, all the keys that are strings or symbols
1423are the possible completions.
1424If COLLECTION is an obarray, the names of all symbols in the obarray
1425are the possible completions.
a1f17501 1426
a284cdbb 1427COLLECTION can also be a function to do the completion itself.
a1f17501
PJ
1428It receives three arguments: the values STRING, PREDICATE and t.
1429Whatever it returns becomes the value of `all-completions'.
1430
1431If optional third argument PREDICATE is non-nil,
1432it is used to test each possible match.
1433The match is a candidate only if PREDICATE returns non-nil.
1434The argument given to PREDICATE is the alist element
a284cdbb 1435or the symbol from the obarray. If COLLECTION is a hash-table,
85cd4372 1436predicate is called with two arguments: the key and the value.
a1f17501
PJ
1437Additionally to this predicate, `completion-regexp-list'
1438is used to further constrain the set of candidates.
1439
782a943e 1440An obsolete optional fourth argument HIDE-SPACES is still accepted for
057bce6f 1441backward compatibility. If non-nil, strings in COLLECTION that start
4fcc3d32 1442with a space are ignored unless STRING itself starts with a space. */)
5842a27b 1443 (Lisp_Object string, Lisp_Object collection, Lisp_Object predicate, Lisp_Object hide_spaces)
f927c5ae
JB
1444{
1445 Lisp_Object tail, elt, eltstring;
1446 Lisp_Object allmatches;
a284cdbb
RS
1447 int type = HASH_TABLE_P (collection) ? 3
1448 : VECTORP (collection) ? 2
a1f03e89 1449 : NILP (collection) || (CONSP (collection) && !FUNCTIONP (collection));
d311d28c 1450 ptrdiff_t idx = 0, obsize = 0;
c8ae863b 1451 Lisp_Object bucket, tem, zero;
f927c5ae
JB
1452 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
1453
b7826503 1454 CHECK_STRING (string);
85cd4372 1455 if (type == 0)
a284cdbb 1456 return call3 (collection, string, predicate, Qt);
6bbd7a29 1457 allmatches = bucket = Qnil;
c8ae863b 1458 zero = make_number (0);
f927c5ae 1459
a284cdbb
RS
1460 /* If COLLECTION is not a list, set TAIL just for gc pro. */
1461 tail = collection;
85cd4372 1462 if (type == 2)
f927c5ae 1463 {
373bf2b7 1464 collection = check_obarray (collection);
77b37c05 1465 obsize = ASIZE (collection);
28be1ada 1466 bucket = AREF (collection, idx);
f927c5ae
JB
1467 }
1468
1469 while (1)
1470 {
fd6fa53f
SM
1471 /* Get the next element of the alist, obarray, or hash-table. */
1472 /* Exit the loop if the elements are all used up. */
f927c5ae 1473 /* elt gets the alist element or symbol.
fd6fa53f 1474 eltstring gets the name to check as a completion. */
f927c5ae 1475
85cd4372 1476 if (type == 1)
f927c5ae 1477 {
695deb18 1478 if (!CONSP (tail))
f927c5ae 1479 break;
695deb18
SM
1480 elt = XCAR (tail);
1481 eltstring = CONSP (elt) ? XCAR (elt) : elt;
1482 tail = XCDR (tail);
f927c5ae 1483 }
85cd4372 1484 else if (type == 2)
f927c5ae 1485 {
373bf2b7 1486 if (!EQ (bucket, zero))
f927c5ae 1487 {
373bf2b7
AS
1488 if (!SYMBOLP (bucket))
1489 error ("Bad data in guts of obarray");
f927c5ae 1490 elt = bucket;
3809648a 1491 eltstring = elt;
f927c5ae
JB
1492 if (XSYMBOL (bucket)->next)
1493 XSETSYMBOL (bucket, XSYMBOL (bucket)->next);
1494 else
5a866662 1495 XSETFASTINT (bucket, 0);
f927c5ae 1496 }
62137a95 1497 else if (++idx >= obsize)
f927c5ae
JB
1498 break;
1499 else
1500 {
28be1ada 1501 bucket = AREF (collection, idx);
f927c5ae
JB
1502 continue;
1503 }
1504 }
85cd4372
SM
1505 else /* if (type == 3) */
1506 {
62137a95
PE
1507 while (idx < HASH_TABLE_SIZE (XHASH_TABLE (collection))
1508 && NILP (HASH_HASH (XHASH_TABLE (collection), idx)))
1509 idx++;
1510 if (idx >= HASH_TABLE_SIZE (XHASH_TABLE (collection)))
85cd4372
SM
1511 break;
1512 else
62137a95 1513 elt = eltstring = HASH_KEY (XHASH_TABLE (collection), idx++);
85cd4372 1514 }
f927c5ae 1515
fd6fa53f 1516 /* Is this element a possible completion? */
f927c5ae 1517
3809648a
KS
1518 if (SYMBOLP (eltstring))
1519 eltstring = Fsymbol_name (eltstring);
1520
7510b296 1521 if (STRINGP (eltstring)
d5db4077 1522 && SCHARS (string) <= SCHARS (eltstring)
89a255dc 1523 /* If HIDE_SPACES, reject alternatives that start with space
2cbaf886 1524 unless the input starts with space. */
11e3c684
CY
1525 && (NILP (hide_spaces)
1526 || (SBYTES (string) > 0
1527 && SREF (string, 0) == ' ')
1528 || SREF (eltstring, 0) != ' ')
c8ae863b 1529 && (tem = Fcompare_strings (eltstring, zero,
d5db4077 1530 make_number (SCHARS (string)),
c8ae863b 1531 string, zero,
d5db4077 1532 make_number (SCHARS (string)),
69f4ef20
RS
1533 completion_ignore_case ? Qt : Qnil),
1534 EQ (Qt, tem)))
f927c5ae 1535 {
fd6fa53f 1536 /* Yes. */
42006772 1537 Lisp_Object regexps;
42006772
RS
1538
1539 /* Ignore this element if it fails to match all the regexps. */
6b61353c 1540 {
9f62b5dd
BT
1541 dynwind_begin ();
1542 specbind (Qcase_fold_search,
1543 completion_ignore_case ? Qt : Qnil);
6b61353c
KH
1544 for (regexps = Vcompletion_regexp_list; CONSP (regexps);
1545 regexps = XCDR (regexps))
1546 {
1547 tem = Fstring_match (XCAR (regexps), eltstring, zero);
1548 if (NILP (tem))
1549 break;
1550 }
9f62b5dd 1551 dynwind_end ();
6b61353c
KH
1552 if (CONSP (regexps))
1553 continue;
1554 }
42006772 1555
f927c5ae 1556 /* Ignore this element if there is a predicate
fd6fa53f 1557 and the predicate doesn't like it. */
f927c5ae 1558
7efd36fc 1559 if (!NILP (predicate))
f927c5ae 1560 {
7efd36fc 1561 if (EQ (predicate, Qcommandp))
c837f4f9 1562 tem = Fcommandp (elt, Qnil);
f927c5ae
JB
1563 else
1564 {
1565 GCPRO4 (tail, eltstring, allmatches, string);
85cd4372
SM
1566 tem = type == 3
1567 ? call2 (predicate, elt,
62137a95 1568 HASH_VALUE (XHASH_TABLE (collection), idx - 1))
85cd4372 1569 : call1 (predicate, elt);
f927c5ae
JB
1570 UNGCPRO;
1571 }
56a98455 1572 if (NILP (tem)) continue;
f927c5ae 1573 }
fd6fa53f 1574 /* Ok => put it on the list. */
f927c5ae
JB
1575 allmatches = Fcons (eltstring, allmatches);
1576 }
1577 }
1578
1579 return Fnreverse (allmatches);
1580}
1581\f
a7ca3326 1582DEFUN ("completing-read", Fcompleting_read, Scompleting_read, 2, 8, 0,
af52c32d 1583 doc: /* Read a string in the minibuffer, with completion.
a1f17501 1584PROMPT is a string to prompt with; normally it ends in a colon and a space.
a284cdbb
RS
1585COLLECTION can be a list of strings, an alist, an obarray or a hash table.
1586COLLECTION can also be a function to do the completion itself.
1587PREDICATE limits completion to a subset of COLLECTION.
a1f17501 1588See `try-completion' and `all-completions' for more details
a284cdbb 1589 on completion, COLLECTION, and PREDICATE.
a1f17501 1590
4d02fc25
SM
1591REQUIRE-MATCH can take the following values:
1592- t means that the user is not allowed to exit unless
1593 the input is (or completes to) an element of COLLECTION or is null.
1594- nil means that the user can exit with any input.
b47d0e56
CY
1595- `confirm' means that the user can exit with any input, but she needs
1596 to confirm her choice if the input is not an element of COLLECTION.
1597- `confirm-after-completion' means that the user can exit with any
1598 input, but she needs to confirm her choice if she called
1599 `minibuffer-complete' right before `minibuffer-complete-and-exit'
1600 and the input is not an element of COLLECTION.
4d02fc25
SM
1601- anything else behaves like t except that typing RET does not exit if it
1602 does non-null completion.
1603
2e3148e2
JL
1604If the input is null, `completing-read' returns DEF, or the first element
1605of the list of default values, or an empty string if DEF is nil,
1606regardless of the value of REQUIRE-MATCH.
6b61353c
KH
1607
1608If INITIAL-INPUT is non-nil, insert it in the minibuffer initially,
1609 with point positioned at the end.
1610 If it is (STRING . POSITION), the initial input is STRING, but point
1611 is placed at _zero-indexed_ position POSITION in STRING. (*Note*
1612 that this is different from `read-from-minibuffer' and related
1613 functions, which use one-indexing for POSITION.) This feature is
1614 deprecated--it is best to pass nil for INITIAL-INPUT and supply the
1615 default value DEF instead. The user can yank the default value into
ca347e3d 1616 the minibuffer easily using \\<minibuffer-local-map>\\[next-history-element].
6b61353c
KH
1617
1618HIST, if non-nil, specifies a history list and optionally the initial
1619 position in the list. It can be a symbol, which is the history list
1620 variable to use, or it can be a cons cell (HISTVAR . HISTPOS). In
1621 that case, HISTVAR is the history list variable to use, and HISTPOS
1622 is the initial position (the position in the list used by the
1623 minibuffer history commands). For consistency, you should also
1624 specify that element of the history as the value of
1fb101f3 1625 INITIAL-INPUT. (This is the only case in which you should use
6b61353c
KH
1626 INITIAL-INPUT instead of DEF.) Positions are counted starting from
1627 1 at the beginning of the list. The variable `history-length'
1628 controls the maximum length of a history list.
38668f81 1629
2e3148e2 1630DEF, if non-nil, is the default value or the list of default values.
a1f17501
PJ
1631
1632If INHERIT-INPUT-METHOD is non-nil, the minibuffer inherits
029a305c 1633 the current input method and the setting of `enable-multibyte-characters'.
a1f17501
PJ
1634
1635Completion ignores case if the ambient value of
3ec03f7e
LL
1636 `completion-ignore-case' is non-nil.
1637
1638See also `completing-read-function'. */)
1639 (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)
1640{
1641 Lisp_Object args[9];
4e323265 1642 args[0] = Fsymbol_value (intern ("completing-read-function"));
3ec03f7e
LL
1643 args[1] = prompt;
1644 args[2] = collection;
1645 args[3] = predicate;
1646 args[4] = require_match;
1647 args[5] = initial_input;
1648 args[6] = hist;
1649 args[7] = def;
1650 args[8] = inherit_input_method;
1651 return Ffuncall (9, args);
1652}
f927c5ae 1653\f
5d2ca7ae 1654/* Test whether TXT is an exact completion. */
695deb18
SM
1655DEFUN ("test-completion", Ftest_completion, Stest_completion, 2, 3, 0,
1656 doc: /* Return non-nil if STRING is a valid completion.
1657Takes the same arguments as `all-completions' and `try-completion'.
a284cdbb 1658If COLLECTION is a function, it is called with three arguments:
695deb18 1659the values STRING, PREDICATE and `lambda'. */)
5842a27b 1660 (Lisp_Object string, Lisp_Object collection, Lisp_Object predicate)
5d2ca7ae 1661{
6b61353c 1662 Lisp_Object regexps, tail, tem = Qnil;
d3411f89 1663 ptrdiff_t i = 0;
5d2ca7ae 1664
695deb18
SM
1665 CHECK_STRING (string);
1666
a1f03e89 1667 if (NILP (collection) || (CONSP (collection) && !FUNCTIONP (collection)))
695deb18 1668 {
a284cdbb 1669 tem = Fassoc_string (string, collection, completion_ignore_case ? Qt : Qnil);
9f4a578d 1670 if (NILP (tem))
695deb18
SM
1671 return Qnil;
1672 }
a284cdbb 1673 else if (VECTORP (collection))
5d2ca7ae 1674 {
695deb18 1675 /* Bypass intern-soft as that loses for nil. */
a284cdbb 1676 tem = oblookup (collection,
42a5b22f 1677 SSDATA (string),
d5db4077
KR
1678 SCHARS (string),
1679 SBYTES (string));
44472c88 1680 if (!SYMBOLP (tem))
9404446f 1681 {
695deb18
SM
1682 if (STRING_MULTIBYTE (string))
1683 string = Fstring_make_unibyte (string);
9404446f 1684 else
695deb18 1685 string = Fstring_make_multibyte (string);
9404446f 1686
a284cdbb 1687 tem = oblookup (collection,
42a5b22f 1688 SSDATA (string),
d5db4077
KR
1689 SCHARS (string),
1690 SBYTES (string));
9404446f 1691 }
6b61353c
KH
1692
1693 if (completion_ignore_case && !SYMBOLP (tem))
1694 {
77b37c05 1695 for (i = ASIZE (collection) - 1; i >= 0; i--)
6b61353c 1696 {
28be1ada 1697 tail = AREF (collection, i);
6b61353c
KH
1698 if (SYMBOLP (tail))
1699 while (1)
1700 {
fd6fa53f 1701 if (EQ (Fcompare_strings (string, make_number (0), Qnil,
6b61353c 1702 Fsymbol_name (tail),
fd6fa53f 1703 make_number (0) , Qnil, Qt),
6b61353c
KH
1704 Qt))
1705 {
1706 tem = tail;
1707 break;
1708 }
1709 if (XSYMBOL (tail)->next == 0)
1710 break;
1711 XSETSYMBOL (tail, XSYMBOL (tail)->next);
1712 }
1713 }
1714 }
1715
1716 if (!SYMBOLP (tem))
1717 return Qnil;
5d2ca7ae 1718 }
a284cdbb 1719 else if (HASH_TABLE_P (collection))
85cd4372 1720 {
a284cdbb 1721 struct Lisp_Hash_Table *h = XHASH_TABLE (collection);
a8036e40 1722 Lisp_Object key = Qnil;
9cc2810b 1723 i = hash_lookup (h, string, NULL);
85cd4372 1724 if (i >= 0)
6b61353c 1725 tem = HASH_KEY (h, i);
85cd4372 1726 else
6b61353c 1727 for (i = 0; i < HASH_TABLE_SIZE (h); ++i)
fd6fa53f 1728 if (!NILP (HASH_HASH (h, i))
a8036e40
SM
1729 && (key = HASH_KEY (h, i),
1730 SYMBOLP (key) ? key = Fsymbol_name (key) : key,
1731 STRINGP (key))
fd6fa53f 1732 && EQ (Fcompare_strings (string, make_number (0), Qnil,
a8036e40 1733 key, make_number (0) , Qnil,
fd6fa53f
SM
1734 completion_ignore_case ? Qt : Qnil),
1735 Qt))
6b61353c 1736 {
a8036e40 1737 tem = key;
6b61353c
KH
1738 break;
1739 }
1740 if (!STRINGP (tem))
85cd4372
SM
1741 return Qnil;
1742 }
5d2ca7ae 1743 else
a284cdbb 1744 return call3 (collection, string, predicate, Qlambda);
695deb18
SM
1745
1746 /* Reject this element if it fails to match all the regexps. */
77443789
AS
1747 if (CONSP (Vcompletion_regexp_list))
1748 {
d311d28c 1749 ptrdiff_t count = SPECPDL_INDEX ();
77443789
AS
1750 specbind (Qcase_fold_search, completion_ignore_case ? Qt : Qnil);
1751 for (regexps = Vcompletion_regexp_list; CONSP (regexps);
1752 regexps = XCDR (regexps))
1753 {
1754 if (NILP (Fstring_match (XCAR (regexps),
1755 SYMBOLP (tem) ? string : tem,
1756 Qnil)))
1757 return unbind_to (count, Qnil);
1758 }
1759 unbind_to (count, Qnil);
1760 }
695deb18
SM
1761
1762 /* Finally, check the predicate. */
1763 if (!NILP (predicate))
6b61353c 1764 {
a284cdbb
RS
1765 return HASH_TABLE_P (collection)
1766 ? call2 (predicate, tem, HASH_VALUE (XHASH_TABLE (collection), i))
6b61353c
KH
1767 : call1 (predicate, tem);
1768 }
695deb18
SM
1769 else
1770 return Qt;
5d2ca7ae 1771}
f927c5ae 1772
4b66faf3 1773static Lisp_Object Qmetadata;
620c53a6 1774
655ea21c
JD
1775DEFUN ("internal-complete-buffer", Finternal_complete_buffer, Sinternal_complete_buffer, 3, 3, 0,
1776 doc: /* Perform completion on buffer names.
c88b867f
CY
1777STRING and PREDICATE have the same meanings as in `try-completion',
1778`all-completions', and `test-completion'.
655ea21c 1779
c88b867f
CY
1780If FLAG is nil, invoke `try-completion'; if it is t, invoke
1781`all-completions'; otherwise invoke `test-completion'. */)
5842a27b 1782 (Lisp_Object string, Lisp_Object predicate, Lisp_Object flag)
655ea21c
JD
1783{
1784 if (NILP (flag))
1785 return Ftry_completion (string, Vbuffer_alist, predicate);
1786 else if (EQ (flag, Qt))
8c2dccbf 1787 {
73913e2e 1788 Lisp_Object res = Fall_completions (string, Vbuffer_alist, predicate, Qnil);
8c2dccbf
SM
1789 if (SCHARS (string) > 0)
1790 return res;
1791 else
1792 { /* Strip out internal buffers. */
1793 Lisp_Object bufs = res;
1794 /* First, look for a non-internal buffer in `res'. */
1795 while (CONSP (bufs) && SREF (XCAR (bufs), 0) == ' ')
1796 bufs = XCDR (bufs);
127827c0
SM
1797 if (NILP (bufs))
1798 return (EQ (Flength (res), Flength (Vbuffer_alist))
1799 /* If all bufs are internal don't strip them out. */
1800 ? res : bufs);
8c2dccbf
SM
1801 res = bufs;
1802 while (CONSP (XCDR (bufs)))
1803 if (SREF (XCAR (XCDR (bufs)), 0) == ' ')
1804 XSETCDR (bufs, XCDR (XCDR (bufs)));
1805 else
1806 bufs = XCDR (bufs);
1807 return res;
1808 }
1809 }
620c53a6 1810 else if (EQ (flag, Qlambda))
655ea21c 1811 return Ftest_completion (string, Vbuffer_alist, predicate);
620c53a6 1812 else if (EQ (flag, Qmetadata))
6c6f1994 1813 return list2 (Qmetadata, Fcons (Qcategory, Qbuffer));
620c53a6
SM
1814 else
1815 return Qnil;
655ea21c
JD
1816}
1817
52b14ac0
JB
1818/* Like assoc but assumes KEY is a string, and ignores case if appropriate. */
1819
a7ca3326 1820DEFUN ("assoc-string", Fassoc_string, Sassoc_string, 2, 3, 0,
d3fc66fb 1821 doc: /* Like `assoc' but specifically for strings (and symbols).
c6a82c18
CY
1822
1823This returns the first element of LIST whose car matches the string or
1824symbol KEY, or nil if no match exists. When performing the
1825comparison, symbols are first converted to strings, and unibyte
1826strings to multibyte. If the optional arg CASE-FOLD is non-nil, case
1827is ignored.
1828
1829Unlike `assoc', KEY can also match an entry in LIST consisting of a
1830single string, rather than a cons cell whose car is a string. */)
5842a27b 1831 (register Lisp_Object key, Lisp_Object list, Lisp_Object case_fold)
52b14ac0
JB
1832{
1833 register Lisp_Object tail;
1834
d3fc66fb
KS
1835 if (SYMBOLP (key))
1836 key = Fsymbol_name (key);
1837
99784d63 1838 for (tail = list; CONSP (tail); tail = XCDR (tail))
52b14ac0
JB
1839 {
1840 register Lisp_Object elt, tem, thiscar;
99784d63 1841 elt = XCAR (tail);
695deb18 1842 thiscar = CONSP (elt) ? XCAR (elt) : elt;
1954495f
KS
1843 if (SYMBOLP (thiscar))
1844 thiscar = Fsymbol_name (thiscar);
1845 else if (!STRINGP (thiscar))
52b14ac0 1846 continue;
9404446f
RS
1847 tem = Fcompare_strings (thiscar, make_number (0), Qnil,
1848 key, make_number (0), Qnil,
695deb18 1849 case_fold);
9404446f
RS
1850 if (EQ (tem, Qt))
1851 return elt;
52b14ac0
JB
1852 QUIT;
1853 }
1854 return Qnil;
1855}
f927c5ae 1856
e4c97a67 1857\f
f927c5ae 1858DEFUN ("minibuffer-depth", Fminibuffer_depth, Sminibuffer_depth, 0, 0, 0,
af52c32d 1859 doc: /* Return current depth of activations of minibuffer, a nonnegative integer. */)
5842a27b 1860 (void)
f927c5ae
JB
1861{
1862 return make_number (minibuf_level);
1863}
1864
37e9a934 1865DEFUN ("minibuffer-prompt", Fminibuffer_prompt, Sminibuffer_prompt, 0, 0, 0,
af52c32d
MB
1866 doc: /* Return the prompt string of the currently-active minibuffer.
1867If no minibuffer is active, return nil. */)
5842a27b 1868 (void)
37e9a934 1869{
4d04c1f1 1870 return Fcopy_sequence (minibuf_prompt);
37e9a934
KH
1871}
1872
f927c5ae 1873\f
9d815fd9 1874void
971de7fb 1875init_minibuf_once (void)
f927c5ae
JB
1876{
1877 Vminibuffer_list = Qnil;
1878 staticpro (&Vminibuffer_list);
1879}
1880
9d815fd9 1881void
971de7fb 1882syms_of_minibuf (void)
f927c5ae 1883{
fe6aa7a1
BT
1884#include "minibuf.x"
1885
f927c5ae 1886 minibuf_level = 0;
4d04c1f1
KH
1887 minibuf_prompt = Qnil;
1888 staticpro (&minibuf_prompt);
1889
1890 minibuf_save_list = Qnil;
1891 staticpro (&minibuf_save_list);
f927c5ae 1892
620c53a6
SM
1893 DEFSYM (Qcompletion_ignore_case, "completion-ignore-case");
1894 DEFSYM (Qread_file_name_internal, "read-file-name-internal");
1895 DEFSYM (Qminibuffer_default, "minibuffer-default");
e5d4686b
RS
1896 Fset (Qminibuffer_default, Qnil);
1897
620c53a6
SM
1898 DEFSYM (Qminibuffer_completion_table, "minibuffer-completion-table");
1899 DEFSYM (Qminibuffer_completion_confirm, "minibuffer-completion-confirm");
1900 DEFSYM (Qminibuffer_completion_predicate, "minibuffer-completion-predicate");
f927c5ae
JB
1901
1902 staticpro (&last_minibuf_string);
1903 last_minibuf_string = Qnil;
1904
620c53a6
SM
1905 DEFSYM (Qminibuffer_history, "minibuffer-history");
1906 DEFSYM (Qbuffer_name_history, "buffer-name-history");
33d0a17f 1907 Fset (Qbuffer_name_history, Qnil);
406e55df 1908
b4d3bc10 1909 DEFSYM (Qcustom_variable_p, "custom-variable-p");
620c53a6
SM
1910 DEFSYM (Qminibuffer_setup_hook, "minibuffer-setup-hook");
1911 DEFSYM (Qminibuffer_exit_hook, "minibuffer-exit-hook");
1912 DEFSYM (Qhistory_length, "history-length");
1913 DEFSYM (Qcurrent_input_method, "current-input-method");
1914 DEFSYM (Qactivate_input_method, "activate-input-method");
1915 DEFSYM (Qcase_fold_search, "case-fold-search");
1916 DEFSYM (Qmetadata, "metadata");
6b61353c 1917
c11136ec
GM
1918 DEFVAR_LISP ("read-expression-history", Vread_expression_history,
1919 doc: /* A history list for arguments that are Lisp expressions to evaluate.
1920For example, `eval-expression' uses this. */);
1921 Vread_expression_history = Qnil;
1922
620c53a6 1923 DEFSYM (Qread_expression_history, "read-expression-history");
627fb581 1924
29208e82 1925 DEFVAR_LISP ("read-buffer-function", Vread_buffer_function,
b4f588fa
JB
1926 doc: /* If this is non-nil, `read-buffer' does its work by calling this function.
1927The function is called with the arguments passed to `read-buffer'. */);
eebbfb01
KH
1928 Vread_buffer_function = Qnil;
1929
33df281c 1930 DEFVAR_BOOL ("read-buffer-completion-ignore-case",
29208e82 1931 read_buffer_completion_ignore_case,
cc0adcb0 1932 doc: /* Non-nil means completion ignores case when reading a buffer name. */);
33df281c
CY
1933 read_buffer_completion_ignore_case = 0;
1934
29208e82 1935 DEFVAR_LISP ("minibuffer-setup-hook", Vminibuffer_setup_hook,
af52c32d 1936 doc: /* Normal hook run just after entry to minibuffer. */);
5c781212
RS
1937 Vminibuffer_setup_hook = Qnil;
1938
29208e82 1939 DEFVAR_LISP ("minibuffer-exit-hook", Vminibuffer_exit_hook,
af52c32d 1940 doc: /* Normal hook run just after exit from minibuffer. */);
177aecf9
KH
1941 Vminibuffer_exit_hook = Qnil;
1942
29208e82 1943 DEFVAR_LISP ("history-length", Vhistory_length,
cc0adcb0
CY
1944 doc: /* Maximum length of history lists before truncation takes place.
1945A number means truncate to that length; truncation deletes old
1946elements, and is done just after inserting a new element.
1947A value of t means no truncation.
1948
1949This variable only affects history lists that don't specify their own
1950maximum lengths. Setting the `history-length' property of a history
1951variable overrides this default. */);
26e91130 1952 XSETFASTINT (Vhistory_length, 100);
77aa8edf 1953
29208e82 1954 DEFVAR_BOOL ("history-delete-duplicates", history_delete_duplicates,
cc0adcb0 1955 doc: /* Non-nil means to delete duplicates in history.
0da4d471 1956If set to t when adding a new history element, all previous identical
179a4ca7 1957elements are deleted from the history list. */);
0da4d471
JL
1958 history_delete_duplicates = 0;
1959
29208e82 1960 DEFVAR_LISP ("history-add-new-input", Vhistory_add_new_input,
cc0adcb0 1961 doc: /* Non-nil means to add new elements in history.
179a4ca7
JL
1962If set to nil, minibuffer reading functions don't add new elements to the
1963history list, so it is possible to do this afterwards by calling
1964`add-to-history' explicitly. */);
1965 Vhistory_add_new_input = Qt;
1966
29208e82 1967 DEFVAR_BOOL ("completion-ignore-case", completion_ignore_case,
75028673 1968 doc: /* Non-nil means don't consider case significant in completion.
f562df03
CY
1969For file-name completion, `read-file-name-completion-ignore-case'
1970controls the behavior, rather than this variable.
1971For buffer name completion, `read-buffer-completion-ignore-case'
d9a03ad2 1972controls the behavior, rather than this variable. */);
f927c5ae
JB
1973 completion_ignore_case = 0;
1974
29208e82 1975 DEFVAR_BOOL ("enable-recursive-minibuffers", enable_recursive_minibuffers,
cc0adcb0 1976 doc: /* Non-nil means to allow minibuffer commands while in the minibuffer.
a1f17501 1977This variable makes a difference whenever the minibuffer window is active. */);
f927c5ae
JB
1978 enable_recursive_minibuffers = 0;
1979
29208e82 1980 DEFVAR_LISP ("minibuffer-completion-table", Vminibuffer_completion_table,
af52c32d 1981 doc: /* Alist or obarray used for completion in the minibuffer.
6b61353c
KH
1982This becomes the ALIST argument to `try-completion' and `all-completions'.
1983The value can also be a list of strings or a hash table.
a1f17501
PJ
1984
1985The value may alternatively be a function, which is given three arguments:
1986 STRING, the current buffer contents;
1987 PREDICATE, the predicate for filtering possible matches;
1988 CODE, which says what kind of things to do.
b2ef9714
JB
1989CODE can be nil, t or `lambda':
1990 nil -- return the best completion of STRING, or nil if there is none.
1991 t -- return a list of all possible completions of STRING.
1992 lambda -- return t if STRING is a valid completion as it stands. */);
f927c5ae
JB
1993 Vminibuffer_completion_table = Qnil;
1994
29208e82 1995 DEFVAR_LISP ("minibuffer-completion-predicate", Vminibuffer_completion_predicate,
af52c32d 1996 doc: /* Within call to `completing-read', this holds the PREDICATE argument. */);
f927c5ae
JB
1997 Vminibuffer_completion_predicate = Qnil;
1998
29208e82 1999 DEFVAR_LISP ("minibuffer-completion-confirm", Vminibuffer_completion_confirm,
b47d0e56
CY
2000 doc: /* Whether to demand confirmation of completion before exiting minibuffer.
2001If nil, confirmation is not required.
2002If the value is `confirm', the user may exit with an input that is not
2003 a valid completion alternative, but Emacs asks for confirmation.
2004If the value is `confirm-after-completion', the user may exit with an
2005 input that is not a valid completion alternative, but Emacs asks for
1b79e224
CY
2006 confirmation if the user submitted the input right after any of the
2007 completion commands listed in `minibuffer-confirm-exit-commands'. */);
f927c5ae
JB
2008 Vminibuffer_completion_confirm = Qnil;
2009
ccf330a6 2010 DEFVAR_LISP ("minibuffer-completing-file-name",
29208e82 2011 Vminibuffer_completing_file_name,
6ddfc113 2012 doc: /* Non-nil means completing file names. */);
ccf330a6
RS
2013 Vminibuffer_completing_file_name = Qnil;
2014
29208e82 2015 DEFVAR_LISP ("minibuffer-help-form", Vminibuffer_help_form,
af52c32d 2016 doc: /* Value that `help-form' takes on inside the minibuffer. */);
f927c5ae
JB
2017 Vminibuffer_help_form = Qnil;
2018
29208e82 2019 DEFVAR_LISP ("minibuffer-history-variable", Vminibuffer_history_variable,
af52c32d 2020 doc: /* History list symbol to add minibuffer values to.
a1f17501
PJ
2021Each string of minibuffer input, as it appears on exit from the minibuffer,
2022is added with
2023 (set minibuffer-history-variable
2024 (cons STRING (symbol-value minibuffer-history-variable))) */);
5a866662 2025 XSETFASTINT (Vminibuffer_history_variable, 0);
770970cb 2026
29208e82 2027 DEFVAR_LISP ("minibuffer-history-position", Vminibuffer_history_position,
af52c32d 2028 doc: /* Current position of redoing in the history list. */);
770970cb
RS
2029 Vminibuffer_history_position = Qnil;
2030
29208e82 2031 DEFVAR_BOOL ("minibuffer-auto-raise", minibuffer_auto_raise,
cc0adcb0 2032 doc: /* Non-nil means entering the minibuffer raises the minibuffer's frame.
a1f17501 2033Some uses of the echo area also raise that frame (since they use it too). */);
6a9ee000
RS
2034 minibuffer_auto_raise = 0;
2035
29208e82 2036 DEFVAR_LISP ("completion-regexp-list", Vcompletion_regexp_list,
6b61353c
KH
2037 doc: /* List of regexps that should restrict possible completions.
2038The basic completion functions only consider a completion acceptable
2039if it matches all regular expressions in this list, with
2040`case-fold-search' bound to the value of `completion-ignore-case'.
2041See Info node `(elisp)Basic Completion', for a description of these
2042functions. */);
42006772
RS
2043 Vcompletion_regexp_list = Qnil;
2044
c3421833 2045 DEFVAR_BOOL ("minibuffer-allow-text-properties",
29208e82 2046 minibuffer_allow_text_properties,
af52c32d 2047 doc: /* Non-nil means `read-from-minibuffer' should not discard text properties.
a1f17501
PJ
2048This also affects `read-string', but it does not affect `read-minibuffer',
2049`read-no-blanks-input', or any of the functions that do minibuffer input
2050with completion; they always discard text properties. */);
c3421833
RS
2051 minibuffer_allow_text_properties = 0;
2052
29208e82 2053 DEFVAR_LISP ("minibuffer-prompt-properties", Vminibuffer_prompt_properties,
af52c32d 2054 doc: /* Text properties that are added to minibuffer prompts.
a1f17501
PJ
2055These are in addition to the basic `field' property, and stickiness
2056properties. */);
cc64f5c9
MB
2057 /* We use `intern' here instead of Qread_only to avoid
2058 initialization-order problems. */
6c6f1994 2059 Vminibuffer_prompt_properties = list2 (intern_c_string ("read-only"), Qt);
f927c5ae 2060}