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