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