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