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