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