* help.el (describe-key-briefly, describe-key): Don't expect an
[bpt/emacs.git] / src / minibuf.c
CommitLineData
f927c5ae 1/* Minibuffer input and completion.
0b5538bd 2 Copyright (C) 1985, 1986, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
aaef169d
TTN
3 2001, 2002, 2003, 2004, 2005,
4 2006 Free Software Foundation, Inc.
f927c5ae
JB
5
6This file is part of GNU Emacs.
7
8GNU Emacs is free software; you can redistribute it and/or modify
9it under the terms of the GNU General Public License as published by
ffd56f97 10the Free Software Foundation; either version 2, or (at your option)
f927c5ae
JB
11any later version.
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
19along with GNU Emacs; see the file COPYING. If not, write to
4fc5845f
LK
20the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21Boston, MA 02110-1301, USA. */
f927c5ae
JB
22
23
18160b98 24#include <config.h>
3f708f4c 25#include <stdio.h>
af52c32d 26
f927c5ae
JB
27#include "lisp.h"
28#include "commands.h"
29#include "buffer.h"
d50a3d2a 30#include "charset.h"
f927c5ae 31#include "dispextern.h"
2538fae4 32#include "keyboard.h"
ff11dfa1 33#include "frame.h"
f927c5ae
JB
34#include "window.h"
35#include "syntax.h"
0c21eeeb 36#include "intervals.h"
8feddab4 37#include "keymap.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/* Nonzero means display completion help for invalid input. */
279cf52c 58
739cc391 59Lisp_Object Vcompletion_auto_help;
f927c5ae 60
77aa8edf 61/* The maximum length of a minibuffer history. */
279cf52c 62
77aa8edf
RS
63Lisp_Object Qhistory_length, Vhistory_length;
64
0da4d471
JL
65/* No duplicates in history. */
66
67int history_delete_duplicates;
68
179a4ca7
JL
69/* Non-nil means add new input to history. */
70
71Lisp_Object Vhistory_add_new_input;
72
b278606c 73/* Fread_minibuffer leaves the input here as a string. */
279cf52c 74
f927c5ae
JB
75Lisp_Object last_minibuf_string;
76
9ab4a725 77/* Nonzero means let functions called when within a minibuffer
f927c5ae 78 invoke recursive minibuffers (to read arguments, or whatever) */
279cf52c 79
f927c5ae
JB
80int enable_recursive_minibuffers;
81
c3421833
RS
82/* Nonzero means don't ignore text properties
83 in Fread_from_minibuffer. */
279cf52c 84
c3421833
RS
85int minibuffer_allow_text_properties;
86
f927c5ae
JB
87/* help-form is bound to this while in the minibuffer. */
88
89Lisp_Object Vminibuffer_help_form;
90
770970cb
RS
91/* Variable which is the history list to add minibuffer values to. */
92
93Lisp_Object Vminibuffer_history_variable;
94
95/* Current position in the history list (adjusted by M-n and M-p). */
96
97Lisp_Object Vminibuffer_history_position;
98
cc64f5c9
MB
99/* Text properties that are added to minibuffer prompts.
100 These are in addition to the basic `field' property, and stickiness
101 properties. */
102
103Lisp_Object Vminibuffer_prompt_properties;
104
406e55df 105Lisp_Object Qminibuffer_history, Qbuffer_name_history;
770970cb 106
719b4a40
RS
107Lisp_Object Qread_file_name_internal;
108
177aecf9 109/* Normal hooks for entry to and exit from minibuffer. */
5c781212
RS
110
111Lisp_Object Qminibuffer_setup_hook, Vminibuffer_setup_hook;
177aecf9 112Lisp_Object Qminibuffer_exit_hook, Vminibuffer_exit_hook;
5c781212 113
eebbfb01 114/* Function to call to read a buffer name. */
9ab4a725 115Lisp_Object Vread_buffer_function;
eebbfb01 116
f927c5ae
JB
117/* Nonzero means completion ignores case. */
118
119int completion_ignore_case;
120
42006772
RS
121/* List of regexps that should restrict possible completions. */
122
123Lisp_Object Vcompletion_regexp_list;
124
6a9ee000
RS
125/* Nonzero means raise the minibuffer frame when the minibuffer
126 is entered. */
127
128int minibuffer_auto_raise;
129
f927c5ae
JB
130/* If last completion attempt reported "Complete but not unique"
131 then this is the string completed then; otherwise this is nil. */
132
133static Lisp_Object last_exact_completion;
134
30e13e56 135extern Lisp_Object Voverriding_local_map;
cee54539 136
5744fa7c
RS
137Lisp_Object Quser_variable_p;
138
139Lisp_Object Qminibuffer_default;
140
cee54539
KH
141Lisp_Object Qcurrent_input_method, Qactivate_input_method;
142
b0c138ce
LT
143Lisp_Object Qcase_fold_search;
144
5744fa7c 145extern Lisp_Object Qmouse_face;
279cf52c 146
8e9968c6 147extern Lisp_Object Qfield;
f927c5ae 148\f
89fdc4a0
KH
149/* Put minibuf on currently selected frame's minibuffer.
150 We do this whenever the user starts a new minibuffer
151 or when a minibuffer exits. */
152
153void
154choose_minibuf_frame ()
155{
a4aafc54
GM
156 if (FRAMEP (selected_frame)
157 && FRAME_LIVE_P (XFRAME (selected_frame))
158 && !EQ (minibuf_window, XFRAME (selected_frame)->minibuffer_window))
89fdc4a0 159 {
a4aafc54
GM
160 struct frame *sf = XFRAME (selected_frame);
161 Lisp_Object buffer;
9ab4a725 162
89fdc4a0
KH
163 /* I don't think that any frames may validly have a null minibuffer
164 window anymore. */
a4aafc54 165 if (NILP (sf->minibuffer_window))
89fdc4a0
KH
166 abort ();
167
a4aafc54
GM
168 /* Under X, we come here with minibuf_window being the
169 minibuffer window of the unused termcap window created in
170 init_window_once. That window doesn't have a buffer. */
171 buffer = XWINDOW (minibuf_window)->buffer;
172 if (BUFFERP (buffer))
cbbfe056 173 Fset_window_buffer (sf->minibuffer_window, buffer, Qnil);
a4aafc54 174 minibuf_window = sf->minibuffer_window;
89fdc4a0 175 }
914860c2
RS
176
177 /* Make sure no other frame has a minibuffer as its selected window,
178 because the text would not be displayed in it, and that would be
07d402c8
RS
179 confusing. Only allow the selected frame to do this,
180 and that only if the minibuffer is active. */
914860c2
RS
181 {
182 Lisp_Object tail, frame;
183
184 FOR_EACH_FRAME (tail, frame)
07d402c8 185 if (MINI_WINDOW_P (XWINDOW (FRAME_SELECTED_WINDOW (XFRAME (frame))))
a4aafc54 186 && !(EQ (frame, selected_frame)
07d402c8 187 && minibuf_level > 0))
914860c2
RS
188 Fset_frame_selected_window (frame, Fframe_first_window (frame));
189 }
89fdc4a0 190}
68313ed8 191
0c94f256
RS
192Lisp_Object
193choose_minibuf_frame_1 (ignore)
194 Lisp_Object ignore;
195{
196 choose_minibuf_frame ();
197 return Qnil;
198}
199
68313ed8
RS
200DEFUN ("set-minibuffer-window", Fset_minibuffer_window,
201 Sset_minibuffer_window, 1, 1, 0,
af52c32d 202 doc: /* Specify which minibuffer window to use for the minibuffer.
dea7e2ba 203This affects where the minibuffer is displayed if you put text in it
af52c32d
MB
204without invoking the usual minibuffer commands. */)
205 (window)
68313ed8
RS
206 Lisp_Object window;
207{
b7826503 208 CHECK_WINDOW (window);
68313ed8
RS
209 if (! MINI_WINDOW_P (XWINDOW (window)))
210 error ("Window is not a minibuffer window");
211
212 minibuf_window = window;
213
214 return window;
215}
216
89fdc4a0 217\f
f927c5ae
JB
218/* Actual minibuffer invocation. */
219
af2b7cd5 220static Lisp_Object read_minibuf_unwind P_ ((Lisp_Object));
7292839d 221static Lisp_Object run_exit_minibuf_hook P_ ((Lisp_Object));
af2b7cd5
RS
222static Lisp_Object read_minibuf P_ ((Lisp_Object, Lisp_Object,
223 Lisp_Object, Lisp_Object,
224 int, Lisp_Object,
225 Lisp_Object, Lisp_Object,
b35cd215 226 int, int));
edfef199
GM
227static Lisp_Object read_minibuf_noninteractive P_ ((Lisp_Object, Lisp_Object,
228 Lisp_Object, Lisp_Object,
229 int, Lisp_Object,
230 Lisp_Object, Lisp_Object,
231 int, int));
232static Lisp_Object string_to_object P_ ((Lisp_Object, Lisp_Object));
233
234
235/* Read a Lisp object from VAL and return it. If VAL is an empty
236 string, and DEFALT is a string, read from DEFALT instead of VAL. */
237
238static Lisp_Object
239string_to_object (val, defalt)
240 Lisp_Object val, defalt;
241{
242 struct gcpro gcpro1, gcpro2;
243 Lisp_Object expr_and_pos;
244 int pos;
9ab4a725 245
edfef199 246 GCPRO2 (val, defalt);
9ab4a725 247
d5db4077 248 if (STRINGP (val) && SCHARS (val) == 0
edfef199
GM
249 && STRINGP (defalt))
250 val = defalt;
9ab4a725 251
edfef199
GM
252 expr_and_pos = Fread_from_string (val, Qnil, Qnil);
253 pos = XINT (Fcdr (expr_and_pos));
d5db4077 254 if (pos != SCHARS (val))
edfef199
GM
255 {
256 /* Ignore trailing whitespace; any other trailing junk
257 is an error. */
258 int i;
259 pos = string_char_to_byte (val, pos);
d5db4077 260 for (i = pos; i < SBYTES (val); i++)
edfef199 261 {
d5db4077 262 int c = SREF (val, i);
edfef199
GM
263 if (c != ' ' && c != '\t' && c != '\n')
264 error ("Trailing garbage following expression");
265 }
266 }
9ab4a725 267
edfef199
GM
268 val = Fcar (expr_and_pos);
269 RETURN_UNGCPRO (val);
270}
271
272
273/* Like read_minibuf but reading from stdin. This function is called
274 from read_minibuf to do the job if noninteractive. */
275
276static Lisp_Object
277read_minibuf_noninteractive (map, initial, prompt, backup_n, expflag,
278 histvar, histpos, defalt, allow_props,
279 inherit_input_method)
280 Lisp_Object map;
281 Lisp_Object initial;
282 Lisp_Object prompt;
283 Lisp_Object backup_n;
284 int expflag;
285 Lisp_Object histvar;
286 Lisp_Object histpos;
287 Lisp_Object defalt;
288 int allow_props;
289 int inherit_input_method;
290{
291 int size, len;
292 char *line, *s;
edfef199
GM
293 Lisp_Object val;
294
d5db4077 295 fprintf (stdout, "%s", SDATA (prompt));
edfef199
GM
296 fflush (stdout);
297
6bbd7a29 298 val = Qnil;
edfef199
GM
299 size = 100;
300 len = 0;
301 line = (char *) xmalloc (size * sizeof *line);
302 while ((s = fgets (line + len, size - len, stdin)) != NULL
303 && (len = strlen (line),
304 len == size - 1 && line[len - 1] != '\n'))
305 {
306 size *= 2;
307 line = (char *) xrealloc (line, size);
308 }
309
310 if (s)
311 {
312 len = strlen (line);
9ab4a725 313
edfef199
GM
314 if (len > 0 && line[len - 1] == '\n')
315 line[--len] = '\0';
9ab4a725 316
edfef199
GM
317 val = build_string (line);
318 xfree (line);
319 }
320 else
321 {
322 xfree (line);
323 error ("Error reading from stdin");
324 }
9ab4a725 325
edfef199
GM
326 /* If Lisp form desired instead of string, parse it. */
327 if (expflag)
328 val = string_to_object (val, defalt);
9ab4a725 329
edfef199
GM
330 return val;
331}
1011edb5 332\f
873ef78e 333DEFUN ("minibufferp", Fminibufferp,
6d1b1d7b
JPW
334 Sminibufferp, 0, 1, 0,
335 doc: /* Return t if BUFFER is a minibuffer.
b0c138ce
LT
336No argument or nil as argument means use current buffer as BUFFER.
337BUFFER can be a buffer or a buffer name. */)
6d1b1d7b
JPW
338 (buffer)
339 Lisp_Object buffer;
873ef78e
RS
340{
341 Lisp_Object tem;
342
6d1b1d7b
JPW
343 if (NILP (buffer))
344 buffer = Fcurrent_buffer ();
345 else if (STRINGP (buffer))
346 buffer = Fget_buffer (buffer);
347 else
348 CHECK_BUFFER (buffer);
349
350 tem = Fmemq (buffer, Vminibuffer_list);
873ef78e
RS
351 return ! NILP (tem) ? Qt : Qnil;
352}
353
a346ec72
MB
354DEFUN ("minibuffer-prompt-end", Fminibuffer_prompt_end,
355 Sminibuffer_prompt_end, 0, 0, 0,
af52c32d 356 doc: /* Return the buffer position of the end of the minibuffer prompt.
eb7c9b64 357Return (point-min) if current buffer is not a minibuffer. */)
af52c32d 358 ()
a346ec72
MB
359{
360 /* This function is written to be most efficient when there's a prompt. */
873ef78e
RS
361 Lisp_Object beg, end, tem;
362 beg = make_number (BEGV);
363
364 tem = Fmemq (Fcurrent_buffer (), Vminibuffer_list);
365 if (NILP (tem))
366 return beg;
367
368 end = Ffield_end (beg, Qnil, Qnil);
9ab4a725 369
a346ec72 370 if (XINT (end) == ZV && NILP (Fget_char_property (beg, Qfield, Qnil)))
b056f36d 371 return beg;
a346ec72
MB
372 else
373 return end;
374}
375
376DEFUN ("minibuffer-contents", Fminibuffer_contents,
377 Sminibuffer_contents, 0, 0, 0,
029a305c 378 doc: /* Return the user input in a minibuffer as a string.
af52c32d
MB
379The current buffer must be a minibuffer. */)
380 ()
a346ec72
MB
381{
382 int prompt_end = XINT (Fminibuffer_prompt_end ());
383 return make_buffer_string (prompt_end, ZV, 1);
384}
385
386DEFUN ("minibuffer-contents-no-properties", Fminibuffer_contents_no_properties,
387 Sminibuffer_contents_no_properties, 0, 0, 0,
029a305c 388 doc: /* Return the user input in a minibuffer as a string, without text-properties.
af52c32d
MB
389The current buffer must be a minibuffer. */)
390 ()
a346ec72
MB
391{
392 int prompt_end = XINT (Fminibuffer_prompt_end ());
393 return make_buffer_string (prompt_end, ZV, 0);
394}
395
b5e1e449
JL
396DEFUN ("minibuffer-completion-contents", Fminibuffer_completion_contents,
397 Sminibuffer_completion_contents, 0, 0, 0,
398 doc: /* Return the user input in a minibuffer before point as a string.
399That is what completion commands operate on.
400The current buffer must be a minibuffer. */)
401 ()
402{
403 int prompt_end = XINT (Fminibuffer_prompt_end ());
404 if (PT < prompt_end)
405 error ("Cannot do completion in the prompt");
406 return make_buffer_string (prompt_end, PT, 1);
407}
408
a346ec72
MB
409DEFUN ("delete-minibuffer-contents", Fdelete_minibuffer_contents,
410 Sdelete_minibuffer_contents, 0, 0, 0,
af52c32d
MB
411 doc: /* Delete all user input in a minibuffer.
412The current buffer must be a minibuffer. */)
413 ()
a346ec72
MB
414{
415 int prompt_end = XINT (Fminibuffer_prompt_end ());
416 if (prompt_end < ZV)
417 del_range (prompt_end, ZV);
418 return Qnil;
419}
420
1011edb5 421\f
adb0708c
LT
422/* Read from the minibuffer using keymap MAP and initial contents INITIAL,
423 putting point minus BACKUP_N bytes from the end of INITIAL,
770970cb 424 prompting with PROMPT (a string), using history list HISTVAR
adb0708c
LT
425 with initial position HISTPOS. INITIAL should be a string or a
426 cons of a string and an integer. BACKUP_N should be <= 0, or
427 Qnil, which is equivalent to 0. If INITIAL is a cons, BACKUP_N is
b0c138ce
LT
428 ignored and replaced with an integer that puts point at one-indexed
429 position N in INITIAL, where N is the CDR of INITIAL, or at the
430 beginning of INITIAL if N <= 0.
770970cb
RS
431
432 Normally return the result as a string (the text that was read),
3ab14176 433 but if EXPFLAG is nonzero, read it and return the object read.
b278606c
BF
434 If HISTVAR is given, save the value read on that history only if it doesn't
435 match the front of that history list exactly. The value is pushed onto
e5d4686b 436 the list as the string that was read.
770970cb 437
4f9f637a 438 DEFALT specifies the default value for the sake of history commands.
c3421833 439
cee54539
KH
440 If ALLOW_PROPS is nonzero, we do not throw away text properties.
441
adb0708c 442 if INHERIT_INPUT_METHOD is nonzero, the minibuffer inherits the
cee54539 443 current input method. */
e5d4686b
RS
444
445static Lisp_Object
446read_minibuf (map, initial, prompt, backup_n, expflag,
b35cd215 447 histvar, histpos, defalt, allow_props, inherit_input_method)
f927c5ae
JB
448 Lisp_Object map;
449 Lisp_Object initial;
450 Lisp_Object prompt;
5061d9c3 451 Lisp_Object backup_n;
f927c5ae 452 int expflag;
770970cb
RS
453 Lisp_Object histvar;
454 Lisp_Object histpos;
e5d4686b 455 Lisp_Object defalt;
af2b7cd5 456 int allow_props;
cee54539 457 int inherit_input_method;
f927c5ae 458{
00a34088 459 Lisp_Object val;
aed13378 460 int count = SPECPDL_INDEX ();
cee54539
KH
461 Lisp_Object mini_frame, ambient_dir, minibuffer, input_method;
462 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5;
c75000c7 463 Lisp_Object enable_multibyte;
adb0708c 464 int pos = INTEGERP (backup_n) ? XINT (backup_n) : 0;
4f9f637a
RS
465
466 /* String to add to the history. */
467 Lisp_Object histstring;
468
b20de1cd
RS
469 Lisp_Object empty_minibuf;
470 Lisp_Object dummy, frame;
471
04012254 472 extern Lisp_Object Qfront_sticky;
fbd1209a 473 extern Lisp_Object Qrear_nonsticky;
00a34088 474
e5d4686b
RS
475 specbind (Qminibuffer_default, defalt);
476
08f7d623 477 single_kboard_state ();
e5baa1a7 478#ifdef HAVE_X_WINDOWS
526a058f
GM
479 if (display_hourglass_p)
480 cancel_hourglass ();
e5baa1a7 481#endif
718d3251 482
adb0708c
LT
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))
695deb18 515 prompt = empty_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 {
adb0708c
LT
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
748dc60a
RS
561 /* We have to do this after saving the window configuration
562 since that is what restores the current buffer. */
563
564 /* Arrange to restore a number of minibuffer-related variables.
565 We could bind each variable separately, but that would use lots of
566 specpdl slots. */
567 minibuf_save_list
568 = Fcons (Voverriding_local_map,
569 Fcons (minibuf_window, minibuf_save_list));
570 minibuf_save_list
571 = Fcons (minibuf_prompt,
572 Fcons (make_number (minibuf_prompt_width),
573 Fcons (Vhelp_form,
574 Fcons (Vcurrent_prefix_arg,
575 Fcons (Vminibuffer_history_position,
576 Fcons (Vminibuffer_history_variable,
577 minibuf_save_list))))));
578
579 record_unwind_protect (read_minibuf_unwind, Qnil);
580 minibuf_level++;
7292839d
SM
581 /* We are exiting the minibuffer one way or the other, so run the hook.
582 It should be run before unwinding the minibuf settings. Do it
583 separately from read_minibuf_unwind because we need to make sure that
584 read_minibuf_unwind is fully executed even if exit-minibuffer-hook
585 signals an error. --Stef */
586 record_unwind_protect (run_exit_minibuf_hook, Qnil);
748dc60a
RS
587
588 /* Now that we can restore all those variables, start changing them. */
589
1e3f16d5 590 minibuf_prompt_width = 0;
748dc60a
RS
591 minibuf_prompt = Fcopy_sequence (prompt);
592 Vminibuffer_history_position = histpos;
593 Vminibuffer_history_variable = histvar;
594 Vhelp_form = Vminibuffer_help_form;
595
cee54539 596 if (inherit_input_method)
c75000c7 597 {
fd771ceb 598 /* `current-input-method' is buffer local. So, remember it in
c75000c7
RS
599 INPUT_METHOD before changing the current buffer. */
600 input_method = Fsymbol_value (Qcurrent_input_method);
601 enable_multibyte = current_buffer->enable_multibyte_characters;
602 }
cee54539 603
748dc60a
RS
604 /* Switch to the minibuffer. */
605
4f69d8f6
RS
606 minibuffer = get_minibuffer (minibuf_level);
607 Fset_buffer (minibuffer);
64a3a3c0 608
1d69c502
RS
609 /* If appropriate, copy enable-multibyte-characters into the minibuffer. */
610 if (inherit_input_method)
611 current_buffer->enable_multibyte_characters = enable_multibyte;
612
64a3a3c0
JB
613 /* The current buffer's default directory is usually the right thing
614 for our minibuffer here. However, if you're typing a command at
615 a minibuffer-only frame when minibuf_level is zero, then buf IS
616 the current_buffer, so reset_buffer leaves buf's default
617 directory unchanged. This is a bummer when you've just started
618 up Emacs and buf's default directory is Qnil. Here's a hack; can
619 you think of something better to do? Find another buffer with a
620 better directory, and use that one instead. */
748dc60a
RS
621 if (STRINGP (ambient_dir))
622 current_buffer->directory = ambient_dir;
64a3a3c0
JB
623 else
624 {
625 Lisp_Object buf_list;
626
627 for (buf_list = Vbuffer_alist;
628 CONSP (buf_list);
7539e11f 629 buf_list = XCDR (buf_list))
64a3a3c0 630 {
1e62748e 631 Lisp_Object other_buf;
64a3a3c0 632
7539e11f 633 other_buf = XCDR (XCAR (buf_list));
7510b296 634 if (STRINGP (XBUFFER (other_buf)->directory))
64a3a3c0
JB
635 {
636 current_buffer->directory = XBUFFER (other_buf)->directory;
637 break;
638 }
639 }
640 }
641
a4aafc54
GM
642 if (!EQ (mini_frame, selected_frame))
643 Fredirect_frame_focus (selected_frame, mini_frame);
43bad991 644
f927c5ae 645 Vminibuf_scroll_window = selected_window;
6122844a 646 if (minibuf_level == 1 || !EQ (minibuf_window, selected_window))
5705966b 647 minibuf_selected_window = selected_window;
b20de1cd
RS
648
649 /* Empty out the minibuffers of all frames other than the one
650 where we are going to display one now.
651 Set them to point to ` *Minibuf-0*', which is always empty. */
652 empty_minibuf = Fget_buffer (build_string (" *Minibuf-0*"));
653
654 FOR_EACH_FRAME (dummy, frame)
655 {
656 Lisp_Object root_window = Fframe_root_window (frame);
657 Lisp_Object mini_window = XWINDOW (root_window)->next;
658
dd95745a
RS
659 if (! NILP (mini_window) && ! EQ (mini_window, minibuf_window)
660 && !NILP (Fwindow_minibuffer_p (mini_window)))
b20de1cd
RS
661 Fset_window_buffer (mini_window, empty_minibuf, Qnil);
662 }
663
664 /* Display this minibuffer in the proper window. */
cbbfe056 665 Fset_window_buffer (minibuf_window, Fcurrent_buffer (), Qnil);
f1321dc3 666 Fselect_window (minibuf_window, Qnil);
5a866662 667 XSETFASTINT (XWINDOW (minibuf_window)->hscroll, 0);
f927c5ae 668
748dc60a
RS
669 Fmake_local_variable (Qprint_escape_newlines);
670 print_escape_newlines = 1;
671
672 /* Erase the buffer. */
59115a22 673 {
331379bf 674 int count1 = SPECPDL_INDEX ();
59115a22 675 specbind (Qinhibit_read_only, Qt);
a41edd99 676 specbind (Qinhibit_modification_hooks, Qt);
59115a22
RS
677 Ferase_buffer ();
678 unbind_to (count1, Qnil);
679 }
680
279cf52c
GM
681 if (!NILP (current_buffer->enable_multibyte_characters)
682 && ! STRING_MULTIBYTE (minibuf_prompt))
683 minibuf_prompt = Fstring_make_multibyte (minibuf_prompt);
684
279cf52c
GM
685 /* Insert the prompt, record where it ends. */
686 Finsert (1, &minibuf_prompt);
279cf52c
GM
687 if (PT > BEG)
688 {
fbd1209a 689 Fput_text_property (make_number (BEG), make_number (PT),
279cf52c 690 Qfront_sticky, Qt, Qnil);
fbd1209a 691 Fput_text_property (make_number (BEG), make_number (PT),
279cf52c 692 Qrear_nonsticky, Qt, Qnil);
8e9968c6
GM
693 Fput_text_property (make_number (BEG), make_number (PT),
694 Qfield, Qt, Qnil);
cc64f5c9
MB
695 Fadd_text_properties (make_number (BEG), make_number (PT),
696 Vminibuffer_prompt_properties, Qnil);
279cf52c 697 }
9ab4a725
TTN
698
699 minibuf_prompt_width = (int) current_column (); /* iftc */
700
748dc60a 701 /* Put in the initial input. */
56a98455 702 if (!NILP (initial))
f927c5ae
JB
703 {
704 Finsert (1, &initial);
adb0708c 705 Fforward_char (make_number (pos));
f927c5ae
JB
706 }
707
39e98b38 708 clear_message (1, 1);
f927c5ae
JB
709 current_buffer->keymap = map;
710
cee54539 711 /* Turn on an input method stored in INPUT_METHOD if any. */
6801b300 712 if (STRINGP (input_method) && !NILP (Ffboundp (Qactivate_input_method)))
cee54539
KH
713 call1 (Qactivate_input_method, input_method);
714
5c781212
RS
715 /* Run our hook, but not if it is empty.
716 (run-hooks would do nothing if it is empty,
fd771ceb 717 but it's important to save time here in the usual case.) */
92d3b06e
RS
718 if (!NILP (Vminibuffer_setup_hook) && !EQ (Vminibuffer_setup_hook, Qunbound)
719 && !NILP (Vrun_hooks))
5c781212
RS
720 call1 (Vrun_hooks, Qminibuffer_setup_hook);
721
4e6b7204
MB
722 /* Don't allow the user to undo past this point. */
723 current_buffer->undo_list = Qnil;
724
f927c5ae
JB
725 recursive_edit_1 ();
726
727 /* If cursor is on the minibuffer line,
728 show the user we have exited by putting it in column 0. */
279cf52c 729 if (XWINDOW (minibuf_window)->cursor.vpos >= 0
f927c5ae
JB
730 && !noninteractive)
731 {
279cf52c
GM
732 XWINDOW (minibuf_window)->cursor.hpos = 0;
733 XWINDOW (minibuf_window)->cursor.x = 0;
734 XWINDOW (minibuf_window)->must_be_updated_p = 1;
a4aafc54 735 update_frame (XFRAME (selected_frame), 1, 1);
337aaf1f
GM
736 if (rif && rif->flush_display)
737 rif->flush_display (XFRAME (XWINDOW (minibuf_window)->frame));
f927c5ae
JB
738 }
739
c3421833 740 /* Make minibuffer contents into a string. */
4f69d8f6 741 Fset_buffer (minibuffer);
be95a9b6 742 if (allow_props)
a346ec72 743 val = Fminibuffer_contents ();
be95a9b6 744 else
a346ec72 745 val = Fminibuffer_contents_no_properties ();
770970cb 746
b278606c 747 /* VAL is the string of minibuffer text. */
7019cca7 748
b278606c
BF
749 last_minibuf_string = val;
750
4f9f637a 751 /* Choose the string to add to the history. */
b35cd215 752 if (SCHARS (val) != 0)
4f9f637a
RS
753 histstring = val;
754 else if (STRINGP (defalt))
755 histstring = defalt;
756 else
757 histstring = Qnil;
758
759 /* Add the value to the appropriate history list, if any. */
179a4ca7
JL
760 if (!NILP (Vhistory_add_new_input)
761 && SYMBOLP (Vminibuffer_history_variable)
4f9f637a 762 && !NILP (histstring))
3ab14176
KH
763 {
764 /* If the caller wanted to save the value read on a history list,
765 then do so if the value is not already the front of the list. */
766 Lisp_Object histval;
c6d65724
RS
767
768 /* If variable is unbound, make it nil. */
f5c1dd0d 769 if (EQ (SYMBOL_VALUE (Vminibuffer_history_variable), Qunbound))
c6d65724
RS
770 Fset (Vminibuffer_history_variable, Qnil);
771
3ab14176
KH
772 histval = Fsymbol_value (Vminibuffer_history_variable);
773
774 /* The value of the history variable must be a cons or nil. Other
775 values are unacceptable. We silently ignore these values. */
4f9f637a 776
3ab14176 777 if (NILP (histval)
9f6131cf 778 || (CONSP (histval)
4f9f637a 779 /* Don't duplicate the most recent entry in the history. */
b35cd215 780 && (NILP (Fequal (histstring, Fcar (histval))))))
77aa8edf
RS
781 {
782 Lisp_Object length;
783
0da4d471 784 if (history_delete_duplicates) Fdelete (histstring, histval);
4f9f637a 785 histval = Fcons (histstring, histval);
77aa8edf
RS
786 Fset (Vminibuffer_history_variable, histval);
787
788 /* Truncate if requested. */
789 length = Fget (Vminibuffer_history_variable, Qhistory_length);
790 if (NILP (length)) length = Vhistory_length;
e5d4686b
RS
791 if (INTEGERP (length))
792 {
793 if (XINT (length) <= 0)
794 Fset (Vminibuffer_history_variable, Qnil);
795 else
796 {
797 Lisp_Object temp;
798
799 temp = Fnthcdr (Fsub1 (length), histval);
800 if (CONSP (temp)) Fsetcdr (temp, Qnil);
801 }
802 }
77aa8edf 803 }
9f6131cf
RS
804 }
805
806 /* If Lisp form desired instead of string, parse it. */
807 if (expflag)
edfef199 808 val = string_to_object (val, defalt);
3ab14176 809
00a34088
RS
810 /* The appropriate frame will get selected
811 in set-window-configuration. */
f9b9ccef
SM
812 UNGCPRO;
813 return unbind_to (count, val);
f927c5ae
JB
814}
815
816/* Return a buffer to be used as the minibuffer at depth `depth'.
817 depth = 0 is the lowest allowed argument, and that is the value
818 used for nonrecursive minibuffer invocations */
819
820Lisp_Object
821get_minibuffer (depth)
822 int depth;
823{
824 Lisp_Object tail, num, buf;
9f6c23bc 825 char name[24];
f927c5ae
JB
826 extern Lisp_Object nconc2 ();
827
5a866662 828 XSETFASTINT (num, depth);
f927c5ae 829 tail = Fnthcdr (num, Vminibuffer_list);
56a98455 830 if (NILP (tail))
f927c5ae
JB
831 {
832 tail = Fcons (Qnil, Qnil);
833 Vminibuffer_list = nconc2 (Vminibuffer_list, tail);
834 }
835 buf = Fcar (tail);
56a98455 836 if (NILP (buf) || NILP (XBUFFER (buf)->name))
f927c5ae
JB
837 {
838 sprintf (name, " *Minibuf-%d*", depth);
839 buf = Fget_buffer_create (build_string (name));
5d6533f1
JB
840
841 /* Although the buffer's name starts with a space, undo should be
842 enabled in it. */
843 Fbuffer_enable_undo (buf);
844
f3fbd155 845 XSETCAR (tail, buf);
f927c5ae
JB
846 }
847 else
5956f71d 848 {
aed13378 849 int count = SPECPDL_INDEX ();
7f856567
SM
850 /* `reset_buffer' blindly sets the list of overlays to NULL, so we
851 have to empty the list, otherwise we end up with overlays that
852 think they belong to this buffer while the buffer doesn't know about
853 them any more. */
599ca9c2
SM
854 delete_all_overlays (XBUFFER (buf));
855 reset_buffer (XBUFFER (buf));
6b3faad8
RS
856 record_unwind_protect (Fset_buffer, Fcurrent_buffer ());
857 Fset_buffer (buf);
858 Fkill_all_local_variables ();
859 unbind_to (count, Qnil);
5956f71d 860 }
64a3a3c0 861
f927c5ae
JB
862 return buf;
863}
864
7292839d
SM
865static Lisp_Object
866run_exit_minibuf_hook (data)
867 Lisp_Object data;
868{
869 if (!NILP (Vminibuffer_exit_hook) && !EQ (Vminibuffer_exit_hook, Qunbound)
870 && !NILP (Vrun_hooks))
871 safe_run_hooks (Qminibuffer_exit_hook);
872
873 return Qnil;
874}
875
279cf52c
GM
876/* This function is called on exiting minibuffer, whether normally or
877 not, and it restores the current window, buffer, etc. */
f927c5ae 878
9d815fd9 879static Lisp_Object
43bad991
JB
880read_minibuf_unwind (data)
881 Lisp_Object data;
f927c5ae 882{
c24e1160 883 Lisp_Object old_deactivate_mark;
59115a22 884 Lisp_Object window;
c24e1160 885
f927c5ae 886 /* If this was a recursive minibuffer,
59115a22 887 tie the minibuffer window back to the outer level minibuffer buffer. */
f927c5ae 888 minibuf_level--;
f927c5ae 889
59115a22 890 window = minibuf_window;
279cf52c
GM
891 /* To keep things predictable, in case it matters, let's be in the
892 minibuffer when we reset the relevant variables. */
59115a22
RS
893 Fset_buffer (XWINDOW (window)->buffer);
894
895 /* Restore prompt, etc, from outer minibuffer level. */
4d04c1f1
KH
896 minibuf_prompt = Fcar (minibuf_save_list);
897 minibuf_save_list = Fcdr (minibuf_save_list);
898 minibuf_prompt_width = XFASTINT (Fcar (minibuf_save_list));
899 minibuf_save_list = Fcdr (minibuf_save_list);
900 Vhelp_form = Fcar (minibuf_save_list);
901 minibuf_save_list = Fcdr (minibuf_save_list);
ee9e37ab 902 Vcurrent_prefix_arg = Fcar (minibuf_save_list);
4d04c1f1
KH
903 minibuf_save_list = Fcdr (minibuf_save_list);
904 Vminibuffer_history_position = Fcar (minibuf_save_list);
905 minibuf_save_list = Fcdr (minibuf_save_list);
906 Vminibuffer_history_variable = Fcar (minibuf_save_list);
907 minibuf_save_list = Fcdr (minibuf_save_list);
30e13e56 908 Voverriding_local_map = Fcar (minibuf_save_list);
c5b6b680 909 minibuf_save_list = Fcdr (minibuf_save_list);
914860c2
RS
910#if 0
911 temp = Fcar (minibuf_save_list);
912 if (FRAME_LIVE_P (XFRAME (WINDOW_FRAME (XWINDOW (temp)))))
913 minibuf_window = temp;
914#endif
30e13e56 915 minibuf_save_list = Fcdr (minibuf_save_list);
59115a22
RS
916
917 /* Erase the minibuffer we were using at this level. */
918 {
aed13378 919 int count = SPECPDL_INDEX ();
59115a22
RS
920 /* Prevent error in erase-buffer. */
921 specbind (Qinhibit_read_only, Qt);
bd819d14 922 specbind (Qinhibit_modification_hooks, Qt);
59115a22
RS
923 old_deactivate_mark = Vdeactivate_mark;
924 Ferase_buffer ();
925 Vdeactivate_mark = old_deactivate_mark;
926 unbind_to (count, Qnil);
927 }
928
544e358d
GM
929 /* When we get to the outmost level, make sure we resize the
930 mini-window back to its normal size. */
931 if (minibuf_level == 0)
1e3f16d5 932 resize_mini_window (XWINDOW (window), 0);
544e358d 933
59115a22
RS
934 /* Make sure minibuffer window is erased, not ignored. */
935 windows_or_buffers_changed++;
936 XSETFASTINT (XWINDOW (window)->last_modified, 0);
193e4518 937 XSETFASTINT (XWINDOW (window)->last_overlay_modified, 0);
9d815fd9 938 return Qnil;
f927c5ae
JB
939}
940\f
b9d721de 941
b35cd215 942DEFUN ("read-from-minibuffer", Fread_from_minibuffer, Sread_from_minibuffer, 1, 7, 0,
af52c32d 943 doc: /* Read a string from the minibuffer, prompting with string PROMPT.
b0c138ce
LT
944The optional second arg INITIAL-CONTENTS is an obsolete alternative to
945 DEFAULT-VALUE. It normally should be nil in new code, except when
946 HIST is a cons. It is discussed in more detail below.
a1f17501
PJ
947Third arg KEYMAP is a keymap to use whilst reading;
948 if omitted or nil, the default is `minibuffer-local-map'.
fd771ceb 949If fourth arg READ is non-nil, then interpret the result as a Lisp object
a1f17501
PJ
950 and return that object:
951 in other words, do `(car (read-from-string INPUT-STRING))'
b0c138ce
LT
952Fifth arg HIST, if non-nil, specifies a history list and optionally
953 the initial position in the list. It can be a symbol, which is the
954 history list variable to use, or it can be a cons cell
955 (HISTVAR . HISTPOS). In that case, HISTVAR is the history list variable
956 to use, and HISTPOS is the initial position for use by the minibuffer
957 history commands. For consistency, you should also specify that
958 element of the history as the value of INITIAL-CONTENTS. Positions
959 are counted starting from 1 at the beginning of the list.
a1f17501 960Sixth arg DEFAULT-VALUE is the default value. If non-nil, it is available
adb0708c
LT
961 for history commands; but, unless READ is non-nil, `read-from-minibuffer'
962 does NOT return DEFAULT-VALUE if the user enters empty input! It returns
963 the empty string.
a1f17501 964Seventh arg INHERIT-INPUT-METHOD, if non-nil, means the minibuffer inherits
029a305c 965 the current input method and the setting of `enable-multibyte-characters'.
a1f17501
PJ
966If the variable `minibuffer-allow-text-properties' is non-nil,
967 then the string which is returned includes whatever text properties
b0c138ce
LT
968 were present in the minibuffer. Otherwise the value has no text properties.
969
970The remainder of this documentation string describes the
971INITIAL-CONTENTS argument in more detail. It is only relevant when
972studying existing code, or when HIST is a cons. If non-nil,
973INITIAL-CONTENTS is a string to be inserted into the minibuffer before
974reading input. Normally, point is put at the end of that string.
975However, if INITIAL-CONTENTS is \(STRING . POSITION), the initial
976input is STRING, but point is placed at _one-indexed_ position
977POSITION in the minibuffer. Any integer value less than or equal to
978one puts point at the beginning of the string. *Note* that this
979behavior differs from the way such arguments are used in `completing-read'
980and some related functions, which use zero-indexing for POSITION. */)
b35cd215 981(prompt, initial_contents, keymap, read, hist, default_value, inherit_input_method)
e5d4686b 982 Lisp_Object prompt, initial_contents, keymap, read, hist, default_value;
b35cd215 983 Lisp_Object inherit_input_method;
f927c5ae 984{
adb0708c 985 Lisp_Object histvar, histpos, val;
1d8d92f4
RS
986 struct gcpro gcpro1;
987
b7826503 988 CHECK_STRING (prompt);
56a98455 989 if (NILP (keymap))
f927c5ae
JB
990 keymap = Vminibuffer_local_map;
991 else
02067692 992 keymap = get_keymap (keymap, 1, 0);
770970cb 993
7510b296 994 if (SYMBOLP (hist))
770970cb
RS
995 {
996 histvar = hist;
997 histpos = Qnil;
998 }
999 else
1000 {
1001 histvar = Fcar_safe (hist);
1002 histpos = Fcdr_safe (hist);
1003 }
1004 if (NILP (histvar))
1005 histvar = Qminibuffer_history;
1006 if (NILP (histpos))
5a866662 1007 XSETFASTINT (histpos, 0);
770970cb 1008
1d8d92f4 1009 GCPRO1 (default_value);
e5d4686b 1010 val = read_minibuf (keymap, initial_contents, prompt,
adb0708c 1011 Qnil, !NILP (read),
c3421833 1012 histvar, histpos, default_value,
cee54539 1013 minibuffer_allow_text_properties,
b35cd215 1014 !NILP (inherit_input_method));
1d8d92f4 1015 UNGCPRO;
e5d4686b 1016 return val;
f927c5ae
JB
1017}
1018
1019DEFUN ("read-minibuffer", Fread_minibuffer, Sread_minibuffer, 1, 2, 0,
b0c138ce 1020 doc: /* Return a Lisp object read using the minibuffer, unevaluated.
a1f17501 1021Prompt with PROMPT. If non-nil, optional second arg INITIAL-CONTENTS
b0c138ce
LT
1022is a string to insert in the minibuffer before reading.
1023\(INITIAL-CONTENTS can also be a cons of a string and an integer. Such
1024arguments are used as in `read-from-minibuffer') */)
af52c32d 1025 (prompt, initial_contents)
f927c5ae
JB
1026 Lisp_Object prompt, initial_contents;
1027{
b7826503 1028 CHECK_STRING (prompt);
770970cb 1029 return read_minibuf (Vminibuffer_local_map, initial_contents,
e5d4686b 1030 prompt, Qnil, 1, Qminibuffer_history,
b35cd215 1031 make_number (0), Qnil, 0, 0);
f927c5ae
JB
1032}
1033
1034DEFUN ("eval-minibuffer", Feval_minibuffer, Seval_minibuffer, 1, 2, 0,
af52c32d 1035 doc: /* Return value of Lisp expression read using the minibuffer.
a1f17501 1036Prompt with PROMPT. If non-nil, optional second arg INITIAL-CONTENTS
b0c138ce
LT
1037is a string to insert in the minibuffer before reading.
1038\(INITIAL-CONTENTS can also be a cons of a string and an integer. Such
eb7c9b64 1039arguments are used as in `read-from-minibuffer'.) */)
af52c32d 1040 (prompt, initial_contents)
f927c5ae
JB
1041 Lisp_Object prompt, initial_contents;
1042{
1043 return Feval (Fread_minibuffer (prompt, initial_contents));
1044}
1045
1046/* Functions that use the minibuffer to read various things. */
1047
cee54539 1048DEFUN ("read-string", Fread_string, Sread_string, 1, 5, 0,
af52c32d 1049 doc: /* Read a string from the minibuffer, prompting with string PROMPT.
a1f17501 1050If non-nil, second arg INITIAL-INPUT is a string to insert before reading.
b0c138ce
LT
1051 This argument has been superseded by DEFAULT-VALUE and should normally
1052 be nil in new code. It behaves as in `read-from-minibuffer'. See the
1053 documentation string of that function for details.
a1f17501
PJ
1054The third arg HISTORY, if non-nil, specifies a history list
1055 and optionally the initial position in the list.
1056See `read-from-minibuffer' for details of HISTORY argument.
1057Fourth arg DEFAULT-VALUE is the default value. If non-nil, it is used
1058 for history commands, and as the value to return if the user enters
1059 the empty string.
1060Fifth arg INHERIT-INPUT-METHOD, if non-nil, means the minibuffer inherits
029a305c 1061 the current input method and the setting of `enable-multibyte-characters'. */)
af52c32d 1062 (prompt, initial_input, history, default_value, inherit_input_method)
e5d4686b 1063 Lisp_Object prompt, initial_input, history, default_value;
cee54539 1064 Lisp_Object inherit_input_method;
f927c5ae 1065{
b9a86585
RS
1066 Lisp_Object val;
1067 val = Fread_from_minibuffer (prompt, initial_input, Qnil,
1068 Qnil, history, default_value,
b35cd215 1069 inherit_input_method);
d5db4077 1070 if (STRINGP (val) && SCHARS (val) == 0 && ! NILP (default_value))
b9a86585
RS
1071 val = default_value;
1072 return val;
f927c5ae
JB
1073}
1074
cee54539 1075DEFUN ("read-no-blanks-input", Fread_no_blanks_input, Sread_no_blanks_input, 1, 3, 0,
af52c32d 1076 doc: /* Read a string from the terminal, not allowing blanks.
b0c138ce
LT
1077Prompt with PROMPT. Whitespace terminates the input. If INITIAL is
1078non-nil, it should be a string, which is used as initial input, with
1079point positioned at the end, so that SPACE will accept the input.
1080\(Actually, INITIAL can also be a cons of a string and an integer.
1081Such values are treated as in `read-from-minibuffer', but are normally
1082not useful in this function.)
a1f17501 1083Third arg INHERIT-INPUT-METHOD, if non-nil, means the minibuffer inherits
b0c138ce 1084the current input method and the setting of`enable-multibyte-characters'. */)
af52c32d 1085 (prompt, initial, inherit_input_method)
c923ccc9 1086 Lisp_Object prompt, initial, inherit_input_method;
f927c5ae 1087{
b7826503 1088 CHECK_STRING (prompt);
c923ccc9 1089 return read_minibuf (Vminibuffer_local_ns_map, initial, prompt, Qnil,
cee54539 1090 0, Qminibuffer_history, make_number (0), Qnil, 0,
b35cd215 1091 !NILP (inherit_input_method));
f927c5ae
JB
1092}
1093
e5d4686b 1094DEFUN ("read-command", Fread_command, Sread_command, 1, 2, 0,
af52c32d 1095 doc: /* Read the name of a command and return as a symbol.
fd771ceb 1096Prompt with PROMPT. By default, return DEFAULT-VALUE. */)
af52c32d 1097 (prompt, default_value)
e5d4686b 1098 Lisp_Object prompt, default_value;
f927c5ae 1099{
7c8d9931
RS
1100 Lisp_Object name, default_string;
1101
1102 if (NILP (default_value))
1103 default_string = Qnil;
1104 else if (SYMBOLP (default_value))
caa4733e 1105 default_string = SYMBOL_NAME (default_value);
7c8d9931
RS
1106 else
1107 default_string = default_value;
9ab4a725 1108
7c8d9931
RS
1109 name = Fcompleting_read (prompt, Vobarray, Qcommandp, Qt,
1110 Qnil, Qnil, default_string, Qnil);
1111 if (NILP (name))
1112 return name;
1113 return Fintern (name, Qnil);
f927c5ae
JB
1114}
1115
1116#ifdef NOTDEF
1117DEFUN ("read-function", Fread_function, Sread_function, 1, 1, 0,
af52c32d 1118 doc: /* One arg PROMPT, a string. Read the name of a function and return as a symbol.
fd771ceb 1119Prompt with PROMPT. */)
af52c32d 1120 (prompt)
f927c5ae
JB
1121 Lisp_Object prompt;
1122{
cee54539 1123 return Fintern (Fcompleting_read (prompt, Vobarray, Qfboundp, Qt, Qnil, Qnil, Qnil, Qnil),
f927c5ae
JB
1124 Qnil);
1125}
1126#endif /* NOTDEF */
1127
e5d4686b 1128DEFUN ("read-variable", Fread_variable, Sread_variable, 1, 2, 0,
af52c32d 1129 doc: /* Read the name of a user variable and return it as a symbol.
fd771ceb 1130Prompt with PROMPT. By default, return DEFAULT-VALUE.
316f9bfc 1131A user variable is one for which `user-variable-p' returns non-nil. */)
af52c32d 1132 (prompt, default_value)
e5d4686b 1133 Lisp_Object prompt, default_value;
f927c5ae 1134{
7c8d9931
RS
1135 Lisp_Object name, default_string;
1136
1137 if (NILP (default_value))
1138 default_string = Qnil;
1139 else if (SYMBOLP (default_value))
caa4733e 1140 default_string = SYMBOL_NAME (default_value);
7c8d9931
RS
1141 else
1142 default_string = default_value;
9ab4a725 1143
7c8d9931
RS
1144 name = Fcompleting_read (prompt, Vobarray,
1145 Quser_variable_p, Qt,
1146 Qnil, Qnil, default_string, Qnil);
1147 if (NILP (name))
1148 return name;
1149 return Fintern (name, Qnil);
f927c5ae
JB
1150}
1151
1152DEFUN ("read-buffer", Fread_buffer, Sread_buffer, 1, 3, 0,
fd771ceb
PJ
1153 doc: /* Read the name of a buffer and return as a string.
1154Prompt with PROMPT.
a1f17501 1155Optional second arg DEF is value to return if user enters an empty line.
fd771ceb 1156If optional third arg REQUIRE-MATCH is non-nil,
97c3e4cc
RF
1157 only existing buffer names are allowed.
1158The argument PROMPT should be a string ending with a colon and a space. */)
af52c32d 1159 (prompt, def, require_match)
f927c5ae
JB
1160 Lisp_Object prompt, def, require_match;
1161{
eebbfb01 1162 Lisp_Object args[4];
97c3e4cc
RF
1163 unsigned char *s;
1164 int len;
9ab4a725 1165
7510b296 1166 if (BUFFERP (def))
f927c5ae 1167 def = XBUFFER (def)->name;
eebbfb01
KH
1168
1169 if (NILP (Vread_buffer_function))
1170 {
1171 if (!NILP (def))
1172 {
97c3e4cc
RF
1173 /* A default value was provided: we must change PROMPT,
1174 editing the default value in before the colon. To achieve
1175 this, we replace PROMPT with a substring that doesn't
1176 contain the terminal space and colon (if present). They
1177 are then added back using Fformat. */
1178
1179 if (STRINGP (prompt))
1180 {
1181 s = SDATA (prompt);
1182 len = strlen (s);
1183 if (len >= 2 && s[len - 2] == ':' && s[len - 1] == ' ')
1184 len = len - 2;
1185 else if (len >= 1 && (s[len - 1] == ':' || s[len - 1] == ' '))
1186 len--;
1187
1188 prompt = make_specified_string (s, -1, len,
1189 STRING_MULTIBYTE (prompt));
1190 }
1191
1192 args[0] = build_string ("%s (default %s): ");
eebbfb01
KH
1193 args[1] = prompt;
1194 args[2] = def;
1195 prompt = Fformat (3, args);
1196 }
1197
ff137f16
EZ
1198 return Fcompleting_read (prompt, intern ("internal-complete-buffer"),
1199 Qnil, require_match, Qnil, Qbuffer_name_history,
406e55df 1200 def, Qnil);
eebbfb01
KH
1201 }
1202 else
f927c5ae 1203 {
eebbfb01 1204 args[0] = Vread_buffer_function;
f927c5ae
JB
1205 args[1] = prompt;
1206 args[2] = def;
eebbfb01
KH
1207 args[3] = require_match;
1208 return Ffuncall(4, args);
f927c5ae 1209 }
f927c5ae
JB
1210}
1211\f
ec067ec7
RS
1212static Lisp_Object
1213minibuf_conform_representation (string, basis)
1214 Lisp_Object string, basis;
1215{
1216 if (STRING_MULTIBYTE (string) == STRING_MULTIBYTE (basis))
1217 return string;
1218
1219 if (STRING_MULTIBYTE (string))
1220 return Fstring_make_unibyte (string);
1221 else
1222 return Fstring_make_multibyte (string);
1223}
1224
f927c5ae 1225DEFUN ("try-completion", Ftry_completion, Stry_completion, 2, 3, 0,
af52c32d 1226 doc: /* Return common substring of all completions of STRING in ALIST.
f9b9ccef 1227Each car of each element of ALIST (or each element if it is not a cons cell)
3809648a
KS
1228is tested to see if it begins with STRING. The possible matches may be
1229strings or symbols. Symbols are converted to strings before testing,
1230see `symbol-name'.
a1f17501
PJ
1231All that match are compared together; the longest initial sequence
1232common to all matches is returned as a string.
1233If there is no match at all, nil is returned.
1234For a unique match which is exact, t is returned.
1235
3809648a
KS
1236If ALIST is a hash-table, all the string and symbol keys are the
1237possible matches.
85cd4372
SM
1238If ALIST is an obarray, the names of all symbols in the obarray
1239are the possible matches.
a1f17501
PJ
1240
1241ALIST can also be a function to do the completion itself.
1242It receives three arguments: the values STRING, PREDICATE and nil.
1243Whatever it returns becomes the value of `try-completion'.
1244
1245If optional third argument PREDICATE is non-nil,
1246it is used to test each possible match.
1247The match is a candidate only if PREDICATE returns non-nil.
1248The argument given to PREDICATE is the alist element
85cd4372
SM
1249or the symbol from the obarray. If ALIST is a hash-table,
1250predicate is called with two arguments: the key and the value.
a1f17501 1251Additionally to this predicate, `completion-regexp-list'
af52c32d
MB
1252is used to further constrain the set of candidates. */)
1253 (string, alist, predicate)
7efd36fc 1254 Lisp_Object string, alist, predicate;
f927c5ae
JB
1255{
1256 Lisp_Object bestmatch, tail, elt, eltstring;
af2b7cd5 1257 /* Size in bytes of BESTMATCH. */
6bbd7a29 1258 int bestmatchsize = 0;
af2b7cd5 1259 /* These are in bytes, too. */
f927c5ae 1260 int compare, matchsize;
1d69c502
RS
1261 int type = (HASH_TABLE_P (alist) ? 3
1262 : VECTORP (alist) ? 2
1263 : NILP (alist) || (CONSP (alist)
1264 && (!SYMBOLP (XCAR (alist))
1265 || NILP (XCAR (alist)))));
6bbd7a29 1266 int index = 0, obsize = 0;
f927c5ae 1267 int matchcount = 0;
acd81db9 1268 int bindcount = -1;
f927c5ae
JB
1269 Lisp_Object bucket, zero, end, tem;
1270 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
1271
b7826503 1272 CHECK_STRING (string);
85cd4372 1273 if (type == 0)
7efd36fc 1274 return call3 (alist, string, predicate, Qnil);
f927c5ae 1275
6bbd7a29 1276 bestmatch = bucket = Qnil;
c8ae863b 1277 zero = make_number (0);
f927c5ae
JB
1278
1279 /* If ALIST is not a list, set TAIL just for gc pro. */
1280 tail = alist;
85cd4372 1281 if (type == 2)
f927c5ae 1282 {
f927c5ae
JB
1283 obsize = XVECTOR (alist)->size;
1284 bucket = XVECTOR (alist)->contents[index];
1285 }
1286
1287 while (1)
1288 {
85cd4372 1289 /* Get the next element of the alist, obarray, or hash-table. */
f927c5ae
JB
1290 /* Exit the loop if the elements are all used up. */
1291 /* elt gets the alist element or symbol.
1292 eltstring gets the name to check as a completion. */
1293
85cd4372 1294 if (type == 1)
f927c5ae 1295 {
695deb18 1296 if (!CONSP (tail))
f927c5ae 1297 break;
695deb18
SM
1298 elt = XCAR (tail);
1299 eltstring = CONSP (elt) ? XCAR (elt) : elt;
1300 tail = XCDR (tail);
f927c5ae 1301 }
85cd4372 1302 else if (type == 2)
f927c5ae 1303 {
c8ae863b 1304 if (!EQ (bucket, zero))
f927c5ae
JB
1305 {
1306 elt = bucket;
3809648a 1307 eltstring = elt;
f927c5ae
JB
1308 if (XSYMBOL (bucket)->next)
1309 XSETSYMBOL (bucket, XSYMBOL (bucket)->next);
1310 else
5a866662 1311 XSETFASTINT (bucket, 0);
f927c5ae
JB
1312 }
1313 else if (++index >= obsize)
1314 break;
1315 else
1316 {
1317 bucket = XVECTOR (alist)->contents[index];
1318 continue;
1319 }
1320 }
85cd4372
SM
1321 else /* if (type == 3) */
1322 {
1323 while (index < HASH_TABLE_SIZE (XHASH_TABLE (alist))
1324 && NILP (HASH_HASH (XHASH_TABLE (alist), index)))
1325 index++;
1326 if (index >= HASH_TABLE_SIZE (XHASH_TABLE (alist)))
1327 break;
1328 else
1329 elt = eltstring = HASH_KEY (XHASH_TABLE (alist), index++);
1330 }
f927c5ae
JB
1331
1332 /* Is this element a possible completion? */
1333
3809648a
KS
1334 if (SYMBOLP (eltstring))
1335 eltstring = Fsymbol_name (eltstring);
1336
7510b296 1337 if (STRINGP (eltstring)
d5db4077 1338 && SCHARS (string) <= SCHARS (eltstring)
c8ae863b 1339 && (tem = Fcompare_strings (eltstring, zero,
d5db4077 1340 make_number (SCHARS (string)),
c8ae863b 1341 string, zero, Qnil,
b0c138ce 1342 completion_ignore_case ? Qt : Qnil),
69f4ef20 1343 EQ (Qt, tem)))
f927c5ae
JB
1344 {
1345 /* Yes. */
42006772 1346 Lisp_Object regexps;
42006772
RS
1347
1348 /* Ignore this element if it fails to match all the regexps. */
acd81db9
DK
1349 {
1350 for (regexps = Vcompletion_regexp_list; CONSP (regexps);
1351 regexps = XCDR (regexps))
1352 {
1353 if (bindcount < 0) {
1354 bindcount = SPECPDL_INDEX ();
1355 specbind (Qcase_fold_search,
1356 completion_ignore_case ? Qt : Qnil);
77443789 1357 }
acd81db9
DK
1358 tem = Fstring_match (XCAR (regexps), eltstring, zero);
1359 if (NILP (tem))
1360 break;
1361 }
1362 if (CONSP (regexps))
1363 continue;
1364 }
42006772 1365
f927c5ae
JB
1366 /* Ignore this element if there is a predicate
1367 and the predicate doesn't like it. */
1368
7efd36fc 1369 if (!NILP (predicate))
f927c5ae 1370 {
7efd36fc 1371 if (EQ (predicate, Qcommandp))
c837f4f9 1372 tem = Fcommandp (elt, Qnil);
f927c5ae
JB
1373 else
1374 {
acd81db9
DK
1375 if (bindcount >= 0) {
1376 unbind_to (bindcount, Qnil);
1377 bindcount = -1;
1378 }
f927c5ae 1379 GCPRO4 (tail, string, eltstring, bestmatch);
85cd4372
SM
1380 tem = type == 3
1381 ? call2 (predicate, elt,
1382 HASH_VALUE (XHASH_TABLE (alist), index - 1))
1383 : call1 (predicate, elt);
f927c5ae
JB
1384 UNGCPRO;
1385 }
56a98455 1386 if (NILP (tem)) continue;
f927c5ae
JB
1387 }
1388
1389 /* Update computation of how much all possible completions match */
1390
56a98455 1391 if (NILP (bestmatch))
af2b7cd5 1392 {
85cd4372 1393 matchcount = 1;
af2b7cd5 1394 bestmatch = eltstring;
d5db4077 1395 bestmatchsize = SCHARS (eltstring);
af2b7cd5 1396 }
f927c5ae
JB
1397 else
1398 {
d5db4077 1399 compare = min (bestmatchsize, SCHARS (eltstring));
c8ae863b 1400 tem = Fcompare_strings (bestmatch, zero,
69f4ef20 1401 make_number (compare),
c8ae863b 1402 eltstring, zero,
69f4ef20
RS
1403 make_number (compare),
1404 completion_ignore_case ? Qt : Qnil);
1405 if (EQ (tem, Qt))
1406 matchsize = compare;
1407 else if (XINT (tem) < 0)
1408 matchsize = - XINT (tem) - 1;
1409 else
1410 matchsize = XINT (tem) - 1;
1411
52b14ac0 1412 if (matchsize < 0)
695deb18 1413 /* When can this happen ? -stef */
52b14ac0
JB
1414 matchsize = compare;
1415 if (completion_ignore_case)
1416 {
1417 /* If this is an exact match except for case,
1418 use it as the best match rather than one that is not an
1419 exact match. This way, we get the case pattern
1420 of the actual match. */
d5db4077
KR
1421 if ((matchsize == SCHARS (eltstring)
1422 && matchsize < SCHARS (bestmatch))
52b14ac0
JB
1423 ||
1424 /* If there is more than one exact match ignoring case,
1425 and one of them is exact including case,
1426 prefer that one. */
1427 /* If there is no exact match ignoring case,
1428 prefer a match that does not change the case
1429 of the input. */
d5db4077 1430 ((matchsize == SCHARS (eltstring))
52b14ac0 1431 ==
d5db4077 1432 (matchsize == SCHARS (bestmatch))
c8ae863b 1433 && (tem = Fcompare_strings (eltstring, zero,
d5db4077 1434 make_number (SCHARS (string)),
c8ae863b 1435 string, zero,
69f4ef20
RS
1436 Qnil,
1437 Qnil),
1438 EQ (Qt, tem))
c8ae863b 1439 && (tem = Fcompare_strings (bestmatch, zero,
d5db4077 1440 make_number (SCHARS (string)),
c8ae863b 1441 string, zero,
69f4ef20
RS
1442 Qnil,
1443 Qnil),
1444 ! EQ (Qt, tem))))
52b14ac0
JB
1445 bestmatch = eltstring;
1446 }
d5db4077 1447 if (bestmatchsize != SCHARS (eltstring)
85cd4372
SM
1448 || bestmatchsize != matchsize)
1449 /* Don't count the same string multiple times. */
1450 matchcount++;
52b14ac0 1451 bestmatchsize = matchsize;
d5db4077 1452 if (matchsize <= SCHARS (string)
695deb18
SM
1453 && matchcount > 1)
1454 /* No need to look any further. */
1455 break;
f927c5ae
JB
1456 }
1457 }
1458 }
1459
acd81db9
DK
1460 if (bindcount >= 0) {
1461 unbind_to (bindcount, Qnil);
1462 bindcount = -1;
1463 }
1464
56a98455 1465 if (NILP (bestmatch))
f927c5ae 1466 return Qnil; /* No completions found */
52b14ac0
JB
1467 /* If we are ignoring case, and there is no exact match,
1468 and no additional text was supplied,
1469 don't change the case of what the user typed. */
d5db4077
KR
1470 if (completion_ignore_case && bestmatchsize == SCHARS (string)
1471 && SCHARS (bestmatch) > bestmatchsize)
ec067ec7 1472 return minibuf_conform_representation (string, bestmatch);
52b14ac0
JB
1473
1474 /* Return t if the supplied string is an exact match (counting case);
1475 it does not require any change to be made. */
d5db4077 1476 if (matchcount == 1 && bestmatchsize == SCHARS (string)
69f4ef20
RS
1477 && (tem = Fcompare_strings (bestmatch, make_number (0),
1478 make_number (bestmatchsize),
1479 string, make_number (0),
1480 make_number (bestmatchsize),
1481 Qnil),
1482 EQ (Qt, tem)))
f927c5ae
JB
1483 return Qt;
1484
5a866662
KH
1485 XSETFASTINT (zero, 0); /* Else extract the part in which */
1486 XSETFASTINT (end, bestmatchsize); /* all completions agree */
f927c5ae
JB
1487 return Fsubstring (bestmatch, zero, end);
1488}
f927c5ae 1489\f
89a255dc 1490DEFUN ("all-completions", Fall_completions, Sall_completions, 2, 4, 0,
af52c32d 1491 doc: /* Search for partial matches to STRING in ALIST.
f9b9ccef 1492Each car of each element of ALIST (or each element if it is not a cons cell)
3809648a
KS
1493is tested to see if it begins with STRING. The possible matches may be
1494strings or symbols. Symbols are converted to strings before testing,
1495see `symbol-name'.
a1f17501
PJ
1496The value is a list of all the strings from ALIST that match.
1497
3809648a
KS
1498If ALIST is a hash-table, all the string and symbol keys are the
1499possible matches.
85cd4372
SM
1500If ALIST is an obarray, the names of all symbols in the obarray
1501are the possible matches.
a1f17501
PJ
1502
1503ALIST can also be a function to do the completion itself.
1504It receives three arguments: the values STRING, PREDICATE and t.
1505Whatever it returns becomes the value of `all-completions'.
1506
1507If optional third argument PREDICATE is non-nil,
1508it is used to test each possible match.
1509The match is a candidate only if PREDICATE returns non-nil.
1510The argument given to PREDICATE is the alist element
85cd4372
SM
1511or the symbol from the obarray. If ALIST is a hash-table,
1512predicate is called with two arguments: the key and the value.
a1f17501
PJ
1513Additionally to this predicate, `completion-regexp-list'
1514is used to further constrain the set of candidates.
1515
1516If the optional fourth argument HIDE-SPACES is non-nil,
1517strings in ALIST that start with a space
af52c32d
MB
1518are ignored unless STRING itself starts with a space. */)
1519 (string, alist, predicate, hide_spaces)
7efd36fc 1520 Lisp_Object string, alist, predicate, hide_spaces;
f927c5ae
JB
1521{
1522 Lisp_Object tail, elt, eltstring;
1523 Lisp_Object allmatches;
85cd4372
SM
1524 int type = HASH_TABLE_P (alist) ? 3
1525 : VECTORP (alist) ? 2
1526 : NILP (alist) || (CONSP (alist)
1527 && (!SYMBOLP (XCAR (alist))
1528 || NILP (XCAR (alist))));
6bbd7a29 1529 int index = 0, obsize = 0;
acd81db9 1530 int bindcount = -1;
c8ae863b 1531 Lisp_Object bucket, tem, zero;
f927c5ae
JB
1532 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
1533
b7826503 1534 CHECK_STRING (string);
85cd4372
SM
1535 if (type == 0)
1536 return call3 (alist, string, predicate, Qt);
6bbd7a29 1537 allmatches = bucket = Qnil;
c8ae863b 1538 zero = make_number (0);
f927c5ae
JB
1539
1540 /* If ALIST is not a list, set TAIL just for gc pro. */
1541 tail = alist;
85cd4372 1542 if (type == 2)
f927c5ae 1543 {
f927c5ae
JB
1544 obsize = XVECTOR (alist)->size;
1545 bucket = XVECTOR (alist)->contents[index];
1546 }
1547
1548 while (1)
1549 {
85cd4372 1550 /* Get the next element of the alist, obarray, or hash-table. */
f927c5ae
JB
1551 /* Exit the loop if the elements are all used up. */
1552 /* elt gets the alist element or symbol.
1553 eltstring gets the name to check as a completion. */
1554
85cd4372 1555 if (type == 1)
f927c5ae 1556 {
695deb18 1557 if (!CONSP (tail))
f927c5ae 1558 break;
695deb18
SM
1559 elt = XCAR (tail);
1560 eltstring = CONSP (elt) ? XCAR (elt) : elt;
1561 tail = XCDR (tail);
f927c5ae 1562 }
85cd4372 1563 else if (type == 2)
f927c5ae 1564 {
c8ae863b 1565 if (!EQ (bucket, zero))
f927c5ae
JB
1566 {
1567 elt = bucket;
3809648a 1568 eltstring = elt;
f927c5ae
JB
1569 if (XSYMBOL (bucket)->next)
1570 XSETSYMBOL (bucket, XSYMBOL (bucket)->next);
1571 else
5a866662 1572 XSETFASTINT (bucket, 0);
f927c5ae
JB
1573 }
1574 else if (++index >= obsize)
1575 break;
1576 else
1577 {
1578 bucket = XVECTOR (alist)->contents[index];
1579 continue;
1580 }
1581 }
85cd4372
SM
1582 else /* if (type == 3) */
1583 {
1584 while (index < HASH_TABLE_SIZE (XHASH_TABLE (alist))
1585 && NILP (HASH_HASH (XHASH_TABLE (alist), index)))
1586 index++;
1587 if (index >= HASH_TABLE_SIZE (XHASH_TABLE (alist)))
1588 break;
1589 else
1590 elt = eltstring = HASH_KEY (XHASH_TABLE (alist), index++);
1591 }
f927c5ae
JB
1592
1593 /* Is this element a possible completion? */
1594
3809648a
KS
1595 if (SYMBOLP (eltstring))
1596 eltstring = Fsymbol_name (eltstring);
1597
7510b296 1598 if (STRINGP (eltstring)
d5db4077 1599 && SCHARS (string) <= SCHARS (eltstring)
89a255dc 1600 /* If HIDE_SPACES, reject alternatives that start with space
2cbaf886 1601 unless the input starts with space. */
d5db4077
KR
1602 && ((SBYTES (string) > 0
1603 && SREF (string, 0) == ' ')
1604 || SREF (eltstring, 0) != ' '
89a255dc 1605 || NILP (hide_spaces))
c8ae863b 1606 && (tem = Fcompare_strings (eltstring, zero,
d5db4077 1607 make_number (SCHARS (string)),
c8ae863b 1608 string, zero,
d5db4077 1609 make_number (SCHARS (string)),
69f4ef20
RS
1610 completion_ignore_case ? Qt : Qnil),
1611 EQ (Qt, tem)))
f927c5ae
JB
1612 {
1613 /* Yes. */
42006772
RS
1614 Lisp_Object regexps;
1615 Lisp_Object zero;
5a866662 1616 XSETFASTINT (zero, 0);
42006772
RS
1617
1618 /* Ignore this element if it fails to match all the regexps. */
acd81db9
DK
1619 {
1620 for (regexps = Vcompletion_regexp_list; CONSP (regexps);
1621 regexps = XCDR (regexps))
1622 {
1623 if (bindcount < 0) {
1624 bindcount = SPECPDL_INDEX ();
1625 specbind (Qcase_fold_search,
1626 completion_ignore_case ? Qt : Qnil);
77443789 1627 }
acd81db9
DK
1628 tem = Fstring_match (XCAR (regexps), eltstring, zero);
1629 if (NILP (tem))
1630 break;
1631 }
1632 if (CONSP (regexps))
1633 continue;
1634 }
42006772 1635
f927c5ae
JB
1636 /* Ignore this element if there is a predicate
1637 and the predicate doesn't like it. */
1638
7efd36fc 1639 if (!NILP (predicate))
f927c5ae 1640 {
7efd36fc 1641 if (EQ (predicate, Qcommandp))
c837f4f9 1642 tem = Fcommandp (elt, Qnil);
f927c5ae
JB
1643 else
1644 {
acd81db9
DK
1645 if (bindcount >= 0) {
1646 unbind_to (bindcount, Qnil);
1647 bindcount = -1;
1648 }
f927c5ae 1649 GCPRO4 (tail, eltstring, allmatches, string);
85cd4372
SM
1650 tem = type == 3
1651 ? call2 (predicate, elt,
1652 HASH_VALUE (XHASH_TABLE (alist), index - 1))
1653 : call1 (predicate, elt);
f927c5ae
JB
1654 UNGCPRO;
1655 }
56a98455 1656 if (NILP (tem)) continue;
f927c5ae
JB
1657 }
1658 /* Ok => put it on the list. */
1659 allmatches = Fcons (eltstring, allmatches);
1660 }
1661 }
1662
acd81db9
DK
1663 if (bindcount >= 0) {
1664 unbind_to (bindcount, Qnil);
1665 bindcount = -1;
1666 }
1667
f927c5ae
JB
1668 return Fnreverse (allmatches);
1669}
1670\f
1671Lisp_Object Vminibuffer_completion_table, Qminibuffer_completion_table;
1672Lisp_Object Vminibuffer_completion_predicate, Qminibuffer_completion_predicate;
1673Lisp_Object Vminibuffer_completion_confirm, Qminibuffer_completion_confirm;
ccf330a6 1674Lisp_Object Vminibuffer_completing_file_name;
f927c5ae 1675
cee54539 1676DEFUN ("completing-read", Fcompleting_read, Scompleting_read, 2, 8, 0,
af52c32d 1677 doc: /* Read a string in the minibuffer, with completion.
a1f17501 1678PROMPT is a string to prompt with; normally it ends in a colon and a space.
b0c138ce 1679TABLE can be an list of strings, an alist, an obarray or a hash table.
a1f17501
PJ
1680TABLE can also be a function to do the completion itself.
1681PREDICATE limits completion to a subset of TABLE.
1682See `try-completion' and `all-completions' for more details
1683 on completion, TABLE, and PREDICATE.
1684
1685If REQUIRE-MATCH is non-nil, the user is not allowed to exit unless
1686 the input is (or completes to) an element of TABLE or is null.
345c105f 1687 If it is also not t, typing RET does not exit if it does non-null completion.
b0c138ce
LT
1688If the input is null, `completing-read' returns DEF, or an empty string
1689 if DEF is nil, regardless of the value of REQUIRE-MATCH.
1690
1691If INITIAL-INPUT is non-nil, insert it in the minibuffer initially,
1692 with point positioned at the end.
1693 If it is (STRING . POSITION), the initial input is STRING, but point
1694 is placed at _zero-indexed_ position POSITION in STRING. (*Note*
1695 that this is different from `read-from-minibuffer' and related
1696 functions, which use one-indexing for POSITION.) This feature is
1697 deprecated--it is best to pass nil for INITIAL-INPUT and supply the
1698 default value DEF instead. The user can yank the default value into
1699 the minibuffer easily using \\[next-history-element].
1700
1701HIST, if non-nil, specifies a history list and optionally the initial
1702 position in the list. It can be a symbol, which is the history list
1703 variable to use, or it can be a cons cell (HISTVAR . HISTPOS). In
1704 that case, HISTVAR is the history list variable to use, and HISTPOS
1705 is the initial position (the position in the list used by the
1706 minibuffer history commands). For consistency, you should also
1707 specify that element of the history as the value of
1fb101f3 1708 INITIAL-INPUT. (This is the only case in which you should use
b0c138ce
LT
1709 INITIAL-INPUT instead of DEF.) Positions are counted starting from
1710 1 at the beginning of the list. The variable `history-length'
1711 controls the maximum length of a history list.
38668f81 1712
a1f17501
PJ
1713DEF, if non-nil, is the default value.
1714
1715If INHERIT-INPUT-METHOD is non-nil, the minibuffer inherits
029a305c 1716 the current input method and the setting of `enable-multibyte-characters'.
a1f17501
PJ
1717
1718Completion ignores case if the ambient value of
af52c32d
MB
1719 `completion-ignore-case' is non-nil. */)
1720 (prompt, table, predicate, require_match, initial_input, hist, def, inherit_input_method)
d43f85c2
RS
1721 Lisp_Object prompt, table, predicate, require_match, initial_input;
1722 Lisp_Object hist, def, inherit_input_method;
f927c5ae 1723{
86408abd
LT
1724 Lisp_Object val, histvar, histpos, position;
1725 Lisp_Object init;
1726 int pos = 0;
aed13378 1727 int count = SPECPDL_INDEX ();
0c8ee1a2
RS
1728 struct gcpro gcpro1;
1729
86408abd 1730 init = initial_input;
0c8ee1a2
RS
1731 GCPRO1 (def);
1732
f927c5ae 1733 specbind (Qminibuffer_completion_table, table);
7efd36fc 1734 specbind (Qminibuffer_completion_predicate, predicate);
f927c5ae 1735 specbind (Qminibuffer_completion_confirm,
695deb18 1736 EQ (require_match, Qt) ? Qnil : require_match);
f927c5ae 1737 last_exact_completion = Qnil;
770970cb 1738
86408abd
LT
1739 position = Qnil;
1740 if (!NILP (init))
1741 {
1742 if (CONSP (init))
1743 {
1744 position = Fcdr (init);
1745 init = Fcar (init);
1746 }
1747 CHECK_STRING (init);
1748 if (!NILP (position))
1749 {
1750 CHECK_NUMBER (position);
1751 /* Convert to distance from end of input. */
1752 pos = XINT (position) - SCHARS (init);
1753 }
1754 }
1755
7510b296 1756 if (SYMBOLP (hist))
770970cb
RS
1757 {
1758 histvar = hist;
1759 histpos = Qnil;
1760 }
1761 else
1762 {
1763 histvar = Fcar_safe (hist);
1764 histpos = Fcdr_safe (hist);
1765 }
1766 if (NILP (histvar))
1767 histvar = Qminibuffer_history;
1768 if (NILP (histpos))
5a866662 1769 XSETFASTINT (histpos, 0);
770970cb 1770
56a98455 1771 val = read_minibuf (NILP (require_match)
bb0bdf70
EZ
1772 ? (NILP (Vminibuffer_completing_file_name)
1773 ? Vminibuffer_local_completion_map
1774 : Vminibuffer_local_filename_completion_map)
1775 : (NILP (Vminibuffer_completing_file_name)
1776 ? Vminibuffer_local_must_match_map
1777 : Vminibuffer_local_must_match_filename_map),
86408abd 1778 init, prompt, make_number (pos), 0,
cee54539 1779 histvar, histpos, def, 0,
b35cd215 1780 !NILP (inherit_input_method));
b9a86585 1781
d5db4077 1782 if (STRINGP (val) && SCHARS (val) == 0 && ! NILP (def))
b9a86585
RS
1783 val = def;
1784
0c8ee1a2 1785 RETURN_UNGCPRO (unbind_to (count, val));
f927c5ae
JB
1786}
1787\f
f927c5ae 1788Lisp_Object Fminibuffer_completion_help ();
695deb18 1789Lisp_Object Fassoc_string ();
5d2ca7ae
RS
1790
1791/* Test whether TXT is an exact completion. */
695deb18
SM
1792DEFUN ("test-completion", Ftest_completion, Stest_completion, 2, 3, 0,
1793 doc: /* Return non-nil if STRING is a valid completion.
1794Takes the same arguments as `all-completions' and `try-completion'.
1795If ALIST is a function, it is called with three arguments:
1796the values STRING, PREDICATE and `lambda'. */)
1797 (string, alist, predicate)
1798 Lisp_Object string, alist, predicate;
5d2ca7ae 1799{
adb0708c 1800 Lisp_Object regexps, tail, tem = Qnil;
85cd4372 1801 int i = 0;
5d2ca7ae 1802
695deb18
SM
1803 CHECK_STRING (string);
1804
1805 if ((CONSP (alist) && (!SYMBOLP (XCAR (alist)) || NILP (XCAR (alist))))
1806 || NILP (alist))
1807 {
1808 tem = Fassoc_string (string, alist, completion_ignore_case ? Qt : Qnil);
9f4a578d 1809 if (NILP (tem))
695deb18
SM
1810 return Qnil;
1811 }
1812 else if (VECTORP (alist))
5d2ca7ae 1813 {
695deb18
SM
1814 /* Bypass intern-soft as that loses for nil. */
1815 tem = oblookup (alist,
d5db4077
KR
1816 SDATA (string),
1817 SCHARS (string),
1818 SBYTES (string));
44472c88 1819 if (!SYMBOLP (tem))
9404446f 1820 {
695deb18
SM
1821 if (STRING_MULTIBYTE (string))
1822 string = Fstring_make_unibyte (string);
9404446f 1823 else
695deb18 1824 string = Fstring_make_multibyte (string);
9404446f 1825
adb0708c 1826 tem = oblookup (alist,
d5db4077
KR
1827 SDATA (string),
1828 SCHARS (string),
1829 SBYTES (string));
9404446f 1830 }
adb0708c
LT
1831
1832 if (completion_ignore_case && !SYMBOLP (tem))
1833 {
1834 for (i = XVECTOR (alist)->size - 1; i >= 0; i--)
1835 {
1836 tail = XVECTOR (alist)->contents[i];
1837 if (SYMBOLP (tail))
1838 while (1)
1839 {
1840 if (EQ((Fcompare_strings (string, make_number (0), Qnil,
1841 Fsymbol_name (tail),
1842 make_number (0) , Qnil, Qt)),
1843 Qt))
1844 {
1845 tem = tail;
1846 break;
1847 }
1848 if (XSYMBOL (tail)->next == 0)
1849 break;
1850 XSETSYMBOL (tail, XSYMBOL (tail)->next);
1851 }
1852 }
1853 }
1854
1855 if (!SYMBOLP (tem))
1856 return Qnil;
5d2ca7ae 1857 }
85cd4372
SM
1858 else if (HASH_TABLE_P (alist))
1859 {
adb0708c
LT
1860 struct Lisp_Hash_Table *h = XHASH_TABLE (alist);
1861 i = hash_lookup (h, string, NULL);
85cd4372 1862 if (i >= 0)
adb0708c 1863 tem = HASH_KEY (h, i);
85cd4372 1864 else
adb0708c
LT
1865 for (i = 0; i < HASH_TABLE_SIZE (h); ++i)
1866 if (!NILP (HASH_HASH (h, i)) &&
1867 EQ (Fcompare_strings (string, make_number (0), Qnil,
1868 HASH_KEY (h, i), make_number (0) , Qnil,
1869 completion_ignore_case ? Qt : Qnil),
1870 Qt))
1871 {
1872 tem = HASH_KEY (h, i);
1873 break;
1874 }
1875 if (!STRINGP (tem))
85cd4372
SM
1876 return Qnil;
1877 }
5d2ca7ae 1878 else
695deb18
SM
1879 return call3 (alist, string, predicate, Qlambda);
1880
1881 /* Reject this element if it fails to match all the regexps. */
77443789
AS
1882 if (CONSP (Vcompletion_regexp_list))
1883 {
1884 int count = SPECPDL_INDEX ();
1885 specbind (Qcase_fold_search, completion_ignore_case ? Qt : Qnil);
1886 for (regexps = Vcompletion_regexp_list; CONSP (regexps);
1887 regexps = XCDR (regexps))
1888 {
1889 if (NILP (Fstring_match (XCAR (regexps),
1890 SYMBOLP (tem) ? string : tem,
1891 Qnil)))
1892 return unbind_to (count, Qnil);
1893 }
1894 unbind_to (count, Qnil);
1895 }
695deb18
SM
1896
1897 /* Finally, check the predicate. */
1898 if (!NILP (predicate))
b0c138ce
LT
1899 {
1900 return HASH_TABLE_P (alist)
1901 ? call2 (predicate, tem, HASH_VALUE (XHASH_TABLE (alist), i))
1902 : call1 (predicate, tem);
1903 }
695deb18
SM
1904 else
1905 return Qt;
5d2ca7ae 1906}
f927c5ae 1907
655ea21c
JD
1908DEFUN ("internal-complete-buffer", Finternal_complete_buffer, Sinternal_complete_buffer, 3, 3, 0,
1909 doc: /* Perform completion on buffer names.
1910If the argument FLAG is nil, invoke `try-completion', if it's t, invoke
1911`all-completions', otherwise invoke `test-completion'.
1912
1913The arguments STRING and PREDICATE are as in `try-completion',
1914`all-completions', and `test-completion'. */)
1915 (string, predicate, flag)
1916 Lisp_Object string, predicate, flag;
1917{
1918 if (NILP (flag))
1919 return Ftry_completion (string, Vbuffer_alist, predicate);
1920 else if (EQ (flag, Qt))
1921 return Fall_completions (string, Vbuffer_alist, predicate, Qt);
1922 else /* assume `lambda' */
1923 return Ftest_completion (string, Vbuffer_alist, predicate);
1924}
1925
f927c5ae
JB
1926/* returns:
1927 * 0 no possible completion
1928 * 1 was already an exact and unique completion
1929 * 3 was already an exact completion
1930 * 4 completed to an exact completion
1931 * 5 some completion happened
1932 * 6 no completion happened
1933 */
1934int
1935do_completion ()
1936{
0c80756e 1937 Lisp_Object completion, string, tem;
f927c5ae
JB
1938 int completedp;
1939 Lisp_Object last;
1e00c2ff 1940 struct gcpro gcpro1, gcpro2;
f927c5ae 1941
b5e1e449 1942 completion = Ftry_completion (Fminibuffer_completion_contents (),
8e9968c6 1943 Vminibuffer_completion_table,
f927c5ae
JB
1944 Vminibuffer_completion_predicate);
1945 last = last_exact_completion;
1946 last_exact_completion = Qnil;
1947
4f9b95e5
KH
1948 GCPRO2 (completion, last);
1949
56a98455 1950 if (NILP (completion))
f927c5ae
JB
1951 {
1952 bitch_at_user ();
805221da 1953 temp_echo_area_glyphs (build_string (" [No match]"));
1e00c2ff 1954 UNGCPRO;
f927c5ae
JB
1955 return 0;
1956 }
1957
1958 if (EQ (completion, Qt)) /* exact and unique match */
1e00c2ff
KH
1959 {
1960 UNGCPRO;
1961 return 1;
1962 }
f927c5ae 1963
b5e1e449 1964 string = Fminibuffer_completion_contents ();
0c80756e
MB
1965
1966 /* COMPLETEDP should be true if some completion was done, which
1967 doesn't include simply changing the case of the entered string.
1968 However, for appearance, the string is rewritten if the case
1969 changes. */
1970 tem = Fcompare_strings (completion, Qnil, Qnil, string, Qnil, Qnil, Qt);
01cce3e7 1971 completedp = !EQ (tem, Qt);
0c80756e 1972
7892a68b
KH
1973 tem = Fcompare_strings (completion, Qnil, Qnil, string, Qnil, Qnil, Qnil);
1974 if (!EQ (tem, Qt))
0c80756e 1975 /* Rewrite the user's input. */
f927c5ae 1976 {
1011edb5
RS
1977 int prompt_end = XINT (Fminibuffer_prompt_end ());
1978 /* Some completion happened */
1979
1980 if (! NILP (Vminibuffer_completing_file_name)
d5db4077 1981 && SREF (completion, SBYTES (completion) - 1) == '/'
1011edb5
RS
1982 && PT < ZV
1983 && FETCH_CHAR (PT_BYTE) == '/')
1984 {
1985 del_range (prompt_end, PT + 1);
1986 }
1987 else
1988 del_range (prompt_end, PT);
1989
f927c5ae 1990 Finsert (1, &completion);
6e69ab8c
MB
1991
1992 if (! completedp)
1993 /* The case of the string changed, but that's all. We're not
1994 sure whether this is a unique completion or not, so try again
1995 using the real case (this shouldn't recurse again, because
1996 the next time try-completion will return either `t' or the
1997 exact string). */
1998 {
1999 UNGCPRO;
2000 return do_completion ();
2001 }
f927c5ae
JB
2002 }
2003
2004 /* It did find a match. Do we match some possibility exactly now? */
695deb18
SM
2005 tem = Ftest_completion (Fminibuffer_contents (),
2006 Vminibuffer_completion_table,
2007 Vminibuffer_completion_predicate);
56a98455 2008 if (NILP (tem))
1e00c2ff
KH
2009 {
2010 /* not an exact match */
2011 UNGCPRO;
f927c5ae
JB
2012 if (completedp)
2013 return 5;
739cc391 2014 else if (!NILP (Vcompletion_auto_help))
f927c5ae
JB
2015 Fminibuffer_completion_help ();
2016 else
805221da 2017 temp_echo_area_glyphs (build_string (" [Next char not unique]"));
f927c5ae
JB
2018 return 6;
2019 }
2020 else if (completedp)
1e00c2ff
KH
2021 {
2022 UNGCPRO;
2023 return 4;
2024 }
f927c5ae
JB
2025 /* If the last exact completion and this one were the same,
2026 it means we've already given a "Complete but not unique"
52b14ac0 2027 message and the user's hit TAB again, so now we give him help. */
f927c5ae 2028 last_exact_completion = completion;
56a98455 2029 if (!NILP (last))
f927c5ae 2030 {
b5e1e449 2031 tem = Fminibuffer_completion_contents ();
56a98455 2032 if (!NILP (Fequal (tem, last)))
f927c5ae
JB
2033 Fminibuffer_completion_help ();
2034 }
1e00c2ff 2035 UNGCPRO;
f927c5ae 2036 return 3;
f927c5ae 2037}
1e00c2ff 2038
52b14ac0
JB
2039/* Like assoc but assumes KEY is a string, and ignores case if appropriate. */
2040
695deb18
SM
2041DEFUN ("assoc-string", Fassoc_string, Sassoc_string, 2, 3, 0,
2042 doc: /* Like `assoc' but specifically for strings.
2043Unibyte strings are converted to multibyte for comparison.
2044And case is ignored if CASE-FOLD is non-nil.
2045As opposed to `assoc', it will also match an entry consisting of a single
2046string rather than a cons cell whose car is a string. */)
2047 (key, list, case_fold)
52b14ac0 2048 register Lisp_Object key;
695deb18 2049 Lisp_Object list, case_fold;
52b14ac0
JB
2050{
2051 register Lisp_Object tail;
2052
56a98455 2053 for (tail = list; !NILP (tail); tail = Fcdr (tail))
52b14ac0
JB
2054 {
2055 register Lisp_Object elt, tem, thiscar;
2056 elt = Fcar (tail);
695deb18 2057 thiscar = CONSP (elt) ? XCAR (elt) : elt;
7510b296 2058 if (!STRINGP (thiscar))
52b14ac0 2059 continue;
9404446f
RS
2060 tem = Fcompare_strings (thiscar, make_number (0), Qnil,
2061 key, make_number (0), Qnil,
695deb18 2062 case_fold);
9404446f
RS
2063 if (EQ (tem, Qt))
2064 return elt;
52b14ac0
JB
2065 QUIT;
2066 }
2067 return Qnil;
2068}
f927c5ae
JB
2069
2070DEFUN ("minibuffer-complete", Fminibuffer_complete, Sminibuffer_complete, 0, 0, "",
af52c32d 2071 doc: /* Complete the minibuffer contents as far as possible.
a1f17501
PJ
2072Return nil if there is no valid completion, else t.
2073If no characters can be completed, display a list of possible completions.
2074If you repeat this command after it displayed such a list,
af52c32d
MB
2075scroll the window of possible completions. */)
2076 ()
f927c5ae 2077{
2cb6da5c
RS
2078 register int i;
2079 Lisp_Object window, tem;
2080
df902b62
RS
2081 /* If the previous command was not this,
2082 mark the completion buffer obsolete. */
2083 if (! EQ (current_kboard->Vlast_command, Vthis_command))
2cb6da5c
RS
2084 Vminibuf_scroll_window = Qnil;
2085
2086 window = Vminibuf_scroll_window;
2087 /* If there's a fresh completion window with a live buffer,
2088 and this command is repeated, scroll that window. */
2089 if (! NILP (window) && ! NILP (XWINDOW (window)->buffer)
2090 && !NILP (XBUFFER (XWINDOW (window)->buffer)->name))
2091 {
2092 struct buffer *obuf = current_buffer;
2093
2094 Fset_buffer (XWINDOW (window)->buffer);
7d7c3861 2095 tem = Fpos_visible_in_window_p (make_number (ZV), window, Qnil);
2cb6da5c
RS
2096 if (! NILP (tem))
2097 /* If end is in view, scroll up to the beginning. */
b7df898e 2098 Fset_window_start (window, make_number (BEGV), Qnil);
2cb6da5c
RS
2099 else
2100 /* Else scroll down one screen. */
2101 Fscroll_other_window (Qnil);
2102
2103 set_buffer_internal (obuf);
2104 return Qnil;
2105 }
2106
2107 i = do_completion ();
f927c5ae
JB
2108 switch (i)
2109 {
2110 case 0:
2111 return Qnil;
2112
2113 case 1:
a1c5aa96
GM
2114 if (PT != ZV)
2115 Fgoto_char (make_number (ZV));
805221da 2116 temp_echo_area_glyphs (build_string (" [Sole completion]"));
f927c5ae
JB
2117 break;
2118
2119 case 3:
9994cc69
GM
2120 if (PT != ZV)
2121 Fgoto_char (make_number (ZV));
805221da 2122 temp_echo_area_glyphs (build_string (" [Complete, but not unique]"));
f927c5ae
JB
2123 break;
2124 }
2125
2126 return Qt;
2127}
e4c97a67
RS
2128\f
2129/* Subroutines of Fminibuffer_complete_and_exit. */
2130
2131/* This one is called by internal_condition_case to do the real work. */
2132
2133Lisp_Object
2134complete_and_exit_1 ()
2135{
2136 return make_number (do_completion ());
2137}
2138
2139/* This one is called by internal_condition_case if an error happens.
2140 Pretend the current value is an exact match. */
2141
2142Lisp_Object
2143complete_and_exit_2 (ignore)
2144 Lisp_Object ignore;
2145{
2146 return make_number (1);
2147}
f927c5ae 2148
d850b038
SM
2149EXFUN (Fexit_minibuffer, 0) NO_RETURN;
2150
f927c5ae 2151DEFUN ("minibuffer-complete-and-exit", Fminibuffer_complete_and_exit,
94c7167b 2152 Sminibuffer_complete_and_exit, 0, 0, "",
af52c32d 2153 doc: /* If the minibuffer contents is a valid completion then exit.
a1f17501 2154Otherwise try to complete it. If completion leads to a valid completion,
af52c32d
MB
2155a repetition of this command will exit. */)
2156 ()
f927c5ae
JB
2157{
2158 register int i;
7723a3e5 2159 Lisp_Object val, tem;
f927c5ae
JB
2160
2161 /* Allow user to specify null string */
a346ec72 2162 if (XINT (Fminibuffer_prompt_end ()) == ZV)
f927c5ae
JB
2163 goto exit;
2164
36baf3b7 2165 val = Fminibuffer_contents ();
7723a3e5
KR
2166 tem = Ftest_completion (val,
2167 Vminibuffer_completion_table,
2168 Vminibuffer_completion_predicate);
2169 if (!NILP (tem))
36baf3b7
RS
2170 {
2171 if (completion_ignore_case)
2172 { /* Fixup case of the field, if necessary. */
2173 Lisp_Object compl
2174 = Ftry_completion (val,
2175 Vminibuffer_completion_table,
2176 Vminibuffer_completion_predicate);
2177 if (STRINGP (compl)
2178 /* If it weren't for this piece of paranoia, I'd replace
2179 the whole thing with a call to do_completion. */
2180 && EQ (Flength (val), Flength (compl)))
2181 {
2182 del_range (XINT (Fminibuffer_prompt_end ()), ZV);
2183 Finsert (1, &compl);
2184 }
2185 }
2186 goto exit;
2187 }
2188
e4c97a67 2189 /* Call do_completion, but ignore errors. */
8db426c7 2190 SET_PT (ZV);
e4c97a67
RS
2191 val = internal_condition_case (complete_and_exit_1, Qerror,
2192 complete_and_exit_2);
2193
2194 i = XFASTINT (val);
f927c5ae
JB
2195 switch (i)
2196 {
2197 case 1:
2198 case 3:
2199 goto exit;
2200
2201 case 4:
56a98455 2202 if (!NILP (Vminibuffer_completion_confirm))
f927c5ae 2203 {
805221da 2204 temp_echo_area_glyphs (build_string (" [Confirm]"));
f927c5ae
JB
2205 return Qnil;
2206 }
2207 else
2208 goto exit;
2209
2210 default:
2211 return Qnil;
2212 }
2213 exit:
d850b038 2214 return Fexit_minibuffer ();
f927c5ae
JB
2215 /* NOTREACHED */
2216}
2217
2218DEFUN ("minibuffer-complete-word", Fminibuffer_complete_word, Sminibuffer_complete_word,
94c7167b 2219 0, 0, "",
af52c32d 2220 doc: /* Complete the minibuffer contents at most a single word.
a1f17501
PJ
2221After one word is completed as much as possible, a space or hyphen
2222is added, provided that matches some possible completion.
af52c32d
MB
2223Return nil if there is no valid completion, else t. */)
2224 ()
f927c5ae 2225{
69f4ef20 2226 Lisp_Object completion, tem, tem1;
af2b7cd5 2227 register int i, i_byte;
d7be4211 2228 struct gcpro gcpro1, gcpro2;
1011edb5 2229 int prompt_end_charpos = XINT (Fminibuffer_prompt_end ());
b278606c
BF
2230
2231 /* We keep calling Fbuffer_string rather than arrange for GC to
2232 hold onto a pointer to one of the strings thus made. */
f927c5ae 2233
b5e1e449 2234 completion = Ftry_completion (Fminibuffer_completion_contents (),
f927c5ae
JB
2235 Vminibuffer_completion_table,
2236 Vminibuffer_completion_predicate);
56a98455 2237 if (NILP (completion))
f927c5ae
JB
2238 {
2239 bitch_at_user ();
805221da 2240 temp_echo_area_glyphs (build_string (" [No match]"));
f927c5ae
JB
2241 return Qnil;
2242 }
2243 if (EQ (completion, Qt))
2244 return Qnil;
2245
b278606c 2246#if 0 /* How the below code used to look, for reference. */
a346ec72 2247 tem = Fminibuffer_contents ();
d5db4077
KR
2248 b = SDATA (tem);
2249 i = ZV - 1 - SCHARS (completion);
2250 p = SDATA (completion);
f927c5ae
JB
2251 if (i > 0 ||
2252 0 <= scmp (b, p, ZV - 1))
2253 {
2254 i = 1;
2255 /* Set buffer to longest match of buffer tail and completion head. */
2256 while (0 <= scmp (b + i, p, ZV - 1 - i))
2257 i++;
2258 del_range (1, i + 1);
2259 SET_PT (ZV);
2260 }
2261#else /* Rewritten code */
2262 {
69f4ef20 2263 int buffer_nchars, completion_nchars;
f927c5ae 2264
b7826503 2265 CHECK_STRING (completion);
b5e1e449 2266 tem = Fminibuffer_completion_contents ();
d7be4211 2267 GCPRO2 (completion, tem);
719b4a40
RS
2268 /* If reading a file name,
2269 expand any $ENVVAR refs in the buffer and in TEM. */
ccf330a6 2270 if (! NILP (Vminibuffer_completing_file_name))
719b4a40
RS
2271 {
2272 Lisp_Object substituted;
2273 substituted = Fsubstitute_in_file_name (tem);
2274 if (! EQ (substituted, tem))
2275 {
2276 tem = substituted;
1011edb5
RS
2277 del_range (prompt_end_charpos, PT);
2278 Finsert (1, &tem);
719b4a40
RS
2279 }
2280 }
d5db4077
KR
2281 buffer_nchars = SCHARS (tem); /* # chars in what we completed. */
2282 completion_nchars = SCHARS (completion);
69f4ef20
RS
2283 i = buffer_nchars - completion_nchars;
2284 if (i > 0
2285 ||
2286 (tem1 = Fcompare_strings (tem, make_number (0),
2287 make_number (buffer_nchars),
2288 completion, make_number (0),
2289 make_number (buffer_nchars),
2290 completion_ignore_case ? Qt : Qnil),
2291 ! EQ (tem1, Qt)))
f927c5ae 2292 {
69f4ef20
RS
2293 int start_pos;
2294
1011edb5
RS
2295 /* Make buffer (before point) contain the longest match
2296 of TEM's tail and COMPLETION's head. */
69f4ef20
RS
2297 if (i <= 0) i = 1;
2298 start_pos= i;
2299 buffer_nchars -= i;
669c6673 2300 while (i > 0)
69f4ef20 2301 {
669c6673 2302 tem1 = Fcompare_strings (tem, make_number (start_pos), Qnil,
69f4ef20
RS
2303 completion, make_number (0),
2304 make_number (buffer_nchars),
2305 completion_ignore_case ? Qt : Qnil);
2306 start_pos++;
2307 if (EQ (tem1, Qt))
2308 break;
2309 i++;
669c6673 2310 buffer_nchars--;
69f4ef20 2311 }
4f9f637a 2312 del_range (start_pos, start_pos + buffer_nchars);
f927c5ae 2313 }
d7be4211 2314 UNGCPRO;
f927c5ae
JB
2315 }
2316#endif /* Rewritten code */
9ab4a725 2317
279cf52c 2318 {
8e9968c6 2319 int prompt_end_bytepos;
279cf52c 2320 prompt_end_bytepos = CHAR_TO_BYTE (prompt_end_charpos);
1011edb5
RS
2321 i = PT - prompt_end_charpos;
2322 i_byte = PT_BYTE - prompt_end_bytepos;
279cf52c 2323 }
f927c5ae
JB
2324
2325 /* If completion finds next char not unique,
b278606c 2326 consider adding a space or a hyphen. */
d5db4077 2327 if (i == SCHARS (completion))
f927c5ae 2328 {
b278606c 2329 GCPRO1 (completion);
b5e1e449 2330 tem = Ftry_completion (concat2 (Fminibuffer_completion_contents (),
1011edb5 2331 build_string (" ")),
f927c5ae
JB
2332 Vminibuffer_completion_table,
2333 Vminibuffer_completion_predicate);
b278606c
BF
2334 UNGCPRO;
2335
7510b296 2336 if (STRINGP (tem))
f927c5ae
JB
2337 completion = tem;
2338 else
2339 {
b278606c
BF
2340 GCPRO1 (completion);
2341 tem =
b5e1e449 2342 Ftry_completion (concat2 (Fminibuffer_completion_contents (),
1011edb5 2343 build_string ("-")),
b278606c
BF
2344 Vminibuffer_completion_table,
2345 Vminibuffer_completion_predicate);
2346 UNGCPRO;
2347
7510b296 2348 if (STRINGP (tem))
f927c5ae
JB
2349 completion = tem;
2350 }
9ab4a725 2351 }
f927c5ae
JB
2352
2353 /* Now find first word-break in the stuff found by completion.
2354 i gets index in string of where to stop completing. */
d50a3d2a
KH
2355 {
2356 int len, c;
d5db4077 2357 int bytes = SBYTES (completion);
e8157eae 2358 register const unsigned char *completion_string = SDATA (completion);
d5db4077 2359 for (; i_byte < SBYTES (completion); i_byte += len, i++)
d50a3d2a 2360 {
af2b7cd5 2361 c = STRING_CHAR_AND_LENGTH (completion_string + i_byte,
54643b2c 2362 bytes - i_byte,
d50a3d2a
KH
2363 len);
2364 if (SYNTAX (c) != Sword)
2365 {
af2b7cd5
RS
2366 i_byte += len;
2367 i++;
d50a3d2a
KH
2368 break;
2369 }
2370 }
2371 }
f927c5ae
JB
2372
2373 /* If got no characters, print help for user. */
2374
1011edb5 2375 if (i == PT - prompt_end_charpos)
f927c5ae 2376 {
739cc391 2377 if (!NILP (Vcompletion_auto_help))
f927c5ae
JB
2378 Fminibuffer_completion_help ();
2379 return Qnil;
2380 }
2381
2382 /* Otherwise insert in minibuffer the chars we got */
2383
1011edb5 2384 if (! NILP (Vminibuffer_completing_file_name)
d5db4077 2385 && SREF (completion, SBYTES (completion) - 1) == '/'
1011edb5
RS
2386 && PT < ZV
2387 && FETCH_CHAR (PT_BYTE) == '/')
2388 {
2389 del_range (prompt_end_charpos, PT + 1);
2390 }
2391 else
2392 del_range (prompt_end_charpos, PT);
2393
af2b7cd5 2394 insert_from_string (completion, 0, 0, i, i_byte, 1);
f927c5ae
JB
2395 return Qt;
2396}
2397\f
2398DEFUN ("display-completion-list", Fdisplay_completion_list, Sdisplay_completion_list,
f5fab556 2399 1, 2, 0,
af52c32d 2400 doc: /* Display the list of completions, COMPLETIONS, using `standard-output'.
a1f17501
PJ
2401Each element may be just a symbol or string
2402or may be a list of two strings to be printed as if concatenated.
b0c138ce
LT
2403If it is a list of two strings, the first is the actual completion
2404alternative, the second serves as annotation.
a1f17501
PJ
2405`standard-output' must be a buffer.
2406The actual completion alternatives, as inserted, are given `mouse-face'
2407properties of `highlight'.
2408At the end, this runs the normal hook `completion-setup-hook'.
d6ae289c
KS
2409It can find the completion buffer in `standard-output'.
2410The optional second arg COMMON-SUBSTRING is a string.
128e729d 2411It is used to put faces, `completions-first-difference' and
26e9d2cf 2412`completions-common-part' on the completion buffer. The
f5fab556 2413`completions-common-part' face is put on the common substring
b5e1e449
JL
2414specified by COMMON-SUBSTRING. If COMMON-SUBSTRING is nil
2415and the current buffer is not the minibuffer, the faces are not put.
d6ae289c 2416Internally, COMMON-SUBSTRING is bound to `completion-common-substring'
f5fab556
MY
2417during running `completion-setup-hook'. */)
2418 (completions, common_substring)
f927c5ae 2419 Lisp_Object completions;
f5fab556 2420 Lisp_Object common_substring;
f927c5ae 2421{
dae36123 2422 Lisp_Object tail, elt;
f927c5ae 2423 register int i;
2dc2b736 2424 int column = 0;
f5fab556 2425 struct gcpro gcpro1, gcpro2, gcpro3;
2dc2b736 2426 struct buffer *old = current_buffer;
681f5af4 2427 int first = 1;
486cc7fb
RS
2428
2429 /* Note that (when it matters) every variable
dae36123
RS
2430 points to a non-string that is pointed to by COMPLETIONS,
2431 except for ELT. ELT can be pointing to a string
2432 when terpri or Findent_to calls a change hook. */
2433 elt = Qnil;
f5fab556 2434 GCPRO3 (completions, elt, common_substring);
486cc7fb 2435
7510b296 2436 if (BUFFERP (Vstandard_output))
2dc2b736 2437 set_buffer_internal (XBUFFER (Vstandard_output));
f927c5ae 2438
56a98455 2439 if (NILP (completions))
cfc736bf
RS
2440 write_string ("There are no possible completions of what you have typed.",
2441 -1);
f927c5ae
JB
2442 else
2443 {
2dc2b736 2444 write_string ("Possible completions are:", -1);
a425bd03 2445 for (tail = completions, i = 0; CONSP (tail); tail = XCDR (tail), i++)
f927c5ae 2446 {
ec067ec7 2447 Lisp_Object tem, string;
681f5af4 2448 int length;
47d7d104 2449 Lisp_Object startpos, endpos;
681f5af4 2450
6bbd7a29
GM
2451 startpos = Qnil;
2452
a425bd03 2453 elt = XCAR (tail);
b0c138ce
LT
2454 if (SYMBOLP (elt))
2455 elt = SYMBOL_NAME (elt);
681f5af4
RS
2456 /* Compute the length of this element. */
2457 if (CONSP (elt))
2458 {
49db96ce 2459 tem = XCAR (elt);
b7826503 2460 CHECK_STRING (tem);
d5db4077 2461 length = SCHARS (tem);
681f5af4 2462
49db96ce 2463 tem = Fcar (XCDR (elt));
b7826503 2464 CHECK_STRING (tem);
d5db4077 2465 length += SCHARS (tem);
681f5af4
RS
2466 }
2467 else
2468 {
b7826503 2469 CHECK_STRING (elt);
d5db4077 2470 length = SCHARS (elt);
681f5af4
RS
2471 }
2472
2473 /* This does a bad job for narrower than usual windows.
2474 Sadly, the window it will appear in is not known
2475 until after the text has been made. */
2476
47d7d104
RS
2477 if (BUFFERP (Vstandard_output))
2478 XSETINT (startpos, BUF_PT (XBUFFER (Vstandard_output)));
2479
681f5af4
RS
2480 /* If the previous completion was very wide,
2481 or we have two on this line already,
2482 don't put another on the same line. */
2483 if (column > 33 || first
2484 /* If this is really wide, don't put it second on a line. */
13c67cc6 2485 || (column > 0 && length > 45))
681f5af4
RS
2486 {
2487 Fterpri (Qnil);
2488 column = 0;
2489 }
2490 /* Otherwise advance to column 35. */
2491 else
2dc2b736 2492 {
7510b296 2493 if (BUFFERP (Vstandard_output))
681f5af4
RS
2494 {
2495 tem = Findent_to (make_number (35), make_number (2));
9ab4a725 2496
681f5af4
RS
2497 column = XINT (tem);
2498 }
2dc2b736
RS
2499 else
2500 {
2501 do
2502 {
2503 write_string (" ", -1);
2504 column++;
2505 }
2506 while (column < 35);
2507 }
2508 }
681f5af4 2509
47d7d104
RS
2510 if (BUFFERP (Vstandard_output))
2511 {
2512 XSETINT (endpos, BUF_PT (XBUFFER (Vstandard_output)));
2513 Fset_text_properties (startpos, endpos,
2514 Qnil, Vstandard_output);
2515 }
2516
ec067ec7 2517 /* Output this element.
9404446f 2518 If necessary, convert it to unibyte or to multibyte first. */
f927c5ae 2519 if (CONSP (elt))
ec067ec7 2520 string = Fcar (elt);
f927c5ae 2521 else
ec067ec7
RS
2522 string = elt;
2523 if (NILP (current_buffer->enable_multibyte_characters)
2524 && STRING_MULTIBYTE (string))
2525 string = Fstring_make_unibyte (string);
9404446f
RS
2526 else if (!NILP (current_buffer->enable_multibyte_characters)
2527 && !STRING_MULTIBYTE (string))
2528 string = Fstring_make_multibyte (string);
5744fa7c
RS
2529
2530 if (BUFFERP (Vstandard_output))
2531 {
4b37311e 2532 XSETINT (startpos, BUF_PT (XBUFFER (Vstandard_output)));
5744fa7c
RS
2533
2534 Fprinc (string, Qnil);
2535
4b37311e 2536 XSETINT (endpos, BUF_PT (XBUFFER (Vstandard_output)));
5744fa7c 2537
4b37311e 2538 Fput_text_property (startpos, endpos,
5744fa7c
RS
2539 Qmouse_face, intern ("highlight"),
2540 Vstandard_output);
2541 }
2542 else
2543 {
2544 Fprinc (string, Qnil);
2545 }
ec067ec7
RS
2546
2547 /* Output the annotation for this element. */
2548 if (CONSP (elt))
4b37311e
RS
2549 {
2550 if (BUFFERP (Vstandard_output))
2551 {
2552 XSETINT (startpos, BUF_PT (XBUFFER (Vstandard_output)));
2553
2554 Fprinc (Fcar (Fcdr (elt)), Qnil);
2555
2556 XSETINT (endpos, BUF_PT (XBUFFER (Vstandard_output)));
2557
2558 Fset_text_properties (startpos, endpos, Qnil,
2559 Vstandard_output);
2560 }
2561 else
2562 {
2563 Fprinc (Fcar (Fcdr (elt)), Qnil);
2564 }
2565 }
2566
681f5af4 2567
ec067ec7 2568 /* Update COLUMN for what we have output. */
681f5af4
RS
2569 column += length;
2570
2571 /* If output is to a buffer, recompute COLUMN in a way
2572 that takes account of character widths. */
2573 if (BUFFERP (Vstandard_output))
2dc2b736 2574 {
681f5af4
RS
2575 tem = Fcurrent_column ();
2576 column = XINT (tem);
2dc2b736 2577 }
681f5af4
RS
2578
2579 first = 0;
f927c5ae
JB
2580 }
2581 }
2dc2b736 2582
7510b296 2583 if (BUFFERP (Vstandard_output))
2d7e41fe
RS
2584 set_buffer_internal (old);
2585
cfc736bf 2586 if (!NILP (Vrun_hooks))
f5fab556
MY
2587 {
2588 int count1 = SPECPDL_INDEX ();
2589
2590 specbind (intern ("completion-common-substring"), common_substring);
2591 call1 (Vrun_hooks, intern ("completion-setup-hook"));
d6ae289c 2592
f5fab556
MY
2593 unbind_to (count1, Qnil);
2594 }
2595
2596 UNGCPRO;
cfc736bf 2597
f927c5ae
JB
2598 return Qnil;
2599}
2600
d6ae289c
KS
2601
2602static Lisp_Object
2603display_completion_list_1 (list)
2604 Lisp_Object list;
2605{
b5e1e449 2606 return Fdisplay_completion_list (list, Qnil);
d6ae289c
KS
2607}
2608
f927c5ae 2609DEFUN ("minibuffer-completion-help", Fminibuffer_completion_help, Sminibuffer_completion_help,
94c7167b 2610 0, 0, "",
af52c32d
MB
2611 doc: /* Display a list of possible completions of the current minibuffer contents. */)
2612 ()
f927c5ae
JB
2613{
2614 Lisp_Object completions;
2615
2616 message ("Making completion list...");
b5e1e449 2617 completions = Fall_completions (Fminibuffer_completion_contents (),
f927c5ae 2618 Vminibuffer_completion_table,
89a255dc
RS
2619 Vminibuffer_completion_predicate,
2620 Qt);
39e98b38 2621 clear_message (1, 0);
f927c5ae 2622
56a98455 2623 if (NILP (completions))
f927c5ae
JB
2624 {
2625 bitch_at_user ();
805221da 2626 temp_echo_area_glyphs (build_string (" [No completions]"));
f927c5ae
JB
2627 }
2628 else
a425bd03
SM
2629 {
2630 /* Sort and remove duplicates. */
2631 Lisp_Object tmp = completions = Fsort (completions, Qstring_lessp);
2632 while (CONSP (tmp))
2633 {
2634 if (CONSP (XCDR (tmp))
2635 && !NILP (Fequal (XCAR (tmp), XCAR (XCDR (tmp)))))
2636 XSETCDR (tmp, XCDR (XCDR (tmp)));
2637 else
2638 tmp = XCDR (tmp);
2639 }
2640 internal_with_output_to_temp_buffer ("*Completions*",
2641 display_completion_list_1,
2642 completions);
2643 }
f927c5ae
JB
2644 return Qnil;
2645}
2646\f
2647DEFUN ("self-insert-and-exit", Fself_insert_and_exit, Sself_insert_and_exit, 0, 0, "",
af52c32d
MB
2648 doc: /* Terminate minibuffer input. */)
2649 ()
f927c5ae 2650{
7510b296 2651 if (INTEGERP (last_command_char))
dab3ab3c 2652 internal_self_insert (XINT (last_command_char), 0);
f927c5ae
JB
2653 else
2654 bitch_at_user ();
2655
d850b038 2656 return Fexit_minibuffer ();
f927c5ae
JB
2657}
2658
2659DEFUN ("exit-minibuffer", Fexit_minibuffer, Sexit_minibuffer, 0, 0, "",
af52c32d
MB
2660 doc: /* Terminate this minibuffer argument. */)
2661 ()
f927c5ae 2662{
d850b038
SM
2663 /* If the command that uses this has made modifications in the minibuffer,
2664 we don't want them to cause deactivation of the mark in the original
2665 buffer.
2666 A better solution would be to make deactivate-mark buffer-local
2667 (or to turn it into a list of buffers, ...), but in the mean time,
2668 this should do the trick in most cases. */
2669 Vdeactivate_mark = Qnil;
2670 Fthrow (Qexit, Qnil);
f927c5ae
JB
2671}
2672
2673DEFUN ("minibuffer-depth", Fminibuffer_depth, Sminibuffer_depth, 0, 0, 0,
af52c32d
MB
2674 doc: /* Return current depth of activations of minibuffer, a nonnegative integer. */)
2675 ()
f927c5ae
JB
2676{
2677 return make_number (minibuf_level);
2678}
2679
37e9a934 2680DEFUN ("minibuffer-prompt", Fminibuffer_prompt, Sminibuffer_prompt, 0, 0, 0,
af52c32d
MB
2681 doc: /* Return the prompt string of the currently-active minibuffer.
2682If no minibuffer is active, return nil. */)
2683 ()
37e9a934 2684{
4d04c1f1 2685 return Fcopy_sequence (minibuf_prompt);
37e9a934
KH
2686}
2687
f927c5ae 2688\f
805221da 2689/* Temporarily display STRING at the end of the current
2d955a50
RS
2690 minibuffer contents. This is used to display things like
2691 "[No Match]" when the user requests a completion for a prefix
2692 that has no possible completions, and other quick, unobtrusive
2693 messages. */
2694
9d815fd9 2695void
805221da
KH
2696temp_echo_area_glyphs (string)
2697 Lisp_Object string;
2d955a50
RS
2698{
2699 int osize = ZV;
a9c26562 2700 int osize_byte = ZV_BYTE;
2d955a50 2701 int opoint = PT;
a9c26562 2702 int opoint_byte = PT_BYTE;
2d955a50
RS
2703 Lisp_Object oinhibit;
2704 oinhibit = Vinhibit_quit;
2705
2706 /* Clear out any old echo-area message to make way for our new thing. */
2707 message (0);
2708
a9c26562 2709 SET_PT_BOTH (osize, osize_byte);
805221da 2710 insert_from_string (string, 0, 0, SCHARS (string), SBYTES (string), 0);
a9c26562 2711 SET_PT_BOTH (opoint, opoint_byte);
2d955a50 2712 Vinhibit_quit = Qt;
7ca462f6 2713 sit_for (make_number (2), 0, 2);
bc69581b 2714 del_range_both (osize, osize_byte, ZV, ZV_BYTE, 1);
a9c26562 2715 SET_PT_BOTH (opoint, opoint_byte);
2d955a50
RS
2716 if (!NILP (Vquit_flag))
2717 {
2718 Vquit_flag = Qnil;
2719 Vunread_command_events = Fcons (make_number (quit_char), Qnil);
2720 }
2721 Vinhibit_quit = oinhibit;
2722}
2723
2724DEFUN ("minibuffer-message", Fminibuffer_message, Sminibuffer_message,
94c7167b 2725 1, 1, 0,
af52c32d 2726 doc: /* Temporarily display STRING at the end of the minibuffer.
1d69c502 2727The text is displayed for a period controlled by `minibuffer-message-timeout',
af52c32d
MB
2728or until the next input event arrives, whichever comes first. */)
2729 (string)
2d955a50
RS
2730 Lisp_Object string;
2731{
1a9e275b 2732 CHECK_STRING (string);
805221da 2733 temp_echo_area_glyphs (string);
2d955a50
RS
2734 return Qnil;
2735}
2736\f
9d815fd9 2737void
f927c5ae
JB
2738init_minibuf_once ()
2739{
2740 Vminibuffer_list = Qnil;
2741 staticpro (&Vminibuffer_list);
2742}
2743
9d815fd9 2744void
f927c5ae
JB
2745syms_of_minibuf ()
2746{
2747 minibuf_level = 0;
4d04c1f1
KH
2748 minibuf_prompt = Qnil;
2749 staticpro (&minibuf_prompt);
2750
2751 minibuf_save_list = Qnil;
2752 staticpro (&minibuf_save_list);
f927c5ae 2753
719b4a40
RS
2754 Qread_file_name_internal = intern ("read-file-name-internal");
2755 staticpro (&Qread_file_name_internal);
2756
e5d4686b
RS
2757 Qminibuffer_default = intern ("minibuffer-default");
2758 staticpro (&Qminibuffer_default);
2759 Fset (Qminibuffer_default, Qnil);
2760
f927c5ae
JB
2761 Qminibuffer_completion_table = intern ("minibuffer-completion-table");
2762 staticpro (&Qminibuffer_completion_table);
2763
2764 Qminibuffer_completion_confirm = intern ("minibuffer-completion-confirm");
2765 staticpro (&Qminibuffer_completion_confirm);
2766
2767 Qminibuffer_completion_predicate = intern ("minibuffer-completion-predicate");
2768 staticpro (&Qminibuffer_completion_predicate);
2769
1e00c2ff
KH
2770 staticpro (&last_exact_completion);
2771 last_exact_completion = Qnil;
2772
f927c5ae
JB
2773 staticpro (&last_minibuf_string);
2774 last_minibuf_string = Qnil;
2775
2776 Quser_variable_p = intern ("user-variable-p");
2777 staticpro (&Quser_variable_p);
2778
770970cb
RS
2779 Qminibuffer_history = intern ("minibuffer-history");
2780 staticpro (&Qminibuffer_history);
f927c5ae 2781
406e55df
RS
2782 Qbuffer_name_history = intern ("buffer-name-history");
2783 staticpro (&Qbuffer_name_history);
33d0a17f 2784 Fset (Qbuffer_name_history, Qnil);
406e55df 2785
5c781212
RS
2786 Qminibuffer_setup_hook = intern ("minibuffer-setup-hook");
2787 staticpro (&Qminibuffer_setup_hook);
2788
177aecf9
KH
2789 Qminibuffer_exit_hook = intern ("minibuffer-exit-hook");
2790 staticpro (&Qminibuffer_exit_hook);
2791
77aa8edf
RS
2792 Qhistory_length = intern ("history-length");
2793 staticpro (&Qhistory_length);
2794
cee54539
KH
2795 Qcurrent_input_method = intern ("current-input-method");
2796 staticpro (&Qcurrent_input_method);
2797
2798 Qactivate_input_method = intern ("activate-input-method");
2799 staticpro (&Qactivate_input_method);
2800
b0c138ce
LT
2801 Qcase_fold_search = intern ("case-fold-search");
2802 staticpro (&Qcase_fold_search);
2803
af52c32d
MB
2804 DEFVAR_LISP ("read-buffer-function", &Vread_buffer_function,
2805 doc: /* If this is non-nil, `read-buffer' does its work by calling this function. */);
eebbfb01
KH
2806 Vread_buffer_function = Qnil;
2807
af52c32d
MB
2808 DEFVAR_LISP ("minibuffer-setup-hook", &Vminibuffer_setup_hook,
2809 doc: /* Normal hook run just after entry to minibuffer. */);
5c781212
RS
2810 Vminibuffer_setup_hook = Qnil;
2811
af52c32d
MB
2812 DEFVAR_LISP ("minibuffer-exit-hook", &Vminibuffer_exit_hook,
2813 doc: /* Normal hook run just after exit from minibuffer. */);
177aecf9
KH
2814 Vminibuffer_exit_hook = Qnil;
2815
af52c32d
MB
2816 DEFVAR_LISP ("history-length", &Vhistory_length,
2817 doc: /* *Maximum length for history lists before truncation takes place.
a1f17501 2818A number means that length; t means infinite. Truncation takes place
f4b46bb9 2819just after a new element is inserted. Setting the `history-length'
a1f17501 2820property of a history variable overrides this default. */);
77aa8edf
RS
2821 XSETFASTINT (Vhistory_length, 30);
2822
0da4d471
JL
2823 DEFVAR_BOOL ("history-delete-duplicates", &history_delete_duplicates,
2824 doc: /* *Non-nil means to delete duplicates in history.
2825If set to t when adding a new history element, all previous identical
179a4ca7 2826elements are deleted from the history list. */);
0da4d471
JL
2827 history_delete_duplicates = 0;
2828
179a4ca7
JL
2829 DEFVAR_LISP ("history-add-new-input", &Vhistory_add_new_input,
2830 doc: /* *Non-nil means to add new elements in history.
2831If set to nil, minibuffer reading functions don't add new elements to the
2832history list, so it is possible to do this afterwards by calling
2833`add-to-history' explicitly. */);
2834 Vhistory_add_new_input = Qt;
2835
af52c32d 2836 DEFVAR_LISP ("completion-auto-help", &Vcompletion_auto_help,
0ca23eef
EZ
2837 doc: /* *Non-nil means automatically provide help for invalid completion input.
2838Under Partial Completion mode, a non-nil, non-t value has a special meaning;
2839see the doc string of `partial-completion-mode' for more details. */);
739cc391 2840 Vcompletion_auto_help = Qt;
f927c5ae 2841
af52c32d 2842 DEFVAR_BOOL ("completion-ignore-case", &completion_ignore_case,
75028673
JPW
2843 doc: /* Non-nil means don't consider case significant in completion.
2844
d9a03ad2
RS
2845For file-name completion, the variable `read-file-name-completion-ignore-case'
2846controls the behavior, rather than this variable. */);
f927c5ae
JB
2847 completion_ignore_case = 0;
2848
af52c32d
MB
2849 DEFVAR_BOOL ("enable-recursive-minibuffers", &enable_recursive_minibuffers,
2850 doc: /* *Non-nil means to allow minibuffer commands while in the minibuffer.
a1f17501 2851This variable makes a difference whenever the minibuffer window is active. */);
f927c5ae
JB
2852 enable_recursive_minibuffers = 0;
2853
af52c32d
MB
2854 DEFVAR_LISP ("minibuffer-completion-table", &Vminibuffer_completion_table,
2855 doc: /* Alist or obarray used for completion in the minibuffer.
b0c138ce
LT
2856This becomes the ALIST argument to `try-completion' and `all-completions'.
2857The value can also be a list of strings or a hash table.
a1f17501
PJ
2858
2859The value may alternatively be a function, which is given three arguments:
2860 STRING, the current buffer contents;
2861 PREDICATE, the predicate for filtering possible matches;
2862 CODE, which says what kind of things to do.
2863CODE can be nil, t or `lambda'.
2864nil means to return the best completion of STRING, or nil if there is none.
2865t means to return a list of all possible completions of STRING.
2866`lambda' means to return t if STRING is a valid completion as it stands. */);
f927c5ae
JB
2867 Vminibuffer_completion_table = Qnil;
2868
af52c32d
MB
2869 DEFVAR_LISP ("minibuffer-completion-predicate", &Vminibuffer_completion_predicate,
2870 doc: /* Within call to `completing-read', this holds the PREDICATE argument. */);
f927c5ae
JB
2871 Vminibuffer_completion_predicate = Qnil;
2872
af52c32d 2873 DEFVAR_LISP ("minibuffer-completion-confirm", &Vminibuffer_completion_confirm,
fd771ceb 2874 doc: /* Non-nil means to demand confirmation of completion before exiting minibuffer. */);
f927c5ae
JB
2875 Vminibuffer_completion_confirm = Qnil;
2876
ccf330a6 2877 DEFVAR_LISP ("minibuffer-completing-file-name",
af52c32d
MB
2878 &Vminibuffer_completing_file_name,
2879 doc: /* Non-nil means completing file names. */);
ccf330a6
RS
2880 Vminibuffer_completing_file_name = Qnil;
2881
af52c32d
MB
2882 DEFVAR_LISP ("minibuffer-help-form", &Vminibuffer_help_form,
2883 doc: /* Value that `help-form' takes on inside the minibuffer. */);
f927c5ae
JB
2884 Vminibuffer_help_form = Qnil;
2885
af52c32d
MB
2886 DEFVAR_LISP ("minibuffer-history-variable", &Vminibuffer_history_variable,
2887 doc: /* History list symbol to add minibuffer values to.
a1f17501
PJ
2888Each string of minibuffer input, as it appears on exit from the minibuffer,
2889is added with
2890 (set minibuffer-history-variable
2891 (cons STRING (symbol-value minibuffer-history-variable))) */);
5a866662 2892 XSETFASTINT (Vminibuffer_history_variable, 0);
770970cb 2893
af52c32d
MB
2894 DEFVAR_LISP ("minibuffer-history-position", &Vminibuffer_history_position,
2895 doc: /* Current position of redoing in the history list. */);
770970cb
RS
2896 Vminibuffer_history_position = Qnil;
2897
af52c32d
MB
2898 DEFVAR_BOOL ("minibuffer-auto-raise", &minibuffer_auto_raise,
2899 doc: /* *Non-nil means entering the minibuffer raises the minibuffer's frame.
a1f17501 2900Some uses of the echo area also raise that frame (since they use it too). */);
6a9ee000
RS
2901 minibuffer_auto_raise = 0;
2902
af52c32d 2903 DEFVAR_LISP ("completion-regexp-list", &Vcompletion_regexp_list,
b0c138ce
LT
2904 doc: /* List of regexps that should restrict possible completions.
2905The basic completion functions only consider a completion acceptable
2906if it matches all regular expressions in this list, with
2907`case-fold-search' bound to the value of `completion-ignore-case'.
2908See Info node `(elisp)Basic Completion', for a description of these
2909functions. */);
42006772
RS
2910 Vcompletion_regexp_list = Qnil;
2911
c3421833 2912 DEFVAR_BOOL ("minibuffer-allow-text-properties",
af52c32d
MB
2913 &minibuffer_allow_text_properties,
2914 doc: /* Non-nil means `read-from-minibuffer' should not discard text properties.
a1f17501
PJ
2915This also affects `read-string', but it does not affect `read-minibuffer',
2916`read-no-blanks-input', or any of the functions that do minibuffer input
2917with completion; they always discard text properties. */);
c3421833
RS
2918 minibuffer_allow_text_properties = 0;
2919
af52c32d
MB
2920 DEFVAR_LISP ("minibuffer-prompt-properties", &Vminibuffer_prompt_properties,
2921 doc: /* Text properties that are added to minibuffer prompts.
a1f17501
PJ
2922These are in addition to the basic `field' property, and stickiness
2923properties. */);
cc64f5c9
MB
2924 /* We use `intern' here instead of Qread_only to avoid
2925 initialization-order problems. */
2926 Vminibuffer_prompt_properties
2927 = Fcons (intern ("read-only"), Fcons (Qt, Qnil));
2928
68313ed8 2929 defsubr (&Sset_minibuffer_window);
f927c5ae
JB
2930 defsubr (&Sread_from_minibuffer);
2931 defsubr (&Seval_minibuffer);
2932 defsubr (&Sread_minibuffer);
2933 defsubr (&Sread_string);
2934 defsubr (&Sread_command);
2935 defsubr (&Sread_variable);
ff137f16 2936 defsubr (&Sinternal_complete_buffer);
f927c5ae
JB
2937 defsubr (&Sread_buffer);
2938 defsubr (&Sread_no_blanks_input);
2939 defsubr (&Sminibuffer_depth);
37e9a934 2940 defsubr (&Sminibuffer_prompt);
f927c5ae 2941
873ef78e 2942 defsubr (&Sminibufferp);
a346ec72
MB
2943 defsubr (&Sminibuffer_prompt_end);
2944 defsubr (&Sminibuffer_contents);
2945 defsubr (&Sminibuffer_contents_no_properties);
b5e1e449 2946 defsubr (&Sminibuffer_completion_contents);
a346ec72
MB
2947 defsubr (&Sdelete_minibuffer_contents);
2948
f927c5ae
JB
2949 defsubr (&Stry_completion);
2950 defsubr (&Sall_completions);
695deb18
SM
2951 defsubr (&Stest_completion);
2952 defsubr (&Sassoc_string);
f927c5ae
JB
2953 defsubr (&Scompleting_read);
2954 defsubr (&Sminibuffer_complete);
2955 defsubr (&Sminibuffer_complete_word);
2956 defsubr (&Sminibuffer_complete_and_exit);
2957 defsubr (&Sdisplay_completion_list);
2958 defsubr (&Sminibuffer_completion_help);
2959
2960 defsubr (&Sself_insert_and_exit);
2961 defsubr (&Sexit_minibuffer);
2962
2d955a50 2963 defsubr (&Sminibuffer_message);
f927c5ae
JB
2964}
2965
9d815fd9 2966void
f927c5ae
JB
2967keys_of_minibuf ()
2968{
2969 initial_define_key (Vminibuffer_local_map, Ctl ('g'),
2970 "abort-recursive-edit");
2971 initial_define_key (Vminibuffer_local_map, Ctl ('m'),
2972 "exit-minibuffer");
2973 initial_define_key (Vminibuffer_local_map, Ctl ('j'),
2974 "exit-minibuffer");
2975
f927c5ae
JB
2976 initial_define_key (Vminibuffer_local_ns_map, ' ',
2977 "exit-minibuffer");
2978 initial_define_key (Vminibuffer_local_ns_map, '\t',
2979 "exit-minibuffer");
2980 initial_define_key (Vminibuffer_local_ns_map, '?',
2981 "self-insert-and-exit");
2982
f927c5ae
JB
2983 initial_define_key (Vminibuffer_local_completion_map, '\t',
2984 "minibuffer-complete");
2985 initial_define_key (Vminibuffer_local_completion_map, ' ',
2986 "minibuffer-complete-word");
2987 initial_define_key (Vminibuffer_local_completion_map, '?',
2988 "minibuffer-completion-help");
2989
da8ec671
SM
2990 Fdefine_key (Vminibuffer_local_filename_completion_map,
2991 build_string (" "), Qnil);
bb0bdf70 2992
f927c5ae
JB
2993 initial_define_key (Vminibuffer_local_must_match_map, Ctl ('m'),
2994 "minibuffer-complete-and-exit");
2995 initial_define_key (Vminibuffer_local_must_match_map, Ctl ('j'),
2996 "minibuffer-complete-and-exit");
bb0bdf70 2997
5203cd03
JL
2998 Fdefine_key (Vminibuffer_local_must_match_filename_map,
2999 build_string (" "), Qnil);
f927c5ae 3000}
ab5796a9
MB
3001
3002/* arch-tag: 8f69b601-fba3-484c-a6dd-ceaee54a7a73
3003 (do not change this comment) */