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