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