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