(select_frame_norecord): New function.
[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))
914860c2
RS
190 Fset_frame_selected_window (frame, Fframe_first_window (frame));
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.
fd771ceb 1180If optional third arg REQUIRE-MATCH is non-nil,
97c3e4cc 1181 only existing buffer names are allowed.
33df281c
CY
1182The argument PROMPT should be a string ending with a colon and a space.
1183If `read-buffer-completion-ignore-case' is non-nil, completion ignores
1184case while reading the buffer name.
1185If `read-buffer-function' is non-nil, this works by calling it as a
1186function, instead of the usual behavior. */)
af52c32d 1187 (prompt, def, require_match)
f927c5ae
JB
1188 Lisp_Object prompt, def, require_match;
1189{
33df281c 1190 Lisp_Object args[4], result;
97c3e4cc
RF
1191 unsigned char *s;
1192 int len;
33df281c 1193 int count = SPECPDL_INDEX ();
9ab4a725 1194
7510b296 1195 if (BUFFERP (def))
f927c5ae 1196 def = XBUFFER (def)->name;
eebbfb01 1197
33df281c
CY
1198 specbind (Qcompletion_ignore_case,
1199 read_buffer_completion_ignore_case ? Qt : Qnil);
1200
eebbfb01
KH
1201 if (NILP (Vread_buffer_function))
1202 {
1203 if (!NILP (def))
1204 {
97c3e4cc
RF
1205 /* A default value was provided: we must change PROMPT,
1206 editing the default value in before the colon. To achieve
1207 this, we replace PROMPT with a substring that doesn't
1208 contain the terminal space and colon (if present). They
1209 are then added back using Fformat. */
1210
1211 if (STRINGP (prompt))
1212 {
1213 s = SDATA (prompt);
1214 len = strlen (s);
1215 if (len >= 2 && s[len - 2] == ':' && s[len - 1] == ' ')
1216 len = len - 2;
1217 else if (len >= 1 && (s[len - 1] == ':' || s[len - 1] == ' '))
1218 len--;
1219
1220 prompt = make_specified_string (s, -1, len,
1221 STRING_MULTIBYTE (prompt));
1222 }
1223
1224 args[0] = build_string ("%s (default %s): ");
eebbfb01 1225 args[1] = prompt;
fb30dfd2 1226 args[2] = CONSP (def) ? XCAR (def) : def;
eebbfb01
KH
1227 prompt = Fformat (3, args);
1228 }
1229
33df281c
CY
1230 result = Fcompleting_read (prompt, intern ("internal-complete-buffer"),
1231 Qnil, require_match, Qnil, Qbuffer_name_history,
1232 def, Qnil);
eebbfb01
KH
1233 }
1234 else
f927c5ae 1235 {
eebbfb01 1236 args[0] = Vread_buffer_function;
f927c5ae
JB
1237 args[1] = prompt;
1238 args[2] = def;
eebbfb01 1239 args[3] = require_match;
33df281c 1240 result = Ffuncall(4, args);
f927c5ae 1241 }
33df281c 1242 return unbind_to (count, result);
f927c5ae
JB
1243}
1244\f
ec067ec7
RS
1245static Lisp_Object
1246minibuf_conform_representation (string, basis)
1247 Lisp_Object string, basis;
1248{
1249 if (STRING_MULTIBYTE (string) == STRING_MULTIBYTE (basis))
1250 return string;
1251
1252 if (STRING_MULTIBYTE (string))
1253 return Fstring_make_unibyte (string);
1254 else
1255 return Fstring_make_multibyte (string);
1256}
1257
f927c5ae 1258DEFUN ("try-completion", Ftry_completion, Stry_completion, 2, 3, 0,
a284cdbb
RS
1259 doc: /* Return common substring of all completions of STRING in COLLECTION.
1260Test each possible completion specified by COLLECTION
1261to see if it begins with STRING. The possible completions may be
3809648a
KS
1262strings or symbols. Symbols are converted to strings before testing,
1263see `symbol-name'.
a284cdbb
RS
1264All that match STRING are compared together; the longest initial sequence
1265common to all these matches is the return value.
1266If there is no match at all, the return value is nil.
1267For a unique match which is exact, the return value is t.
1268
1269If COLLECTION is an alist, the keys (cars of elements) are the
1270possible completions. If an element is not a cons cell, then the
1271element itself is the possible completion.
1272If COLLECTION is a hash-table, all the keys that are strings or symbols
1273are the possible completions.
1274If COLLECTION is an obarray, the names of all symbols in the obarray
1275are the possible completions.
1276
1277COLLECTION can also be a function to do the completion itself.
a1f17501
PJ
1278It receives three arguments: the values STRING, PREDICATE and nil.
1279Whatever it returns becomes the value of `try-completion'.
1280
1281If optional third argument PREDICATE is non-nil,
1282it is used to test each possible match.
1283The match is a candidate only if PREDICATE returns non-nil.
1284The argument given to PREDICATE is the alist element
a284cdbb 1285or the symbol from the obarray. If COLLECTION is a hash-table,
85cd4372 1286predicate is called with two arguments: the key and the value.
a1f17501 1287Additionally to this predicate, `completion-regexp-list'
af52c32d 1288is used to further constrain the set of candidates. */)
a284cdbb
RS
1289 (string, collection, predicate)
1290 Lisp_Object string, collection, predicate;
f927c5ae
JB
1291{
1292 Lisp_Object bestmatch, tail, elt, eltstring;
af2b7cd5 1293 /* Size in bytes of BESTMATCH. */
6bbd7a29 1294 int bestmatchsize = 0;
af2b7cd5 1295 /* These are in bytes, too. */
f927c5ae 1296 int compare, matchsize;
f6d4c7a4
RS
1297 enum { function_table, list_table, obarray_table, hash_table}
1298 type = (HASH_TABLE_P (collection) ? hash_table
1299 : VECTORP (collection) ? obarray_table
1300 : ((NILP (collection)
1301 || (CONSP (collection)
1302 && (!SYMBOLP (XCAR (collection))
1303 || NILP (XCAR (collection)))))
1304 ? list_table : function_table));
6bbd7a29 1305 int index = 0, obsize = 0;
f927c5ae 1306 int matchcount = 0;
acd81db9 1307 int bindcount = -1;
f927c5ae
JB
1308 Lisp_Object bucket, zero, end, tem;
1309 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
1310
b7826503 1311 CHECK_STRING (string);
f6d4c7a4 1312 if (type == function_table)
a284cdbb 1313 return call3 (collection, string, predicate, Qnil);
f927c5ae 1314
6bbd7a29 1315 bestmatch = bucket = Qnil;
c8ae863b 1316 zero = make_number (0);
f927c5ae 1317
a284cdbb
RS
1318 /* If COLLECTION is not a list, set TAIL just for gc pro. */
1319 tail = collection;
f6d4c7a4 1320 if (type == obarray_table)
f927c5ae 1321 {
a284cdbb
RS
1322 collection = check_obarray (collection);
1323 obsize = XVECTOR (collection)->size;
1324 bucket = XVECTOR (collection)->contents[index];
f927c5ae
JB
1325 }
1326
1327 while (1)
1328 {
85cd4372 1329 /* Get the next element of the alist, obarray, or hash-table. */
f927c5ae
JB
1330 /* Exit the loop if the elements are all used up. */
1331 /* elt gets the alist element or symbol.
1332 eltstring gets the name to check as a completion. */
1333
f6d4c7a4 1334 if (type == list_table)
f927c5ae 1335 {
695deb18 1336 if (!CONSP (tail))
f927c5ae 1337 break;
695deb18
SM
1338 elt = XCAR (tail);
1339 eltstring = CONSP (elt) ? XCAR (elt) : elt;
1340 tail = XCDR (tail);
f927c5ae 1341 }
f6d4c7a4 1342 else if (type == obarray_table)
f927c5ae 1343 {
c8ae863b 1344 if (!EQ (bucket, zero))
f927c5ae 1345 {
9b6b374a
JB
1346 if (!SYMBOLP (bucket))
1347 error ("Bad data in guts of obarray");
f927c5ae 1348 elt = bucket;
3809648a 1349 eltstring = elt;
f927c5ae
JB
1350 if (XSYMBOL (bucket)->next)
1351 XSETSYMBOL (bucket, XSYMBOL (bucket)->next);
1352 else
5a866662 1353 XSETFASTINT (bucket, 0);
f927c5ae
JB
1354 }
1355 else if (++index >= obsize)
1356 break;
1357 else
1358 {
a284cdbb 1359 bucket = XVECTOR (collection)->contents[index];
f927c5ae
JB
1360 continue;
1361 }
1362 }
f6d4c7a4 1363 else /* if (type == hash_table) */
85cd4372 1364 {
a284cdbb
RS
1365 while (index < HASH_TABLE_SIZE (XHASH_TABLE (collection))
1366 && NILP (HASH_HASH (XHASH_TABLE (collection), index)))
85cd4372 1367 index++;
a284cdbb 1368 if (index >= HASH_TABLE_SIZE (XHASH_TABLE (collection)))
85cd4372
SM
1369 break;
1370 else
a284cdbb 1371 elt = eltstring = HASH_KEY (XHASH_TABLE (collection), index++);
85cd4372 1372 }
f927c5ae
JB
1373
1374 /* Is this element a possible completion? */
1375
3809648a
KS
1376 if (SYMBOLP (eltstring))
1377 eltstring = Fsymbol_name (eltstring);
1378
7510b296 1379 if (STRINGP (eltstring)
d5db4077 1380 && SCHARS (string) <= SCHARS (eltstring)
c8ae863b 1381 && (tem = Fcompare_strings (eltstring, zero,
d5db4077 1382 make_number (SCHARS (string)),
c8ae863b 1383 string, zero, Qnil,
6b61353c 1384 completion_ignore_case ? Qt : Qnil),
69f4ef20 1385 EQ (Qt, tem)))
f927c5ae
JB
1386 {
1387 /* Yes. */
42006772 1388 Lisp_Object regexps;
42006772
RS
1389
1390 /* Ignore this element if it fails to match all the regexps. */
6b61353c 1391 {
6b61353c
KH
1392 for (regexps = Vcompletion_regexp_list; CONSP (regexps);
1393 regexps = XCDR (regexps))
1394 {
acd81db9
DK
1395 if (bindcount < 0) {
1396 bindcount = SPECPDL_INDEX ();
1397 specbind (Qcase_fold_search,
1398 completion_ignore_case ? Qt : Qnil);
77443789 1399 }
6b61353c
KH
1400 tem = Fstring_match (XCAR (regexps), eltstring, zero);
1401 if (NILP (tem))
1402 break;
1403 }
6b61353c
KH
1404 if (CONSP (regexps))
1405 continue;
1406 }
42006772 1407
f927c5ae
JB
1408 /* Ignore this element if there is a predicate
1409 and the predicate doesn't like it. */
1410
7efd36fc 1411 if (!NILP (predicate))
f927c5ae 1412 {
7efd36fc 1413 if (EQ (predicate, Qcommandp))
c837f4f9 1414 tem = Fcommandp (elt, Qnil);
f927c5ae
JB
1415 else
1416 {
f6d4c7a4
RS
1417 if (bindcount >= 0)
1418 {
1419 unbind_to (bindcount, Qnil);
1420 bindcount = -1;
1421 }
f927c5ae 1422 GCPRO4 (tail, string, eltstring, bestmatch);
f6d4c7a4
RS
1423 tem = (type == hash_table
1424 ? call2 (predicate, elt,
1425 HASH_VALUE (XHASH_TABLE (collection),
1426 index - 1))
1427 : call1 (predicate, elt));
f927c5ae
JB
1428 UNGCPRO;
1429 }
56a98455 1430 if (NILP (tem)) continue;
f927c5ae
JB
1431 }
1432
1433 /* Update computation of how much all possible completions match */
1434
56a98455 1435 if (NILP (bestmatch))
af2b7cd5 1436 {
85cd4372 1437 matchcount = 1;
af2b7cd5 1438 bestmatch = eltstring;
d5db4077 1439 bestmatchsize = SCHARS (eltstring);
af2b7cd5 1440 }
f927c5ae
JB
1441 else
1442 {
d5db4077 1443 compare = min (bestmatchsize, SCHARS (eltstring));
c8ae863b 1444 tem = Fcompare_strings (bestmatch, zero,
69f4ef20 1445 make_number (compare),
c8ae863b 1446 eltstring, zero,
69f4ef20
RS
1447 make_number (compare),
1448 completion_ignore_case ? Qt : Qnil);
1449 if (EQ (tem, Qt))
1450 matchsize = compare;
1451 else if (XINT (tem) < 0)
1452 matchsize = - XINT (tem) - 1;
1453 else
1454 matchsize = XINT (tem) - 1;
1455
52b14ac0
JB
1456 if (completion_ignore_case)
1457 {
1458 /* If this is an exact match except for case,
1459 use it as the best match rather than one that is not an
1460 exact match. This way, we get the case pattern
1461 of the actual match. */
d5db4077
KR
1462 if ((matchsize == SCHARS (eltstring)
1463 && matchsize < SCHARS (bestmatch))
52b14ac0
JB
1464 ||
1465 /* If there is more than one exact match ignoring case,
1466 and one of them is exact including case,
1467 prefer that one. */
1468 /* If there is no exact match ignoring case,
1469 prefer a match that does not change the case
1470 of the input. */
d5db4077 1471 ((matchsize == SCHARS (eltstring))
52b14ac0 1472 ==
d5db4077 1473 (matchsize == SCHARS (bestmatch))
c8ae863b 1474 && (tem = Fcompare_strings (eltstring, zero,
d5db4077 1475 make_number (SCHARS (string)),
c8ae863b 1476 string, zero,
69f4ef20
RS
1477 Qnil,
1478 Qnil),
1479 EQ (Qt, tem))
c8ae863b 1480 && (tem = Fcompare_strings (bestmatch, zero,
d5db4077 1481 make_number (SCHARS (string)),
c8ae863b 1482 string, zero,
69f4ef20
RS
1483 Qnil,
1484 Qnil),
1485 ! EQ (Qt, tem))))
52b14ac0
JB
1486 bestmatch = eltstring;
1487 }
d5db4077 1488 if (bestmatchsize != SCHARS (eltstring)
85cd4372
SM
1489 || bestmatchsize != matchsize)
1490 /* Don't count the same string multiple times. */
1491 matchcount++;
52b14ac0 1492 bestmatchsize = matchsize;
d5db4077 1493 if (matchsize <= SCHARS (string)
78893e05
CY
1494 /* If completion-ignore-case is non-nil, don't
1495 short-circuit because we want to find the best
1496 possible match *including* case differences. */
1497 && !completion_ignore_case
695deb18
SM
1498 && matchcount > 1)
1499 /* No need to look any further. */
1500 break;
f927c5ae
JB
1501 }
1502 }
1503 }
1504
acd81db9
DK
1505 if (bindcount >= 0) {
1506 unbind_to (bindcount, Qnil);
1507 bindcount = -1;
1508 }
1509
56a98455 1510 if (NILP (bestmatch))
f927c5ae 1511 return Qnil; /* No completions found */
52b14ac0
JB
1512 /* If we are ignoring case, and there is no exact match,
1513 and no additional text was supplied,
1514 don't change the case of what the user typed. */
d5db4077
KR
1515 if (completion_ignore_case && bestmatchsize == SCHARS (string)
1516 && SCHARS (bestmatch) > bestmatchsize)
ec067ec7 1517 return minibuf_conform_representation (string, bestmatch);
52b14ac0
JB
1518
1519 /* Return t if the supplied string is an exact match (counting case);
1520 it does not require any change to be made. */
928b5acc 1521 if (matchcount == 1 && !NILP (Fequal (bestmatch, string)))
f927c5ae
JB
1522 return Qt;
1523
5a866662
KH
1524 XSETFASTINT (zero, 0); /* Else extract the part in which */
1525 XSETFASTINT (end, bestmatchsize); /* all completions agree */
f927c5ae
JB
1526 return Fsubstring (bestmatch, zero, end);
1527}
f927c5ae 1528\f
89a255dc 1529DEFUN ("all-completions", Fall_completions, Sall_completions, 2, 4, 0,
a284cdbb
RS
1530 doc: /* Search for partial matches to STRING in COLLECTION.
1531Test each of the possible completions specified by COLLECTION
1532to see if it begins with STRING. The possible completions may be
3809648a
KS
1533strings or symbols. Symbols are converted to strings before testing,
1534see `symbol-name'.
a284cdbb 1535The value is a list of all the possible completions that match STRING.
a1f17501 1536
a284cdbb
RS
1537If COLLECTION is an alist, the keys (cars of elements) are the
1538possible completions. If an element is not a cons cell, then the
1539element itself is the possible completion.
1540If COLLECTION is a hash-table, all the keys that are strings or symbols
1541are the possible completions.
1542If COLLECTION is an obarray, the names of all symbols in the obarray
1543are the possible completions.
a1f17501 1544
a284cdbb 1545COLLECTION can also be a function to do the completion itself.
a1f17501
PJ
1546It receives three arguments: the values STRING, PREDICATE and t.
1547Whatever it returns becomes the value of `all-completions'.
1548
1549If optional third argument PREDICATE is non-nil,
1550it is used to test each possible match.
1551The match is a candidate only if PREDICATE returns non-nil.
1552The argument given to PREDICATE is the alist element
a284cdbb 1553or the symbol from the obarray. If COLLECTION is a hash-table,
85cd4372 1554predicate is called with two arguments: the key and the value.
a1f17501
PJ
1555Additionally to this predicate, `completion-regexp-list'
1556is used to further constrain the set of candidates.
1557
1558If the optional fourth argument HIDE-SPACES is non-nil,
a284cdbb 1559strings in COLLECTION that start with a space
af52c32d 1560are ignored unless STRING itself starts with a space. */)
a284cdbb
RS
1561 (string, collection, predicate, hide_spaces)
1562 Lisp_Object string, collection, predicate, hide_spaces;
f927c5ae
JB
1563{
1564 Lisp_Object tail, elt, eltstring;
1565 Lisp_Object allmatches;
a284cdbb
RS
1566 int type = HASH_TABLE_P (collection) ? 3
1567 : VECTORP (collection) ? 2
1568 : NILP (collection) || (CONSP (collection)
1569 && (!SYMBOLP (XCAR (collection))
1570 || NILP (XCAR (collection))));
6bbd7a29 1571 int index = 0, obsize = 0;
acd81db9 1572 int bindcount = -1;
c8ae863b 1573 Lisp_Object bucket, tem, zero;
f927c5ae
JB
1574 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
1575
b7826503 1576 CHECK_STRING (string);
85cd4372 1577 if (type == 0)
a284cdbb 1578 return call3 (collection, string, predicate, Qt);
6bbd7a29 1579 allmatches = bucket = Qnil;
c8ae863b 1580 zero = make_number (0);
f927c5ae 1581
a284cdbb
RS
1582 /* If COLLECTION is not a list, set TAIL just for gc pro. */
1583 tail = collection;
85cd4372 1584 if (type == 2)
f927c5ae 1585 {
a284cdbb
RS
1586 obsize = XVECTOR (collection)->size;
1587 bucket = XVECTOR (collection)->contents[index];
f927c5ae
JB
1588 }
1589
1590 while (1)
1591 {
85cd4372 1592 /* Get the next element of the alist, obarray, or hash-table. */
f927c5ae
JB
1593 /* Exit the loop if the elements are all used up. */
1594 /* elt gets the alist element or symbol.
1595 eltstring gets the name to check as a completion. */
1596
85cd4372 1597 if (type == 1)
f927c5ae 1598 {
695deb18 1599 if (!CONSP (tail))
f927c5ae 1600 break;
695deb18
SM
1601 elt = XCAR (tail);
1602 eltstring = CONSP (elt) ? XCAR (elt) : elt;
1603 tail = XCDR (tail);
f927c5ae 1604 }
85cd4372 1605 else if (type == 2)
f927c5ae 1606 {
c8ae863b 1607 if (!EQ (bucket, zero))
f927c5ae
JB
1608 {
1609 elt = bucket;
3809648a 1610 eltstring = elt;
f927c5ae
JB
1611 if (XSYMBOL (bucket)->next)
1612 XSETSYMBOL (bucket, XSYMBOL (bucket)->next);
1613 else
5a866662 1614 XSETFASTINT (bucket, 0);
f927c5ae
JB
1615 }
1616 else if (++index >= obsize)
1617 break;
1618 else
1619 {
a284cdbb 1620 bucket = XVECTOR (collection)->contents[index];
f927c5ae
JB
1621 continue;
1622 }
1623 }
85cd4372
SM
1624 else /* if (type == 3) */
1625 {
a284cdbb
RS
1626 while (index < HASH_TABLE_SIZE (XHASH_TABLE (collection))
1627 && NILP (HASH_HASH (XHASH_TABLE (collection), index)))
85cd4372 1628 index++;
a284cdbb 1629 if (index >= HASH_TABLE_SIZE (XHASH_TABLE (collection)))
85cd4372
SM
1630 break;
1631 else
a284cdbb 1632 elt = eltstring = HASH_KEY (XHASH_TABLE (collection), index++);
85cd4372 1633 }
f927c5ae
JB
1634
1635 /* Is this element a possible completion? */
1636
3809648a
KS
1637 if (SYMBOLP (eltstring))
1638 eltstring = Fsymbol_name (eltstring);
1639
7510b296 1640 if (STRINGP (eltstring)
d5db4077 1641 && SCHARS (string) <= SCHARS (eltstring)
89a255dc 1642 /* If HIDE_SPACES, reject alternatives that start with space
2cbaf886 1643 unless the input starts with space. */
d5db4077
KR
1644 && ((SBYTES (string) > 0
1645 && SREF (string, 0) == ' ')
1646 || SREF (eltstring, 0) != ' '
89a255dc 1647 || NILP (hide_spaces))
c8ae863b 1648 && (tem = Fcompare_strings (eltstring, zero,
d5db4077 1649 make_number (SCHARS (string)),
c8ae863b 1650 string, zero,
d5db4077 1651 make_number (SCHARS (string)),
69f4ef20
RS
1652 completion_ignore_case ? Qt : Qnil),
1653 EQ (Qt, tem)))
f927c5ae
JB
1654 {
1655 /* Yes. */
42006772
RS
1656 Lisp_Object regexps;
1657 Lisp_Object zero;
5a866662 1658 XSETFASTINT (zero, 0);
42006772
RS
1659
1660 /* Ignore this element if it fails to match all the regexps. */
6b61353c 1661 {
6b61353c
KH
1662 for (regexps = Vcompletion_regexp_list; CONSP (regexps);
1663 regexps = XCDR (regexps))
1664 {
acd81db9
DK
1665 if (bindcount < 0) {
1666 bindcount = SPECPDL_INDEX ();
1667 specbind (Qcase_fold_search,
1668 completion_ignore_case ? Qt : Qnil);
77443789 1669 }
6b61353c
KH
1670 tem = Fstring_match (XCAR (regexps), eltstring, zero);
1671 if (NILP (tem))
1672 break;
1673 }
6b61353c
KH
1674 if (CONSP (regexps))
1675 continue;
1676 }
42006772 1677
f927c5ae
JB
1678 /* Ignore this element if there is a predicate
1679 and the predicate doesn't like it. */
1680
7efd36fc 1681 if (!NILP (predicate))
f927c5ae 1682 {
7efd36fc 1683 if (EQ (predicate, Qcommandp))
c837f4f9 1684 tem = Fcommandp (elt, Qnil);
f927c5ae
JB
1685 else
1686 {
acd81db9
DK
1687 if (bindcount >= 0) {
1688 unbind_to (bindcount, Qnil);
1689 bindcount = -1;
1690 }
f927c5ae 1691 GCPRO4 (tail, eltstring, allmatches, string);
85cd4372
SM
1692 tem = type == 3
1693 ? call2 (predicate, elt,
a284cdbb 1694 HASH_VALUE (XHASH_TABLE (collection), index - 1))
85cd4372 1695 : call1 (predicate, elt);
f927c5ae
JB
1696 UNGCPRO;
1697 }
56a98455 1698 if (NILP (tem)) continue;
f927c5ae
JB
1699 }
1700 /* Ok => put it on the list. */
1701 allmatches = Fcons (eltstring, allmatches);
1702 }
1703 }
1704
acd81db9
DK
1705 if (bindcount >= 0) {
1706 unbind_to (bindcount, Qnil);
1707 bindcount = -1;
1708 }
1709
f927c5ae
JB
1710 return Fnreverse (allmatches);
1711}
1712\f
cee54539 1713DEFUN ("completing-read", Fcompleting_read, Scompleting_read, 2, 8, 0,
af52c32d 1714 doc: /* Read a string in the minibuffer, with completion.
a1f17501 1715PROMPT is a string to prompt with; normally it ends in a colon and a space.
a284cdbb
RS
1716COLLECTION can be a list of strings, an alist, an obarray or a hash table.
1717COLLECTION can also be a function to do the completion itself.
1718PREDICATE limits completion to a subset of COLLECTION.
a1f17501 1719See `try-completion' and `all-completions' for more details
a284cdbb 1720 on completion, COLLECTION, and PREDICATE.
a1f17501 1721
4d02fc25
SM
1722REQUIRE-MATCH can take the following values:
1723- t means that the user is not allowed to exit unless
1724 the input is (or completes to) an element of COLLECTION or is null.
1725- nil means that the user can exit with any input.
1726- `confirm-only' means that the user can exit with any input, but she will
1727 need to confirm her choice if the input is not an element of COLLECTION.
1728- anything else behaves like t except that typing RET does not exit if it
1729 does non-null completion.
1730
2e3148e2
JL
1731If the input is null, `completing-read' returns DEF, or the first element
1732of the list of default values, or an empty string if DEF is nil,
1733regardless of the value of REQUIRE-MATCH.
6b61353c
KH
1734
1735If INITIAL-INPUT is non-nil, insert it in the minibuffer initially,
1736 with point positioned at the end.
1737 If it is (STRING . POSITION), the initial input is STRING, but point
1738 is placed at _zero-indexed_ position POSITION in STRING. (*Note*
1739 that this is different from `read-from-minibuffer' and related
1740 functions, which use one-indexing for POSITION.) This feature is
1741 deprecated--it is best to pass nil for INITIAL-INPUT and supply the
1742 default value DEF instead. The user can yank the default value into
1743 the minibuffer easily using \\[next-history-element].
1744
1745HIST, if non-nil, specifies a history list and optionally the initial
1746 position in the list. It can be a symbol, which is the history list
1747 variable to use, or it can be a cons cell (HISTVAR . HISTPOS). In
1748 that case, HISTVAR is the history list variable to use, and HISTPOS
1749 is the initial position (the position in the list used by the
1750 minibuffer history commands). For consistency, you should also
1751 specify that element of the history as the value of
1fb101f3 1752 INITIAL-INPUT. (This is the only case in which you should use
6b61353c
KH
1753 INITIAL-INPUT instead of DEF.) Positions are counted starting from
1754 1 at the beginning of the list. The variable `history-length'
1755 controls the maximum length of a history list.
38668f81 1756
2e3148e2 1757DEF, if non-nil, is the default value or the list of default values.
a1f17501
PJ
1758
1759If INHERIT-INPUT-METHOD is non-nil, the minibuffer inherits
029a305c 1760 the current input method and the setting of `enable-multibyte-characters'.
a1f17501
PJ
1761
1762Completion ignores case if the ambient value of
af52c32d 1763 `completion-ignore-case' is non-nil. */)
a284cdbb
RS
1764 (prompt, collection, predicate, require_match, initial_input, hist, def, inherit_input_method)
1765 Lisp_Object prompt, collection, predicate, require_match, initial_input;
d43f85c2 1766 Lisp_Object hist, def, inherit_input_method;
f927c5ae 1767{
770970cb 1768 Lisp_Object val, histvar, histpos, position;
d43f85c2 1769 Lisp_Object init;
770970cb 1770 int pos = 0;
aed13378 1771 int count = SPECPDL_INDEX ();
0c8ee1a2
RS
1772 struct gcpro gcpro1;
1773
d43f85c2 1774 init = initial_input;
0c8ee1a2
RS
1775 GCPRO1 (def);
1776
a284cdbb 1777 specbind (Qminibuffer_completion_table, collection);
7efd36fc 1778 specbind (Qminibuffer_completion_predicate, predicate);
f927c5ae 1779 specbind (Qminibuffer_completion_confirm,
695deb18 1780 EQ (require_match, Qt) ? Qnil : require_match);
770970cb
RS
1781
1782 position = Qnil;
1783 if (!NILP (init))
1784 {
7510b296 1785 if (CONSP (init))
770970cb
RS
1786 {
1787 position = Fcdr (init);
1788 init = Fcar (init);
1789 }
b7826503 1790 CHECK_STRING (init);
770970cb
RS
1791 if (!NILP (position))
1792 {
b7826503 1793 CHECK_NUMBER (position);
770970cb 1794 /* Convert to distance from end of input. */
d5db4077 1795 pos = XINT (position) - SCHARS (init);
770970cb
RS
1796 }
1797 }
1798
7510b296 1799 if (SYMBOLP (hist))
770970cb
RS
1800 {
1801 histvar = hist;
1802 histpos = Qnil;
1803 }
1804 else
1805 {
1806 histvar = Fcar_safe (hist);
1807 histpos = Fcdr_safe (hist);
1808 }
1809 if (NILP (histvar))
1810 histvar = Qminibuffer_history;
1811 if (NILP (histpos))
5a866662 1812 XSETFASTINT (histpos, 0);
770970cb 1813
56a98455 1814 val = read_minibuf (NILP (require_match)
bb0bdf70 1815 ? (NILP (Vminibuffer_completing_file_name)
ef72eaff 1816 || EQ (Vminibuffer_completing_file_name, Qlambda)
bb0bdf70
EZ
1817 ? Vminibuffer_local_completion_map
1818 : Vminibuffer_local_filename_completion_map)
1819 : (NILP (Vminibuffer_completing_file_name)
ef72eaff 1820 || EQ (Vminibuffer_completing_file_name, Qlambda)
bb0bdf70 1821 ? Vminibuffer_local_must_match_map
8ba31f36 1822 : Vminibuffer_local_filename_must_match_map),
85b5fe07 1823 init, prompt, make_number (pos), 0,
cee54539 1824 histvar, histpos, def, 0,
b35cd215 1825 !NILP (inherit_input_method));
b9a86585 1826
d5db4077 1827 if (STRINGP (val) && SCHARS (val) == 0 && ! NILP (def))
fb30dfd2 1828 val = CONSP (def) ? XCAR (def) : def;
b9a86585 1829
0c8ee1a2 1830 RETURN_UNGCPRO (unbind_to (count, val));
f927c5ae
JB
1831}
1832\f
695deb18 1833Lisp_Object Fassoc_string ();
5d2ca7ae
RS
1834
1835/* Test whether TXT is an exact completion. */
695deb18
SM
1836DEFUN ("test-completion", Ftest_completion, Stest_completion, 2, 3, 0,
1837 doc: /* Return non-nil if STRING is a valid completion.
1838Takes the same arguments as `all-completions' and `try-completion'.
a284cdbb 1839If COLLECTION is a function, it is called with three arguments:
695deb18 1840the values STRING, PREDICATE and `lambda'. */)
a284cdbb
RS
1841 (string, collection, predicate)
1842 Lisp_Object string, collection, predicate;
5d2ca7ae 1843{
6b61353c 1844 Lisp_Object regexps, tail, tem = Qnil;
85cd4372 1845 int i = 0;
5d2ca7ae 1846
695deb18
SM
1847 CHECK_STRING (string);
1848
a284cdbb
RS
1849 if ((CONSP (collection)
1850 && (!SYMBOLP (XCAR (collection)) || NILP (XCAR (collection))))
1851 || NILP (collection))
695deb18 1852 {
a284cdbb 1853 tem = Fassoc_string (string, collection, completion_ignore_case ? Qt : Qnil);
9f4a578d 1854 if (NILP (tem))
695deb18
SM
1855 return Qnil;
1856 }
a284cdbb 1857 else if (VECTORP (collection))
5d2ca7ae 1858 {
695deb18 1859 /* Bypass intern-soft as that loses for nil. */
a284cdbb 1860 tem = oblookup (collection,
d5db4077
KR
1861 SDATA (string),
1862 SCHARS (string),
1863 SBYTES (string));
44472c88 1864 if (!SYMBOLP (tem))
9404446f 1865 {
695deb18
SM
1866 if (STRING_MULTIBYTE (string))
1867 string = Fstring_make_unibyte (string);
9404446f 1868 else
695deb18 1869 string = Fstring_make_multibyte (string);
9404446f 1870
a284cdbb 1871 tem = oblookup (collection,
d5db4077
KR
1872 SDATA (string),
1873 SCHARS (string),
1874 SBYTES (string));
9404446f 1875 }
6b61353c
KH
1876
1877 if (completion_ignore_case && !SYMBOLP (tem))
1878 {
a284cdbb 1879 for (i = XVECTOR (collection)->size - 1; i >= 0; i--)
6b61353c 1880 {
a284cdbb 1881 tail = XVECTOR (collection)->contents[i];
6b61353c
KH
1882 if (SYMBOLP (tail))
1883 while (1)
1884 {
1885 if (EQ((Fcompare_strings (string, make_number (0), Qnil,
1886 Fsymbol_name (tail),
1887 make_number (0) , Qnil, Qt)),
1888 Qt))
1889 {
1890 tem = tail;
1891 break;
1892 }
1893 if (XSYMBOL (tail)->next == 0)
1894 break;
1895 XSETSYMBOL (tail, XSYMBOL (tail)->next);
1896 }
1897 }
1898 }
1899
1900 if (!SYMBOLP (tem))
1901 return Qnil;
5d2ca7ae 1902 }
a284cdbb 1903 else if (HASH_TABLE_P (collection))
85cd4372 1904 {
a284cdbb 1905 struct Lisp_Hash_Table *h = XHASH_TABLE (collection);
6b61353c 1906 i = hash_lookup (h, string, NULL);
85cd4372 1907 if (i >= 0)
6b61353c 1908 tem = HASH_KEY (h, i);
85cd4372 1909 else
6b61353c
KH
1910 for (i = 0; i < HASH_TABLE_SIZE (h); ++i)
1911 if (!NILP (HASH_HASH (h, i)) &&
1912 EQ (Fcompare_strings (string, make_number (0), Qnil,
1913 HASH_KEY (h, i), make_number (0) , Qnil,
1914 completion_ignore_case ? Qt : Qnil),
1915 Qt))
1916 {
1917 tem = HASH_KEY (h, i);
1918 break;
1919 }
1920 if (!STRINGP (tem))
85cd4372
SM
1921 return Qnil;
1922 }
5d2ca7ae 1923 else
a284cdbb 1924 return call3 (collection, string, predicate, Qlambda);
695deb18
SM
1925
1926 /* Reject this element if it fails to match all the regexps. */
77443789
AS
1927 if (CONSP (Vcompletion_regexp_list))
1928 {
1929 int count = SPECPDL_INDEX ();
1930 specbind (Qcase_fold_search, completion_ignore_case ? Qt : Qnil);
1931 for (regexps = Vcompletion_regexp_list; CONSP (regexps);
1932 regexps = XCDR (regexps))
1933 {
1934 if (NILP (Fstring_match (XCAR (regexps),
1935 SYMBOLP (tem) ? string : tem,
1936 Qnil)))
1937 return unbind_to (count, Qnil);
1938 }
1939 unbind_to (count, Qnil);
1940 }
695deb18
SM
1941
1942 /* Finally, check the predicate. */
1943 if (!NILP (predicate))
6b61353c 1944 {
a284cdbb
RS
1945 return HASH_TABLE_P (collection)
1946 ? call2 (predicate, tem, HASH_VALUE (XHASH_TABLE (collection), i))
6b61353c
KH
1947 : call1 (predicate, tem);
1948 }
695deb18
SM
1949 else
1950 return Qt;
5d2ca7ae 1951}
f927c5ae 1952
655ea21c
JD
1953DEFUN ("internal-complete-buffer", Finternal_complete_buffer, Sinternal_complete_buffer, 3, 3, 0,
1954 doc: /* Perform completion on buffer names.
1955If the argument FLAG is nil, invoke `try-completion', if it's t, invoke
1956`all-completions', otherwise invoke `test-completion'.
1957
ba5524f4 1958The arguments STRING and PREDICATE are as in `try-completion',
655ea21c
JD
1959`all-completions', and `test-completion'. */)
1960 (string, predicate, flag)
1961 Lisp_Object string, predicate, flag;
1962{
1963 if (NILP (flag))
1964 return Ftry_completion (string, Vbuffer_alist, predicate);
1965 else if (EQ (flag, Qt))
8c2dccbf 1966 {
73913e2e 1967 Lisp_Object res = Fall_completions (string, Vbuffer_alist, predicate, Qnil);
8c2dccbf
SM
1968 if (SCHARS (string) > 0)
1969 return res;
1970 else
1971 { /* Strip out internal buffers. */
1972 Lisp_Object bufs = res;
1973 /* First, look for a non-internal buffer in `res'. */
1974 while (CONSP (bufs) && SREF (XCAR (bufs), 0) == ' ')
1975 bufs = XCDR (bufs);
1976 if (NILP (bufs))
1977 /* All bufs in `res' are internal, so don't trip them out. */
1978 return res;
1979 res = bufs;
1980 while (CONSP (XCDR (bufs)))
1981 if (SREF (XCAR (XCDR (bufs)), 0) == ' ')
1982 XSETCDR (bufs, XCDR (XCDR (bufs)));
1983 else
1984 bufs = XCDR (bufs);
1985 return res;
1986 }
1987 }
655ea21c
JD
1988 else /* assume `lambda' */
1989 return Ftest_completion (string, Vbuffer_alist, predicate);
1990}
1991
52b14ac0
JB
1992/* Like assoc but assumes KEY is a string, and ignores case if appropriate. */
1993
695deb18 1994DEFUN ("assoc-string", Fassoc_string, Sassoc_string, 2, 3, 0,
d3fc66fb 1995 doc: /* Like `assoc' but specifically for strings (and symbols).
c6a82c18
CY
1996
1997This returns the first element of LIST whose car matches the string or
1998symbol KEY, or nil if no match exists. When performing the
1999comparison, symbols are first converted to strings, and unibyte
2000strings to multibyte. If the optional arg CASE-FOLD is non-nil, case
2001is ignored.
2002
2003Unlike `assoc', KEY can also match an entry in LIST consisting of a
2004single string, rather than a cons cell whose car is a string. */)
695deb18 2005 (key, list, case_fold)
52b14ac0 2006 register Lisp_Object key;
695deb18 2007 Lisp_Object list, case_fold;
52b14ac0
JB
2008{
2009 register Lisp_Object tail;
2010
d3fc66fb
KS
2011 if (SYMBOLP (key))
2012 key = Fsymbol_name (key);
2013
99784d63 2014 for (tail = list; CONSP (tail); tail = XCDR (tail))
52b14ac0
JB
2015 {
2016 register Lisp_Object elt, tem, thiscar;
99784d63 2017 elt = XCAR (tail);
695deb18 2018 thiscar = CONSP (elt) ? XCAR (elt) : elt;
1954495f
KS
2019 if (SYMBOLP (thiscar))
2020 thiscar = Fsymbol_name (thiscar);
2021 else if (!STRINGP (thiscar))
52b14ac0 2022 continue;
9404446f
RS
2023 tem = Fcompare_strings (thiscar, make_number (0), Qnil,
2024 key, make_number (0), Qnil,
695deb18 2025 case_fold);
9404446f
RS
2026 if (EQ (tem, Qt))
2027 return elt;
52b14ac0
JB
2028 QUIT;
2029 }
2030 return Qnil;
2031}
f927c5ae 2032
e4c97a67 2033\f
f927c5ae 2034DEFUN ("minibuffer-depth", Fminibuffer_depth, Sminibuffer_depth, 0, 0, 0,
af52c32d
MB
2035 doc: /* Return current depth of activations of minibuffer, a nonnegative integer. */)
2036 ()
f927c5ae
JB
2037{
2038 return make_number (minibuf_level);
2039}
2040
37e9a934 2041DEFUN ("minibuffer-prompt", Fminibuffer_prompt, Sminibuffer_prompt, 0, 0, 0,
af52c32d
MB
2042 doc: /* Return the prompt string of the currently-active minibuffer.
2043If no minibuffer is active, return nil. */)
2044 ()
37e9a934 2045{
4d04c1f1 2046 return Fcopy_sequence (minibuf_prompt);
37e9a934
KH
2047}
2048
f927c5ae 2049\f
9d815fd9 2050void
f927c5ae
JB
2051init_minibuf_once ()
2052{
2053 Vminibuffer_list = Qnil;
2054 staticpro (&Vminibuffer_list);
2055}
2056
9d815fd9 2057void
f927c5ae
JB
2058syms_of_minibuf ()
2059{
2060 minibuf_level = 0;
4d04c1f1
KH
2061 minibuf_prompt = Qnil;
2062 staticpro (&minibuf_prompt);
2063
2064 minibuf_save_list = Qnil;
2065 staticpro (&minibuf_save_list);
f927c5ae 2066
9fa5c213
GM
2067 Qcompletion_ignore_case = intern ("completion-ignore-case");
2068 staticpro (&Qcompletion_ignore_case);
2069
719b4a40
RS
2070 Qread_file_name_internal = intern ("read-file-name-internal");
2071 staticpro (&Qread_file_name_internal);
2072
e5d4686b
RS
2073 Qminibuffer_default = intern ("minibuffer-default");
2074 staticpro (&Qminibuffer_default);
2075 Fset (Qminibuffer_default, Qnil);
2076
f927c5ae
JB
2077 Qminibuffer_completion_table = intern ("minibuffer-completion-table");
2078 staticpro (&Qminibuffer_completion_table);
2079
2080 Qminibuffer_completion_confirm = intern ("minibuffer-completion-confirm");
2081 staticpro (&Qminibuffer_completion_confirm);
2082
2083 Qminibuffer_completion_predicate = intern ("minibuffer-completion-predicate");
2084 staticpro (&Qminibuffer_completion_predicate);
2085
2086 staticpro (&last_minibuf_string);
2087 last_minibuf_string = Qnil;
2088
2089 Quser_variable_p = intern ("user-variable-p");
2090 staticpro (&Quser_variable_p);
2091
770970cb
RS
2092 Qminibuffer_history = intern ("minibuffer-history");
2093 staticpro (&Qminibuffer_history);
f927c5ae 2094
406e55df
RS
2095 Qbuffer_name_history = intern ("buffer-name-history");
2096 staticpro (&Qbuffer_name_history);
33d0a17f 2097 Fset (Qbuffer_name_history, Qnil);
406e55df 2098
5c781212
RS
2099 Qminibuffer_setup_hook = intern ("minibuffer-setup-hook");
2100 staticpro (&Qminibuffer_setup_hook);
2101
177aecf9
KH
2102 Qminibuffer_exit_hook = intern ("minibuffer-exit-hook");
2103 staticpro (&Qminibuffer_exit_hook);
2104
77aa8edf
RS
2105 Qhistory_length = intern ("history-length");
2106 staticpro (&Qhistory_length);
2107
cee54539
KH
2108 Qcurrent_input_method = intern ("current-input-method");
2109 staticpro (&Qcurrent_input_method);
2110
2111 Qactivate_input_method = intern ("activate-input-method");
2112 staticpro (&Qactivate_input_method);
2113
6b61353c
KH
2114 Qcase_fold_search = intern ("case-fold-search");
2115 staticpro (&Qcase_fold_search);
2116
627fb581
RS
2117 Qread_expression_history = intern ("read-expression-history");
2118 staticpro (&Qread_expression_history);
2119
af52c32d
MB
2120 DEFVAR_LISP ("read-buffer-function", &Vread_buffer_function,
2121 doc: /* If this is non-nil, `read-buffer' does its work by calling this function. */);
eebbfb01
KH
2122 Vread_buffer_function = Qnil;
2123
33df281c
CY
2124 DEFVAR_BOOL ("read-buffer-completion-ignore-case",
2125 &read_buffer_completion_ignore_case,
2126 doc: /* *Non-nil means completion ignores case when reading a buffer name. */);
2127 read_buffer_completion_ignore_case = 0;
2128
af52c32d
MB
2129 DEFVAR_LISP ("minibuffer-setup-hook", &Vminibuffer_setup_hook,
2130 doc: /* Normal hook run just after entry to minibuffer. */);
5c781212
RS
2131 Vminibuffer_setup_hook = Qnil;
2132
af52c32d
MB
2133 DEFVAR_LISP ("minibuffer-exit-hook", &Vminibuffer_exit_hook,
2134 doc: /* Normal hook run just after exit from minibuffer. */);
177aecf9
KH
2135 Vminibuffer_exit_hook = Qnil;
2136
af52c32d
MB
2137 DEFVAR_LISP ("history-length", &Vhistory_length,
2138 doc: /* *Maximum length for history lists before truncation takes place.
a1f17501 2139A number means that length; t means infinite. Truncation takes place
f4b46bb9 2140just after a new element is inserted. Setting the `history-length'
a1f17501 2141property of a history variable overrides this default. */);
77aa8edf
RS
2142 XSETFASTINT (Vhistory_length, 30);
2143
0da4d471
JL
2144 DEFVAR_BOOL ("history-delete-duplicates", &history_delete_duplicates,
2145 doc: /* *Non-nil means to delete duplicates in history.
2146If set to t when adding a new history element, all previous identical
179a4ca7 2147elements are deleted from the history list. */);
0da4d471
JL
2148 history_delete_duplicates = 0;
2149
179a4ca7
JL
2150 DEFVAR_LISP ("history-add-new-input", &Vhistory_add_new_input,
2151 doc: /* *Non-nil means to add new elements in history.
2152If set to nil, minibuffer reading functions don't add new elements to the
2153history list, so it is possible to do this afterwards by calling
2154`add-to-history' explicitly. */);
2155 Vhistory_add_new_input = Qt;
2156
af52c32d 2157 DEFVAR_BOOL ("completion-ignore-case", &completion_ignore_case,
75028673 2158 doc: /* Non-nil means don't consider case significant in completion.
f562df03
CY
2159For file-name completion, `read-file-name-completion-ignore-case'
2160controls the behavior, rather than this variable.
2161For buffer name completion, `read-buffer-completion-ignore-case'
d9a03ad2 2162controls the behavior, rather than this variable. */);
f927c5ae
JB
2163 completion_ignore_case = 0;
2164
af52c32d
MB
2165 DEFVAR_BOOL ("enable-recursive-minibuffers", &enable_recursive_minibuffers,
2166 doc: /* *Non-nil means to allow minibuffer commands while in the minibuffer.
a1f17501 2167This variable makes a difference whenever the minibuffer window is active. */);
f927c5ae
JB
2168 enable_recursive_minibuffers = 0;
2169
af52c32d
MB
2170 DEFVAR_LISP ("minibuffer-completion-table", &Vminibuffer_completion_table,
2171 doc: /* Alist or obarray used for completion in the minibuffer.
6b61353c
KH
2172This becomes the ALIST argument to `try-completion' and `all-completions'.
2173The value can also be a list of strings or a hash table.
a1f17501
PJ
2174
2175The value may alternatively be a function, which is given three arguments:
2176 STRING, the current buffer contents;
2177 PREDICATE, the predicate for filtering possible matches;
2178 CODE, which says what kind of things to do.
b2ef9714
JB
2179CODE can be nil, t or `lambda':
2180 nil -- return the best completion of STRING, or nil if there is none.
2181 t -- return a list of all possible completions of STRING.
2182 lambda -- return t if STRING is a valid completion as it stands. */);
f927c5ae
JB
2183 Vminibuffer_completion_table = Qnil;
2184
af52c32d
MB
2185 DEFVAR_LISP ("minibuffer-completion-predicate", &Vminibuffer_completion_predicate,
2186 doc: /* Within call to `completing-read', this holds the PREDICATE argument. */);
f927c5ae
JB
2187 Vminibuffer_completion_predicate = Qnil;
2188
af52c32d 2189 DEFVAR_LISP ("minibuffer-completion-confirm", &Vminibuffer_completion_confirm,
fd771ceb 2190 doc: /* Non-nil means to demand confirmation of completion before exiting minibuffer. */);
f927c5ae
JB
2191 Vminibuffer_completion_confirm = Qnil;
2192
ccf330a6 2193 DEFVAR_LISP ("minibuffer-completing-file-name",
af52c32d 2194 &Vminibuffer_completing_file_name,
6ddfc113 2195 doc: /* Non-nil means completing file names. */);
ccf330a6
RS
2196 Vminibuffer_completing_file_name = Qnil;
2197
af52c32d
MB
2198 DEFVAR_LISP ("minibuffer-help-form", &Vminibuffer_help_form,
2199 doc: /* Value that `help-form' takes on inside the minibuffer. */);
f927c5ae
JB
2200 Vminibuffer_help_form = Qnil;
2201
af52c32d
MB
2202 DEFVAR_LISP ("minibuffer-history-variable", &Vminibuffer_history_variable,
2203 doc: /* History list symbol to add minibuffer values to.
a1f17501
PJ
2204Each string of minibuffer input, as it appears on exit from the minibuffer,
2205is added with
2206 (set minibuffer-history-variable
2207 (cons STRING (symbol-value minibuffer-history-variable))) */);
5a866662 2208 XSETFASTINT (Vminibuffer_history_variable, 0);
770970cb 2209
af52c32d
MB
2210 DEFVAR_LISP ("minibuffer-history-position", &Vminibuffer_history_position,
2211 doc: /* Current position of redoing in the history list. */);
770970cb
RS
2212 Vminibuffer_history_position = Qnil;
2213
af52c32d
MB
2214 DEFVAR_BOOL ("minibuffer-auto-raise", &minibuffer_auto_raise,
2215 doc: /* *Non-nil means entering the minibuffer raises the minibuffer's frame.
a1f17501 2216Some uses of the echo area also raise that frame (since they use it too). */);
6a9ee000
RS
2217 minibuffer_auto_raise = 0;
2218
af52c32d 2219 DEFVAR_LISP ("completion-regexp-list", &Vcompletion_regexp_list,
6b61353c
KH
2220 doc: /* List of regexps that should restrict possible completions.
2221The basic completion functions only consider a completion acceptable
2222if it matches all regular expressions in this list, with
2223`case-fold-search' bound to the value of `completion-ignore-case'.
2224See Info node `(elisp)Basic Completion', for a description of these
2225functions. */);
42006772
RS
2226 Vcompletion_regexp_list = Qnil;
2227
c3421833 2228 DEFVAR_BOOL ("minibuffer-allow-text-properties",
af52c32d
MB
2229 &minibuffer_allow_text_properties,
2230 doc: /* Non-nil means `read-from-minibuffer' should not discard text properties.
a1f17501
PJ
2231This also affects `read-string', but it does not affect `read-minibuffer',
2232`read-no-blanks-input', or any of the functions that do minibuffer input
2233with completion; they always discard text properties. */);
c3421833
RS
2234 minibuffer_allow_text_properties = 0;
2235
af52c32d
MB
2236 DEFVAR_LISP ("minibuffer-prompt-properties", &Vminibuffer_prompt_properties,
2237 doc: /* Text properties that are added to minibuffer prompts.
a1f17501
PJ
2238These are in addition to the basic `field' property, and stickiness
2239properties. */);
cc64f5c9
MB
2240 /* We use `intern' here instead of Qread_only to avoid
2241 initialization-order problems. */
2242 Vminibuffer_prompt_properties
2243 = Fcons (intern ("read-only"), Fcons (Qt, Qnil));
2244
627fb581
RS
2245 DEFVAR_LISP ("read-expression-map", &Vread_expression_map,
2246 doc: /* Minibuffer keymap used for reading Lisp expressions. */);
2247 Vread_expression_map = Qnil;
2248
68313ed8 2249 defsubr (&Sset_minibuffer_window);
f927c5ae
JB
2250 defsubr (&Sread_from_minibuffer);
2251 defsubr (&Seval_minibuffer);
2252 defsubr (&Sread_minibuffer);
2253 defsubr (&Sread_string);
2254 defsubr (&Sread_command);
2255 defsubr (&Sread_variable);
ff137f16 2256 defsubr (&Sinternal_complete_buffer);
f927c5ae
JB
2257 defsubr (&Sread_buffer);
2258 defsubr (&Sread_no_blanks_input);
2259 defsubr (&Sminibuffer_depth);
37e9a934 2260 defsubr (&Sminibuffer_prompt);
f927c5ae 2261
873ef78e 2262 defsubr (&Sminibufferp);
a346ec72
MB
2263 defsubr (&Sminibuffer_prompt_end);
2264 defsubr (&Sminibuffer_contents);
2265 defsubr (&Sminibuffer_contents_no_properties);
b5e1e449 2266 defsubr (&Sminibuffer_completion_contents);
a346ec72 2267
f927c5ae
JB
2268 defsubr (&Stry_completion);
2269 defsubr (&Sall_completions);
695deb18
SM
2270 defsubr (&Stest_completion);
2271 defsubr (&Sassoc_string);
f927c5ae 2272 defsubr (&Scompleting_read);
f927c5ae
JB
2273}
2274
6b61353c
KH
2275/* arch-tag: 8f69b601-fba3-484c-a6dd-ceaee54a7a73
2276 (do not change this comment) */