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