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