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