(Fprocess_send_region): Convert move_gap argument to int.
[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
618 keymap = get_keymap (keymap,2);
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
JB
1159 int count = specpdl_ptr - specpdl;
1160 specbind (Qminibuffer_completion_table, table);
7efd36fc 1161 specbind (Qminibuffer_completion_predicate, predicate);
f927c5ae
JB
1162 specbind (Qminibuffer_completion_confirm,
1163 EQ (require_match, Qt) ? Qnil : Qt);
1164 last_exact_completion = Qnil;
770970cb
RS
1165
1166 position = Qnil;
1167 if (!NILP (init))
1168 {
7510b296 1169 if (CONSP (init))
770970cb
RS
1170 {
1171 position = Fcdr (init);
1172 init = Fcar (init);
1173 }
1174 CHECK_STRING (init, 0);
1175 if (!NILP (position))
1176 {
1177 CHECK_NUMBER (position, 0);
1178 /* Convert to distance from end of input. */
5dadd3a2 1179 pos = XINT (position) - XSTRING (init)->size;
770970cb
RS
1180 }
1181 }
1182
7510b296 1183 if (SYMBOLP (hist))
770970cb
RS
1184 {
1185 histvar = hist;
1186 histpos = Qnil;
1187 }
1188 else
1189 {
1190 histvar = Fcar_safe (hist);
1191 histpos = Fcdr_safe (hist);
1192 }
1193 if (NILP (histvar))
1194 histvar = Qminibuffer_history;
1195 if (NILP (histpos))
5a866662 1196 XSETFASTINT (histpos, 0);
770970cb 1197
56a98455 1198 val = read_minibuf (NILP (require_match)
f927c5ae
JB
1199 ? Vminibuffer_local_completion_map
1200 : Vminibuffer_local_must_match_map,
85b5fe07 1201 init, prompt, make_number (pos), 0,
c3421833 1202 histvar, histpos, def, 0);
e5d4686b
RS
1203 if (STRINGP (val) && XSTRING (val)->size == 0 && ! NILP (def))
1204 val = def;
f927c5ae
JB
1205 return unbind_to (count, val);
1206}
1207\f
f927c5ae 1208Lisp_Object Fminibuffer_completion_help ();
52b14ac0 1209Lisp_Object assoc_for_completion ();
5d2ca7ae
RS
1210/* A subroutine of Fintern_soft. */
1211extern Lisp_Object oblookup ();
1212
1213
1214/* Test whether TXT is an exact completion. */
1215Lisp_Object
1216test_completion (txt)
1217 Lisp_Object txt;
1218{
1219 Lisp_Object tem;
1220
1221 if (CONSP (Vminibuffer_completion_table)
1222 || NILP (Vminibuffer_completion_table))
1223 return assoc_for_completion (txt, Vminibuffer_completion_table);
1224 else if (VECTORP (Vminibuffer_completion_table))
1225 {
1226 /* Bypass intern-soft as that loses for nil */
1227 tem = oblookup (Vminibuffer_completion_table,
1228 XSTRING (txt)->data, XSTRING (txt)->size);
44472c88 1229 if (!SYMBOLP (tem))
5d2ca7ae
RS
1230 return Qnil;
1231 else if (!NILP (Vminibuffer_completion_predicate))
1232 return call1 (Vminibuffer_completion_predicate, tem);
1233 else
1234 return Qt;
1235 }
1236 else
1237 return call3 (Vminibuffer_completion_table, txt,
1238 Vminibuffer_completion_predicate, Qlambda);
1239}
f927c5ae
JB
1240
1241/* returns:
1242 * 0 no possible completion
1243 * 1 was already an exact and unique completion
1244 * 3 was already an exact completion
1245 * 4 completed to an exact completion
1246 * 5 some completion happened
1247 * 6 no completion happened
1248 */
1249int
1250do_completion ()
1251{
1252 Lisp_Object completion, tem;
1253 int completedp;
1254 Lisp_Object last;
1e00c2ff 1255 struct gcpro gcpro1, gcpro2;
f927c5ae
JB
1256
1257 completion = Ftry_completion (Fbuffer_string (), Vminibuffer_completion_table,
1258 Vminibuffer_completion_predicate);
1259 last = last_exact_completion;
1260 last_exact_completion = Qnil;
1261
4f9b95e5
KH
1262 GCPRO2 (completion, last);
1263
56a98455 1264 if (NILP (completion))
f927c5ae
JB
1265 {
1266 bitch_at_user ();
1267 temp_echo_area_glyphs (" [No match]");
1e00c2ff 1268 UNGCPRO;
f927c5ae
JB
1269 return 0;
1270 }
1271
1272 if (EQ (completion, Qt)) /* exact and unique match */
1e00c2ff
KH
1273 {
1274 UNGCPRO;
1275 return 1;
1276 }
f927c5ae
JB
1277
1278 /* compiler bug */
1279 tem = Fstring_equal (completion, Fbuffer_string());
56a98455 1280 if (completedp = NILP (tem))
f927c5ae
JB
1281 {
1282 Ferase_buffer (); /* Some completion happened */
1283 Finsert (1, &completion);
1284 }
1285
1286 /* It did find a match. Do we match some possibility exactly now? */
5d2ca7ae 1287 tem = test_completion (Fbuffer_string ());
56a98455 1288 if (NILP (tem))
1e00c2ff
KH
1289 {
1290 /* not an exact match */
1291 UNGCPRO;
f927c5ae
JB
1292 if (completedp)
1293 return 5;
1294 else if (auto_help)
1295 Fminibuffer_completion_help ();
1296 else
1297 temp_echo_area_glyphs (" [Next char not unique]");
1298 return 6;
1299 }
1300 else if (completedp)
1e00c2ff
KH
1301 {
1302 UNGCPRO;
1303 return 4;
1304 }
f927c5ae
JB
1305 /* If the last exact completion and this one were the same,
1306 it means we've already given a "Complete but not unique"
52b14ac0 1307 message and the user's hit TAB again, so now we give him help. */
f927c5ae 1308 last_exact_completion = completion;
56a98455 1309 if (!NILP (last))
f927c5ae
JB
1310 {
1311 tem = Fbuffer_string ();
56a98455 1312 if (!NILP (Fequal (tem, last)))
f927c5ae
JB
1313 Fminibuffer_completion_help ();
1314 }
1e00c2ff 1315 UNGCPRO;
f927c5ae 1316 return 3;
f927c5ae 1317}
1e00c2ff 1318
52b14ac0
JB
1319/* Like assoc but assumes KEY is a string, and ignores case if appropriate. */
1320
1321Lisp_Object
1322assoc_for_completion (key, list)
1323 register Lisp_Object key;
1324 Lisp_Object list;
1325{
1326 register Lisp_Object tail;
1327
1328 if (completion_ignore_case)
1329 key = Fupcase (key);
1330
56a98455 1331 for (tail = list; !NILP (tail); tail = Fcdr (tail))
52b14ac0
JB
1332 {
1333 register Lisp_Object elt, tem, thiscar;
1334 elt = Fcar (tail);
1335 if (!CONSP (elt)) continue;
1336 thiscar = Fcar (elt);
7510b296 1337 if (!STRINGP (thiscar))
52b14ac0
JB
1338 continue;
1339 if (completion_ignore_case)
1340 thiscar = Fupcase (thiscar);
1341 tem = Fequal (thiscar, key);
56a98455 1342 if (!NILP (tem)) return elt;
52b14ac0
JB
1343 QUIT;
1344 }
1345 return Qnil;
1346}
f927c5ae
JB
1347
1348DEFUN ("minibuffer-complete", Fminibuffer_complete, Sminibuffer_complete, 0, 0, "",
6300d782 1349 "Complete the minibuffer contents as far as possible.\n\
2cb6da5c
RS
1350Return nil if there is no valid completion, else t.\n\
1351If no characters can be completed, display a list of possible completions.\n\
1352If you repeat this command after it displayed such a list,\n\
1353scroll the window of possible completions.")
f927c5ae
JB
1354 ()
1355{
2cb6da5c
RS
1356 register int i;
1357 Lisp_Object window, tem;
1358
1359 /* If the previous command was not this, then mark the completion
1360 buffer obsolete. */
5221fd63 1361 if (! EQ (current_kboard->Vlast_command, this_command))
2cb6da5c
RS
1362 Vminibuf_scroll_window = Qnil;
1363
1364 window = Vminibuf_scroll_window;
1365 /* If there's a fresh completion window with a live buffer,
1366 and this command is repeated, scroll that window. */
1367 if (! NILP (window) && ! NILP (XWINDOW (window)->buffer)
1368 && !NILP (XBUFFER (XWINDOW (window)->buffer)->name))
1369 {
1370 struct buffer *obuf = current_buffer;
1371
1372 Fset_buffer (XWINDOW (window)->buffer);
1373 tem = Fpos_visible_in_window_p (make_number (ZV), window);
1374 if (! NILP (tem))
1375 /* If end is in view, scroll up to the beginning. */
8768d630 1376 Fset_window_start (window, BEGV, Qnil);
2cb6da5c
RS
1377 else
1378 /* Else scroll down one screen. */
1379 Fscroll_other_window (Qnil);
1380
1381 set_buffer_internal (obuf);
1382 return Qnil;
1383 }
1384
1385 i = do_completion ();
f927c5ae
JB
1386 switch (i)
1387 {
1388 case 0:
1389 return Qnil;
1390
1391 case 1:
1392 temp_echo_area_glyphs (" [Sole completion]");
1393 break;
1394
1395 case 3:
1396 temp_echo_area_glyphs (" [Complete, but not unique]");
1397 break;
1398 }
1399
1400 return Qt;
1401}
e4c97a67
RS
1402\f
1403/* Subroutines of Fminibuffer_complete_and_exit. */
1404
1405/* This one is called by internal_condition_case to do the real work. */
1406
1407Lisp_Object
1408complete_and_exit_1 ()
1409{
1410 return make_number (do_completion ());
1411}
1412
1413/* This one is called by internal_condition_case if an error happens.
1414 Pretend the current value is an exact match. */
1415
1416Lisp_Object
1417complete_and_exit_2 (ignore)
1418 Lisp_Object ignore;
1419{
1420 return make_number (1);
1421}
f927c5ae
JB
1422
1423DEFUN ("minibuffer-complete-and-exit", Fminibuffer_complete_and_exit,
1424 Sminibuffer_complete_and_exit, 0, 0, "",
5d2ca7ae
RS
1425 "If the minibuffer contents is a valid completion then exit.\n\
1426Otherwise try to complete it. If completion leads to a valid completion,\n\
f927c5ae
JB
1427a repetition of this command will exit.")
1428 ()
1429{
1430 register int i;
e4c97a67 1431 Lisp_Object val;
f927c5ae
JB
1432
1433 /* Allow user to specify null string */
1434 if (BEGV == ZV)
1435 goto exit;
1436
5d2ca7ae
RS
1437 if (!NILP (test_completion (Fbuffer_string ())))
1438 goto exit;
1439
e4c97a67
RS
1440 /* Call do_completion, but ignore errors. */
1441 val = internal_condition_case (complete_and_exit_1, Qerror,
1442 complete_and_exit_2);
1443
1444 i = XFASTINT (val);
f927c5ae
JB
1445 switch (i)
1446 {
1447 case 1:
1448 case 3:
1449 goto exit;
1450
1451 case 4:
56a98455 1452 if (!NILP (Vminibuffer_completion_confirm))
f927c5ae
JB
1453 {
1454 temp_echo_area_glyphs (" [Confirm]");
1455 return Qnil;
1456 }
1457 else
1458 goto exit;
1459
1460 default:
1461 return Qnil;
1462 }
1463 exit:
1464 Fthrow (Qexit, Qnil);
1465 /* NOTREACHED */
1466}
1467
1468DEFUN ("minibuffer-complete-word", Fminibuffer_complete_word, Sminibuffer_complete_word,
1469 0, 0, "",
1470 "Complete the minibuffer contents at most a single word.\n\
1471After one word is completed as much as possible, a space or hyphen\n\
6300d782
KH
1472is added, provided that matches some possible completion.\n\
1473Return nil if there is no valid completion, else t.")
f927c5ae
JB
1474 ()
1475{
1476 Lisp_Object completion, tem;
1477 register int i;
1478 register unsigned char *completion_string;
d7be4211 1479 struct gcpro gcpro1, gcpro2;
b278606c
BF
1480
1481 /* We keep calling Fbuffer_string rather than arrange for GC to
1482 hold onto a pointer to one of the strings thus made. */
f927c5ae
JB
1483
1484 completion = Ftry_completion (Fbuffer_string (),
1485 Vminibuffer_completion_table,
1486 Vminibuffer_completion_predicate);
56a98455 1487 if (NILP (completion))
f927c5ae
JB
1488 {
1489 bitch_at_user ();
1490 temp_echo_area_glyphs (" [No match]");
1491 return Qnil;
1492 }
1493 if (EQ (completion, Qt))
1494 return Qnil;
1495
b278606c 1496#if 0 /* How the below code used to look, for reference. */
f927c5ae
JB
1497 tem = Fbuffer_string ();
1498 b = XSTRING (tem)->data;
1499 i = ZV - 1 - XSTRING (completion)->size;
1500 p = XSTRING (completion)->data;
1501 if (i > 0 ||
1502 0 <= scmp (b, p, ZV - 1))
1503 {
1504 i = 1;
1505 /* Set buffer to longest match of buffer tail and completion head. */
1506 while (0 <= scmp (b + i, p, ZV - 1 - i))
1507 i++;
1508 del_range (1, i + 1);
1509 SET_PT (ZV);
1510 }
1511#else /* Rewritten code */
1512 {
1513 register unsigned char *buffer_string;
1514 int buffer_length, completion_length;
1515
59860a8c 1516 CHECK_STRING (completion, 0);
f927c5ae 1517 tem = Fbuffer_string ();
d7be4211 1518 GCPRO2 (completion, tem);
719b4a40
RS
1519 /* If reading a file name,
1520 expand any $ENVVAR refs in the buffer and in TEM. */
1521 if (EQ (Vminibuffer_completion_table, Qread_file_name_internal))
1522 {
1523 Lisp_Object substituted;
1524 substituted = Fsubstitute_in_file_name (tem);
1525 if (! EQ (substituted, tem))
1526 {
1527 tem = substituted;
1528 Ferase_buffer ();
3cab9ae4 1529 insert_from_string (tem, 0, XSTRING (tem)->size, 0);
719b4a40
RS
1530 }
1531 }
f927c5ae
JB
1532 buffer_string = XSTRING (tem)->data;
1533 completion_string = XSTRING (completion)->data;
1534 buffer_length = XSTRING (tem)->size; /* ie ZV - BEGV */
1535 completion_length = XSTRING (completion)->size;
1536 i = buffer_length - completion_length;
1537 /* Mly: I don't understand what this is supposed to do AT ALL */
1538 if (i > 0 ||
1539 0 <= scmp (buffer_string, completion_string, buffer_length))
1540 {
1541 /* Set buffer to longest match of buffer tail and completion head. */
1542 if (i <= 0) i = 1;
1543 buffer_string += i;
1544 buffer_length -= i;
1545 while (0 <= scmp (buffer_string++, completion_string, buffer_length--))
1546 i++;
1547 del_range (1, i + 1);
1548 SET_PT (ZV);
1549 }
d7be4211 1550 UNGCPRO;
f927c5ae
JB
1551 }
1552#endif /* Rewritten code */
1553 i = ZV - BEGV;
1554
1555 /* If completion finds next char not unique,
b278606c 1556 consider adding a space or a hyphen. */
f927c5ae
JB
1557 if (i == XSTRING (completion)->size)
1558 {
b278606c 1559 GCPRO1 (completion);
f927c5ae
JB
1560 tem = Ftry_completion (concat2 (Fbuffer_string (), build_string (" ")),
1561 Vminibuffer_completion_table,
1562 Vminibuffer_completion_predicate);
b278606c
BF
1563 UNGCPRO;
1564
7510b296 1565 if (STRINGP (tem))
f927c5ae
JB
1566 completion = tem;
1567 else
1568 {
b278606c
BF
1569 GCPRO1 (completion);
1570 tem =
1571 Ftry_completion (concat2 (Fbuffer_string (), build_string ("-")),
1572 Vminibuffer_completion_table,
1573 Vminibuffer_completion_predicate);
1574 UNGCPRO;
1575
7510b296 1576 if (STRINGP (tem))
f927c5ae
JB
1577 completion = tem;
1578 }
1579 }
1580
1581 /* Now find first word-break in the stuff found by completion.
1582 i gets index in string of where to stop completing. */
d50a3d2a
KH
1583 {
1584 int len, c;
b278606c 1585
d50a3d2a
KH
1586 completion_string = XSTRING (completion)->data;
1587 for (; i < XSTRING (completion)->size; i += len)
1588 {
1589 c = STRING_CHAR_AND_LENGTH (completion_string + i,
1590 XSTRING (completion)->size - i,
1591 len);
1592 if (SYNTAX (c) != Sword)
1593 {
1594 i += len;
1595 break;
1596 }
1597 }
1598 }
f927c5ae
JB
1599
1600 /* If got no characters, print help for user. */
1601
1602 if (i == ZV - BEGV)
1603 {
1604 if (auto_help)
1605 Fminibuffer_completion_help ();
1606 return Qnil;
1607 }
1608
1609 /* Otherwise insert in minibuffer the chars we got */
1610
1611 Ferase_buffer ();
3cab9ae4 1612 insert_from_string (completion, 0, i, 1);
f927c5ae
JB
1613 return Qt;
1614}
1615\f
1616DEFUN ("display-completion-list", Fdisplay_completion_list, Sdisplay_completion_list,
1617 1, 1, 0,
2dc2b736 1618 "Display the list of completions, COMPLETIONS, using `standard-output'.\n\
f927c5ae 1619Each element may be just a symbol or string\n\
2d7e41fe
RS
1620or may be a list of two strings to be printed as if concatenated.\n\
1621`standard-output' must be a buffer.\n\
1622At the end, run the normal hook `completion-setup-hook'.\n\
1623It can find the completion buffer in `standard-output'.")
f927c5ae
JB
1624 (completions)
1625 Lisp_Object completions;
1626{
dae36123 1627 Lisp_Object tail, elt;
f927c5ae 1628 register int i;
2dc2b736 1629 int column = 0;
dae36123 1630 struct gcpro gcpro1, gcpro2;
2dc2b736 1631 struct buffer *old = current_buffer;
681f5af4 1632 int first = 1;
486cc7fb
RS
1633
1634 /* Note that (when it matters) every variable
dae36123
RS
1635 points to a non-string that is pointed to by COMPLETIONS,
1636 except for ELT. ELT can be pointing to a string
1637 when terpri or Findent_to calls a change hook. */
1638 elt = Qnil;
1639 GCPRO2 (completions, elt);
486cc7fb 1640
7510b296 1641 if (BUFFERP (Vstandard_output))
2dc2b736 1642 set_buffer_internal (XBUFFER (Vstandard_output));
f927c5ae 1643
56a98455 1644 if (NILP (completions))
cfc736bf
RS
1645 write_string ("There are no possible completions of what you have typed.",
1646 -1);
f927c5ae
JB
1647 else
1648 {
2dc2b736 1649 write_string ("Possible completions are:", -1);
56a98455 1650 for (tail = completions, i = 0; !NILP (tail); tail = Fcdr (tail), i++)
f927c5ae 1651 {
681f5af4
RS
1652 Lisp_Object tem;
1653 int length;
47d7d104 1654 Lisp_Object startpos, endpos;
681f5af4
RS
1655
1656 elt = Fcar (tail);
1657 /* Compute the length of this element. */
1658 if (CONSP (elt))
1659 {
49db96ce 1660 tem = XCAR (elt);
681f5af4 1661 CHECK_STRING (tem, 0);
49db96ce 1662 length = XSTRING (tem)->size;
681f5af4 1663
49db96ce 1664 tem = Fcar (XCDR (elt));
681f5af4 1665 CHECK_STRING (tem, 0);
49db96ce 1666 length += XSTRING (tem)->size;
681f5af4
RS
1667 }
1668 else
1669 {
1670 CHECK_STRING (elt, 0);
49db96ce 1671 length = XSTRING (elt)->size;
681f5af4
RS
1672 }
1673
1674 /* This does a bad job for narrower than usual windows.
1675 Sadly, the window it will appear in is not known
1676 until after the text has been made. */
1677
47d7d104
RS
1678 if (BUFFERP (Vstandard_output))
1679 XSETINT (startpos, BUF_PT (XBUFFER (Vstandard_output)));
1680
681f5af4
RS
1681 /* If the previous completion was very wide,
1682 or we have two on this line already,
1683 don't put another on the same line. */
1684 if (column > 33 || first
1685 /* If this is really wide, don't put it second on a line. */
1686 || column > 0 && length > 45)
1687 {
1688 Fterpri (Qnil);
1689 column = 0;
1690 }
1691 /* Otherwise advance to column 35. */
1692 else
2dc2b736 1693 {
7510b296 1694 if (BUFFERP (Vstandard_output))
681f5af4
RS
1695 {
1696 tem = Findent_to (make_number (35), make_number (2));
47d7d104 1697
681f5af4
RS
1698 column = XINT (tem);
1699 }
2dc2b736
RS
1700 else
1701 {
1702 do
1703 {
1704 write_string (" ", -1);
1705 column++;
1706 }
1707 while (column < 35);
1708 }
1709 }
681f5af4 1710
47d7d104
RS
1711 if (BUFFERP (Vstandard_output))
1712 {
1713 XSETINT (endpos, BUF_PT (XBUFFER (Vstandard_output)));
1714 Fset_text_properties (startpos, endpos,
1715 Qnil, Vstandard_output);
1716 }
1717
681f5af4 1718 /* Output this element and update COLUMN. */
f927c5ae
JB
1719 if (CONSP (elt))
1720 {
1721 Fprinc (Fcar (elt), Qnil);
1722 Fprinc (Fcar (Fcdr (elt)), Qnil);
1723 }
1724 else
681f5af4
RS
1725 Fprinc (elt, Qnil);
1726
1727 column += length;
1728
1729 /* If output is to a buffer, recompute COLUMN in a way
1730 that takes account of character widths. */
1731 if (BUFFERP (Vstandard_output))
2dc2b736 1732 {
681f5af4
RS
1733 tem = Fcurrent_column ();
1734 column = XINT (tem);
2dc2b736 1735 }
681f5af4
RS
1736
1737 first = 0;
f927c5ae
JB
1738 }
1739 }
2dc2b736 1740
486cc7fb
RS
1741 UNGCPRO;
1742
7510b296 1743 if (BUFFERP (Vstandard_output))
2d7e41fe
RS
1744 set_buffer_internal (old);
1745
cfc736bf
RS
1746 if (!NILP (Vrun_hooks))
1747 call1 (Vrun_hooks, intern ("completion-setup-hook"));
1748
f927c5ae
JB
1749 return Qnil;
1750}
1751
1752DEFUN ("minibuffer-completion-help", Fminibuffer_completion_help, Sminibuffer_completion_help,
1753 0, 0, "",
1754 "Display a list of possible completions of the current minibuffer contents.")
1755 ()
1756{
1757 Lisp_Object completions;
1758
1759 message ("Making completion list...");
1760 completions = Fall_completions (Fbuffer_string (),
1761 Vminibuffer_completion_table,
89a255dc
RS
1762 Vminibuffer_completion_predicate,
1763 Qt);
f927c5ae
JB
1764 echo_area_glyphs = 0;
1765
56a98455 1766 if (NILP (completions))
f927c5ae
JB
1767 {
1768 bitch_at_user ();
1769 temp_echo_area_glyphs (" [No completions]");
1770 }
1771 else
1772 internal_with_output_to_temp_buffer ("*Completions*",
1773 Fdisplay_completion_list,
1774 Fsort (completions, Qstring_lessp));
1775 return Qnil;
1776}
1777\f
1778DEFUN ("self-insert-and-exit", Fself_insert_and_exit, Sself_insert_and_exit, 0, 0, "",
1779 "Terminate minibuffer input.")
1780 ()
1781{
7510b296 1782 if (INTEGERP (last_command_char))
f927c5ae
JB
1783 internal_self_insert (last_command_char, 0);
1784 else
1785 bitch_at_user ();
1786
1787 Fthrow (Qexit, Qnil);
1788}
1789
1790DEFUN ("exit-minibuffer", Fexit_minibuffer, Sexit_minibuffer, 0, 0, "",
1791 "Terminate this minibuffer argument.")
1792 ()
1793{
1794 Fthrow (Qexit, Qnil);
1795}
1796
1797DEFUN ("minibuffer-depth", Fminibuffer_depth, Sminibuffer_depth, 0, 0, 0,
1798 "Return current depth of activations of minibuffer, a nonnegative integer.")
1799 ()
1800{
1801 return make_number (minibuf_level);
1802}
1803
37e9a934
KH
1804DEFUN ("minibuffer-prompt", Fminibuffer_prompt, Sminibuffer_prompt, 0, 0, 0,
1805 "Return the prompt string of the currently-active minibuffer.\n\
1806If no minibuffer is active, return nil.")
1807 ()
1808{
4d04c1f1 1809 return Fcopy_sequence (minibuf_prompt);
37e9a934
KH
1810}
1811
1812DEFUN ("minibuffer-prompt-width", Fminibuffer_prompt_width,
1813 Sminibuffer_prompt_width, 0, 0, 0,
c5896ef4 1814 "Return the display width of the minibuffer prompt.")
37e9a934
KH
1815 ()
1816{
1817 Lisp_Object width;
5a866662 1818 XSETFASTINT (width, minibuf_prompt_width);
37e9a934
KH
1819 return width;
1820}
f927c5ae 1821\f
2d955a50
RS
1822/* Temporarily display the string M at the end of the current
1823 minibuffer contents. This is used to display things like
1824 "[No Match]" when the user requests a completion for a prefix
1825 that has no possible completions, and other quick, unobtrusive
1826 messages. */
1827
1828temp_echo_area_glyphs (m)
1829 char *m;
1830{
1831 int osize = ZV;
1832 int opoint = PT;
1833 Lisp_Object oinhibit;
1834 oinhibit = Vinhibit_quit;
1835
1836 /* Clear out any old echo-area message to make way for our new thing. */
1837 message (0);
1838
1839 SET_PT (osize);
1840 insert_string (m);
1841 SET_PT (opoint);
1842 Vinhibit_quit = Qt;
1843 Fsit_for (make_number (2), Qnil, Qnil);
1844 del_range (osize, ZV);
1845 SET_PT (opoint);
1846 if (!NILP (Vquit_flag))
1847 {
1848 Vquit_flag = Qnil;
1849 Vunread_command_events = Fcons (make_number (quit_char), Qnil);
1850 }
1851 Vinhibit_quit = oinhibit;
1852}
1853
1854DEFUN ("minibuffer-message", Fminibuffer_message, Sminibuffer_message,
1855 1, 1, 0,
1856 "Temporarily display STRING at the end of the minibuffer.\n\
1857The text is displayed for two seconds,\n\
1858or until the next input event arrives, whichever comes first.")
1859 (string)
1860 Lisp_Object string;
1861{
1862 temp_echo_area_glyphs (XSTRING (string)->data);
1863 return Qnil;
1864}
1865\f
f927c5ae
JB
1866init_minibuf_once ()
1867{
1868 Vminibuffer_list = Qnil;
1869 staticpro (&Vminibuffer_list);
1870}
1871
1872syms_of_minibuf ()
1873{
1874 minibuf_level = 0;
4d04c1f1
KH
1875 minibuf_prompt = Qnil;
1876 staticpro (&minibuf_prompt);
1877
1878 minibuf_save_list = Qnil;
1879 staticpro (&minibuf_save_list);
f927c5ae 1880
719b4a40
RS
1881 Qread_file_name_internal = intern ("read-file-name-internal");
1882 staticpro (&Qread_file_name_internal);
1883
e5d4686b
RS
1884 Qminibuffer_default = intern ("minibuffer-default");
1885 staticpro (&Qminibuffer_default);
1886 Fset (Qminibuffer_default, Qnil);
1887
f927c5ae
JB
1888 Qminibuffer_completion_table = intern ("minibuffer-completion-table");
1889 staticpro (&Qminibuffer_completion_table);
1890
1891 Qminibuffer_completion_confirm = intern ("minibuffer-completion-confirm");
1892 staticpro (&Qminibuffer_completion_confirm);
1893
1894 Qminibuffer_completion_predicate = intern ("minibuffer-completion-predicate");
1895 staticpro (&Qminibuffer_completion_predicate);
1896
1e00c2ff
KH
1897 staticpro (&last_exact_completion);
1898 last_exact_completion = Qnil;
1899
f927c5ae
JB
1900 staticpro (&last_minibuf_string);
1901 last_minibuf_string = Qnil;
1902
1903 Quser_variable_p = intern ("user-variable-p");
1904 staticpro (&Quser_variable_p);
1905
770970cb
RS
1906 Qminibuffer_history = intern ("minibuffer-history");
1907 staticpro (&Qminibuffer_history);
f927c5ae 1908
5c781212
RS
1909 Qminibuffer_setup_hook = intern ("minibuffer-setup-hook");
1910 staticpro (&Qminibuffer_setup_hook);
1911
177aecf9
KH
1912 Qminibuffer_exit_hook = intern ("minibuffer-exit-hook");
1913 staticpro (&Qminibuffer_exit_hook);
1914
77aa8edf
RS
1915 Qhistory_length = intern ("history-length");
1916 staticpro (&Qhistory_length);
1917
5c781212
RS
1918 DEFVAR_LISP ("minibuffer-setup-hook", &Vminibuffer_setup_hook,
1919 "Normal hook run just after entry to minibuffer.");
1920 Vminibuffer_setup_hook = Qnil;
1921
177aecf9
KH
1922 DEFVAR_LISP ("minibuffer-exit-hook", &Vminibuffer_exit_hook,
1923 "Normal hook run just after exit from minibuffer.");
1924 Vminibuffer_exit_hook = Qnil;
1925
77aa8edf
RS
1926 DEFVAR_LISP ("history-length", &Vhistory_length,
1927 "*Maximum length for history lists before truncation takes place.\n\
1928A number means that length; t means infinite. Truncation takes place\n\
1929just after a new element is inserted. Setting the history-length\n\
1930property of a history variable overrides this default.");
1931 XSETFASTINT (Vhistory_length, 30);
1932
f927c5ae
JB
1933 DEFVAR_BOOL ("completion-auto-help", &auto_help,
1934 "*Non-nil means automatically provide help for invalid completion input.");
1935 auto_help = 1;
1936
1937 DEFVAR_BOOL ("completion-ignore-case", &completion_ignore_case,
1938 "Non-nil means don't consider case significant in completion.");
1939 completion_ignore_case = 0;
1940
1941 DEFVAR_BOOL ("enable-recursive-minibuffers", &enable_recursive_minibuffers,
1942 "*Non-nil means to allow minibuffer commands while in the minibuffer.\n\
1943More precisely, this variable makes a difference when the minibuffer window\n\
1944is the selected window. If you are in some other window, minibuffer commands\n\
1945are allowed even if a minibuffer is active.");
1946 enable_recursive_minibuffers = 0;
1947
1948 DEFVAR_LISP ("minibuffer-completion-table", &Vminibuffer_completion_table,
1949 "Alist or obarray used for completion in the minibuffer.\n\
1950This becomes the ALIST argument to `try-completion' and `all-completion'.\n\
1951\n\
1952The value may alternatively be a function, which is given three arguments:\n\
1953 STRING, the current buffer contents;\n\
1954 PREDICATE, the predicate for filtering possible matches;\n\
1955 CODE, which says what kind of things to do.\n\
1956CODE can be nil, t or `lambda'.\n\
1957nil means to return the best completion of STRING, or nil if there is none.\n\
1958t means to return a list of all possible completions of STRING.\n\
1959`lambda' means to return t if STRING is a valid completion as it stands.");
1960 Vminibuffer_completion_table = Qnil;
1961
1962 DEFVAR_LISP ("minibuffer-completion-predicate", &Vminibuffer_completion_predicate,
1963 "Within call to `completing-read', this holds the PREDICATE argument.");
1964 Vminibuffer_completion_predicate = Qnil;
1965
1966 DEFVAR_LISP ("minibuffer-completion-confirm", &Vminibuffer_completion_confirm,
1967 "Non-nil => demand confirmation of completion before exiting minibuffer.");
1968 Vminibuffer_completion_confirm = Qnil;
1969
1970 DEFVAR_LISP ("minibuffer-help-form", &Vminibuffer_help_form,
1971 "Value that `help-form' takes on inside the minibuffer.");
1972 Vminibuffer_help_form = Qnil;
1973
770970cb
RS
1974 DEFVAR_LISP ("minibuffer-history-variable", &Vminibuffer_history_variable,
1975 "History list symbol to add minibuffer values to.\n\
2fa2413b
RS
1976Each string of minibuffer input, as it appears on exit from the minibuffer,\n\
1977is added with\n\
770970cb
RS
1978 (set minibuffer-history-variable\n\
1979 (cons STRING (symbol-value minibuffer-history-variable)))");
5a866662 1980 XSETFASTINT (Vminibuffer_history_variable, 0);
770970cb
RS
1981
1982 DEFVAR_LISP ("minibuffer-history-position", &Vminibuffer_history_position,
1983 "Current position of redoing in the history list.");
1984 Vminibuffer_history_position = Qnil;
1985
6a9ee000 1986 DEFVAR_BOOL ("minibuffer-auto-raise", &minibuffer_auto_raise,
e98bcc1a
RS
1987 "*Non-nil means entering the minibuffer raises the minibuffer's frame.\n\
1988Some uses of the echo area also raise that frame (since they use it too).");
6a9ee000
RS
1989 minibuffer_auto_raise = 0;
1990
42006772
RS
1991 DEFVAR_LISP ("completion-regexp-list", &Vcompletion_regexp_list,
1992 "List of regexps that should restrict possible completions.");
1993 Vcompletion_regexp_list = Qnil;
1994
c3421833
RS
1995 DEFVAR_BOOL ("minibuffer-allow-text-properties",
1996 &minibuffer_allow_text_properties,
1997 "Non-nil means `read-from-miniffer' should not discard text properties.\n\
1998This also affects `read-string', but it does not affect `read-minibuffer',\n\
1999`read-no-blanks-input', or any of the functions that do minibuffer input\n\
2bfbde2b 2000with completion; they always discard text properties.");
c3421833
RS
2001 minibuffer_allow_text_properties = 0;
2002
68313ed8 2003 defsubr (&Sset_minibuffer_window);
f927c5ae
JB
2004 defsubr (&Sread_from_minibuffer);
2005 defsubr (&Seval_minibuffer);
2006 defsubr (&Sread_minibuffer);
2007 defsubr (&Sread_string);
2008 defsubr (&Sread_command);
2009 defsubr (&Sread_variable);
2010 defsubr (&Sread_buffer);
2011 defsubr (&Sread_no_blanks_input);
2012 defsubr (&Sminibuffer_depth);
37e9a934
KH
2013 defsubr (&Sminibuffer_prompt);
2014 defsubr (&Sminibuffer_prompt_width);
f927c5ae
JB
2015
2016 defsubr (&Stry_completion);
2017 defsubr (&Sall_completions);
2018 defsubr (&Scompleting_read);
2019 defsubr (&Sminibuffer_complete);
2020 defsubr (&Sminibuffer_complete_word);
2021 defsubr (&Sminibuffer_complete_and_exit);
2022 defsubr (&Sdisplay_completion_list);
2023 defsubr (&Sminibuffer_completion_help);
2024
2025 defsubr (&Sself_insert_and_exit);
2026 defsubr (&Sexit_minibuffer);
2027
2d955a50 2028 defsubr (&Sminibuffer_message);
f927c5ae
JB
2029}
2030
2031keys_of_minibuf ()
2032{
2033 initial_define_key (Vminibuffer_local_map, Ctl ('g'),
2034 "abort-recursive-edit");
2035 initial_define_key (Vminibuffer_local_map, Ctl ('m'),
2036 "exit-minibuffer");
2037 initial_define_key (Vminibuffer_local_map, Ctl ('j'),
2038 "exit-minibuffer");
2039
2040 initial_define_key (Vminibuffer_local_ns_map, Ctl ('g'),
2041 "abort-recursive-edit");
2042 initial_define_key (Vminibuffer_local_ns_map, Ctl ('m'),
2043 "exit-minibuffer");
2044 initial_define_key (Vminibuffer_local_ns_map, Ctl ('j'),
2045 "exit-minibuffer");
2046
2047 initial_define_key (Vminibuffer_local_ns_map, ' ',
2048 "exit-minibuffer");
2049 initial_define_key (Vminibuffer_local_ns_map, '\t',
2050 "exit-minibuffer");
2051 initial_define_key (Vminibuffer_local_ns_map, '?',
2052 "self-insert-and-exit");
2053
2054 initial_define_key (Vminibuffer_local_completion_map, Ctl ('g'),
2055 "abort-recursive-edit");
2056 initial_define_key (Vminibuffer_local_completion_map, Ctl ('m'),
2057 "exit-minibuffer");
2058 initial_define_key (Vminibuffer_local_completion_map, Ctl ('j'),
2059 "exit-minibuffer");
2060
2061 initial_define_key (Vminibuffer_local_completion_map, '\t',
2062 "minibuffer-complete");
2063 initial_define_key (Vminibuffer_local_completion_map, ' ',
2064 "minibuffer-complete-word");
2065 initial_define_key (Vminibuffer_local_completion_map, '?',
2066 "minibuffer-completion-help");
2067
2068 initial_define_key (Vminibuffer_local_must_match_map, Ctl ('g'),
2069 "abort-recursive-edit");
2070 initial_define_key (Vminibuffer_local_must_match_map, Ctl ('m'),
2071 "minibuffer-complete-and-exit");
2072 initial_define_key (Vminibuffer_local_must_match_map, Ctl ('j'),
2073 "minibuffer-complete-and-exit");
2074 initial_define_key (Vminibuffer_local_must_match_map, '\t',
2075 "minibuffer-complete");
2076 initial_define_key (Vminibuffer_local_must_match_map, ' ',
2077 "minibuffer-complete-word");
2078 initial_define_key (Vminibuffer_local_must_match_map, '?',
2079 "minibuffer-completion-help");
2080}