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