(byte-compile-insert-header): Do not look for multibyte characters here.
[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
9404446f
RS
394 if (!NILP (current_buffer->enable_multibyte_characters)
395 && ! STRING_MULTIBYTE (minibuf_prompt))
396 minibuf_prompt = Fstring_make_multibyte (minibuf_prompt);
397
5c781212
RS
398 /* Run our hook, but not if it is empty.
399 (run-hooks would do nothing if it is empty,
748dc60a 400 but it's important to save time here in the usual case). */
92d3b06e
RS
401 if (!NILP (Vminibuffer_setup_hook) && !EQ (Vminibuffer_setup_hook, Qunbound)
402 && !NILP (Vrun_hooks))
5c781212
RS
403 call1 (Vrun_hooks, Qminibuffer_setup_hook);
404
f927c5ae
JB
405 recursive_edit_1 ();
406
407 /* If cursor is on the minibuffer line,
408 show the user we have exited by putting it in column 0. */
ff11dfa1 409 if ((FRAME_CURSOR_Y (selected_frame)
f927c5ae
JB
410 >= XFASTINT (XWINDOW (minibuf_window)->top))
411 && !noninteractive)
412 {
85462999
RS
413 FRAME_CURSOR_X (selected_frame)
414 = FRAME_LEFT_SCROLL_BAR_WIDTH (selected_frame);
ff11dfa1 415 update_frame (selected_frame, 1, 1);
f927c5ae
JB
416 }
417
c3421833 418 /* Make minibuffer contents into a string. */
4f69d8f6 419 Fset_buffer (minibuffer);
c3421833 420 val = make_buffer_string (1, Z, allow_props);
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)
7d315986 971 && XSTRING (string)->size <= XSTRING (eltstring)->size
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)
7d315986 1219 && XSTRING (string)->size <= XSTRING (eltstring)->size
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))
9404446f
RS
1399 {
1400 if (STRING_MULTIBYTE (txt))
1401 txt = Fstring_make_unibyte (txt);
1402 else
1403 txt = Fstring_make_multibyte (txt);
1404
1405 tem = oblookup (Vminibuffer_completion_table,
1406 XSTRING (txt)->data,
1407 XSTRING (txt)->size,
1408 STRING_BYTES (XSTRING (txt)));
1409 if (!SYMBOLP (tem))
1410 return Qnil;
1411 }
1412 if (!NILP (Vminibuffer_completion_predicate))
5d2ca7ae
RS
1413 return call1 (Vminibuffer_completion_predicate, tem);
1414 else
1415 return Qt;
1416 }
1417 else
1418 return call3 (Vminibuffer_completion_table, txt,
1419 Vminibuffer_completion_predicate, Qlambda);
1420}
f927c5ae
JB
1421
1422/* returns:
1423 * 0 no possible completion
1424 * 1 was already an exact and unique completion
1425 * 3 was already an exact completion
1426 * 4 completed to an exact completion
1427 * 5 some completion happened
1428 * 6 no completion happened
1429 */
1430int
1431do_completion ()
1432{
1433 Lisp_Object completion, tem;
1434 int completedp;
1435 Lisp_Object last;
1e00c2ff 1436 struct gcpro gcpro1, gcpro2;
f927c5ae
JB
1437
1438 completion = Ftry_completion (Fbuffer_string (), Vminibuffer_completion_table,
1439 Vminibuffer_completion_predicate);
1440 last = last_exact_completion;
1441 last_exact_completion = Qnil;
1442
4f9b95e5
KH
1443 GCPRO2 (completion, last);
1444
56a98455 1445 if (NILP (completion))
f927c5ae
JB
1446 {
1447 bitch_at_user ();
1448 temp_echo_area_glyphs (" [No match]");
1e00c2ff 1449 UNGCPRO;
f927c5ae
JB
1450 return 0;
1451 }
1452
1453 if (EQ (completion, Qt)) /* exact and unique match */
1e00c2ff
KH
1454 {
1455 UNGCPRO;
1456 return 1;
1457 }
f927c5ae
JB
1458
1459 /* compiler bug */
1460 tem = Fstring_equal (completion, Fbuffer_string());
56a98455 1461 if (completedp = NILP (tem))
f927c5ae
JB
1462 {
1463 Ferase_buffer (); /* Some completion happened */
1464 Finsert (1, &completion);
1465 }
1466
1467 /* It did find a match. Do we match some possibility exactly now? */
5d2ca7ae 1468 tem = test_completion (Fbuffer_string ());
56a98455 1469 if (NILP (tem))
1e00c2ff
KH
1470 {
1471 /* not an exact match */
1472 UNGCPRO;
f927c5ae
JB
1473 if (completedp)
1474 return 5;
1475 else if (auto_help)
1476 Fminibuffer_completion_help ();
1477 else
1478 temp_echo_area_glyphs (" [Next char not unique]");
1479 return 6;
1480 }
1481 else if (completedp)
1e00c2ff
KH
1482 {
1483 UNGCPRO;
1484 return 4;
1485 }
f927c5ae
JB
1486 /* If the last exact completion and this one were the same,
1487 it means we've already given a "Complete but not unique"
52b14ac0 1488 message and the user's hit TAB again, so now we give him help. */
f927c5ae 1489 last_exact_completion = completion;
56a98455 1490 if (!NILP (last))
f927c5ae
JB
1491 {
1492 tem = Fbuffer_string ();
56a98455 1493 if (!NILP (Fequal (tem, last)))
f927c5ae
JB
1494 Fminibuffer_completion_help ();
1495 }
1e00c2ff 1496 UNGCPRO;
f927c5ae 1497 return 3;
f927c5ae 1498}
1e00c2ff 1499
52b14ac0
JB
1500/* Like assoc but assumes KEY is a string, and ignores case if appropriate. */
1501
1502Lisp_Object
1503assoc_for_completion (key, list)
1504 register Lisp_Object key;
1505 Lisp_Object list;
1506{
1507 register Lisp_Object tail;
1508
56a98455 1509 for (tail = list; !NILP (tail); tail = Fcdr (tail))
52b14ac0
JB
1510 {
1511 register Lisp_Object elt, tem, thiscar;
1512 elt = Fcar (tail);
1513 if (!CONSP (elt)) continue;
1514 thiscar = Fcar (elt);
7510b296 1515 if (!STRINGP (thiscar))
52b14ac0 1516 continue;
9404446f
RS
1517 tem = Fcompare_strings (thiscar, make_number (0), Qnil,
1518 key, make_number (0), Qnil,
1519 completion_ignore_case ? Qt : Qnil);
1520 if (EQ (tem, Qt))
1521 return elt;
52b14ac0
JB
1522 QUIT;
1523 }
1524 return Qnil;
1525}
f927c5ae
JB
1526
1527DEFUN ("minibuffer-complete", Fminibuffer_complete, Sminibuffer_complete, 0, 0, "",
6300d782 1528 "Complete the minibuffer contents as far as possible.\n\
2cb6da5c
RS
1529Return nil if there is no valid completion, else t.\n\
1530If no characters can be completed, display a list of possible completions.\n\
1531If you repeat this command after it displayed such a list,\n\
1532scroll the window of possible completions.")
f927c5ae
JB
1533 ()
1534{
2cb6da5c
RS
1535 register int i;
1536 Lisp_Object window, tem;
1537
1538 /* If the previous command was not this, then mark the completion
1539 buffer obsolete. */
5221fd63 1540 if (! EQ (current_kboard->Vlast_command, this_command))
2cb6da5c
RS
1541 Vminibuf_scroll_window = Qnil;
1542
1543 window = Vminibuf_scroll_window;
1544 /* If there's a fresh completion window with a live buffer,
1545 and this command is repeated, scroll that window. */
1546 if (! NILP (window) && ! NILP (XWINDOW (window)->buffer)
1547 && !NILP (XBUFFER (XWINDOW (window)->buffer)->name))
1548 {
1549 struct buffer *obuf = current_buffer;
1550
1551 Fset_buffer (XWINDOW (window)->buffer);
1552 tem = Fpos_visible_in_window_p (make_number (ZV), window);
1553 if (! NILP (tem))
1554 /* If end is in view, scroll up to the beginning. */
b7df898e 1555 Fset_window_start (window, make_number (BEGV), Qnil);
2cb6da5c
RS
1556 else
1557 /* Else scroll down one screen. */
1558 Fscroll_other_window (Qnil);
1559
1560 set_buffer_internal (obuf);
1561 return Qnil;
1562 }
1563
1564 i = do_completion ();
f927c5ae
JB
1565 switch (i)
1566 {
1567 case 0:
1568 return Qnil;
1569
1570 case 1:
1571 temp_echo_area_glyphs (" [Sole completion]");
1572 break;
1573
1574 case 3:
1575 temp_echo_area_glyphs (" [Complete, but not unique]");
1576 break;
1577 }
1578
1579 return Qt;
1580}
e4c97a67
RS
1581\f
1582/* Subroutines of Fminibuffer_complete_and_exit. */
1583
1584/* This one is called by internal_condition_case to do the real work. */
1585
1586Lisp_Object
1587complete_and_exit_1 ()
1588{
1589 return make_number (do_completion ());
1590}
1591
1592/* This one is called by internal_condition_case if an error happens.
1593 Pretend the current value is an exact match. */
1594
1595Lisp_Object
1596complete_and_exit_2 (ignore)
1597 Lisp_Object ignore;
1598{
1599 return make_number (1);
1600}
f927c5ae
JB
1601
1602DEFUN ("minibuffer-complete-and-exit", Fminibuffer_complete_and_exit,
1603 Sminibuffer_complete_and_exit, 0, 0, "",
5d2ca7ae
RS
1604 "If the minibuffer contents is a valid completion then exit.\n\
1605Otherwise try to complete it. If completion leads to a valid completion,\n\
f927c5ae
JB
1606a repetition of this command will exit.")
1607 ()
1608{
1609 register int i;
e4c97a67 1610 Lisp_Object val;
f927c5ae
JB
1611
1612 /* Allow user to specify null string */
1613 if (BEGV == ZV)
1614 goto exit;
1615
5d2ca7ae
RS
1616 if (!NILP (test_completion (Fbuffer_string ())))
1617 goto exit;
1618
e4c97a67
RS
1619 /* Call do_completion, but ignore errors. */
1620 val = internal_condition_case (complete_and_exit_1, Qerror,
1621 complete_and_exit_2);
1622
1623 i = XFASTINT (val);
f927c5ae
JB
1624 switch (i)
1625 {
1626 case 1:
1627 case 3:
1628 goto exit;
1629
1630 case 4:
56a98455 1631 if (!NILP (Vminibuffer_completion_confirm))
f927c5ae
JB
1632 {
1633 temp_echo_area_glyphs (" [Confirm]");
1634 return Qnil;
1635 }
1636 else
1637 goto exit;
1638
1639 default:
1640 return Qnil;
1641 }
1642 exit:
1643 Fthrow (Qexit, Qnil);
1644 /* NOTREACHED */
1645}
1646
1647DEFUN ("minibuffer-complete-word", Fminibuffer_complete_word, Sminibuffer_complete_word,
1648 0, 0, "",
1649 "Complete the minibuffer contents at most a single word.\n\
1650After one word is completed as much as possible, a space or hyphen\n\
6300d782
KH
1651is added, provided that matches some possible completion.\n\
1652Return nil if there is no valid completion, else t.")
f927c5ae
JB
1653 ()
1654{
69f4ef20 1655 Lisp_Object completion, tem, tem1;
af2b7cd5 1656 register int i, i_byte;
f927c5ae 1657 register unsigned char *completion_string;
d7be4211 1658 struct gcpro gcpro1, gcpro2;
b278606c
BF
1659
1660 /* We keep calling Fbuffer_string rather than arrange for GC to
1661 hold onto a pointer to one of the strings thus made. */
f927c5ae
JB
1662
1663 completion = Ftry_completion (Fbuffer_string (),
1664 Vminibuffer_completion_table,
1665 Vminibuffer_completion_predicate);
56a98455 1666 if (NILP (completion))
f927c5ae
JB
1667 {
1668 bitch_at_user ();
1669 temp_echo_area_glyphs (" [No match]");
1670 return Qnil;
1671 }
1672 if (EQ (completion, Qt))
1673 return Qnil;
1674
b278606c 1675#if 0 /* How the below code used to look, for reference. */
f927c5ae
JB
1676 tem = Fbuffer_string ();
1677 b = XSTRING (tem)->data;
1678 i = ZV - 1 - XSTRING (completion)->size;
1679 p = XSTRING (completion)->data;
1680 if (i > 0 ||
1681 0 <= scmp (b, p, ZV - 1))
1682 {
1683 i = 1;
1684 /* Set buffer to longest match of buffer tail and completion head. */
1685 while (0 <= scmp (b + i, p, ZV - 1 - i))
1686 i++;
1687 del_range (1, i + 1);
1688 SET_PT (ZV);
1689 }
1690#else /* Rewritten code */
1691 {
69f4ef20 1692 int buffer_nchars, completion_nchars;
f927c5ae 1693
59860a8c 1694 CHECK_STRING (completion, 0);
f927c5ae 1695 tem = Fbuffer_string ();
d7be4211 1696 GCPRO2 (completion, tem);
719b4a40
RS
1697 /* If reading a file name,
1698 expand any $ENVVAR refs in the buffer and in TEM. */
1699 if (EQ (Vminibuffer_completion_table, Qread_file_name_internal))
1700 {
1701 Lisp_Object substituted;
1702 substituted = Fsubstitute_in_file_name (tem);
1703 if (! EQ (substituted, tem))
1704 {
1705 tem = substituted;
1706 Ferase_buffer ();
af2b7cd5 1707 insert_from_string (tem, 0, 0, XSTRING (tem)->size,
fc932ac6 1708 STRING_BYTES (XSTRING (tem)), 0);
719b4a40
RS
1709 }
1710 }
69f4ef20
RS
1711 buffer_nchars = XSTRING (tem)->size; /* ie ZV - BEGV */
1712 completion_nchars = XSTRING (completion)->size;
1713 i = buffer_nchars - completion_nchars;
1714 if (i > 0
1715 ||
1716 (tem1 = Fcompare_strings (tem, make_number (0),
1717 make_number (buffer_nchars),
1718 completion, make_number (0),
1719 make_number (buffer_nchars),
1720 completion_ignore_case ? Qt : Qnil),
1721 ! EQ (tem1, Qt)))
f927c5ae 1722 {
69f4ef20
RS
1723 int start_pos;
1724
1725 /* Set buffer to longest match of buffer tail and completion head. */
1726 if (i <= 0) i = 1;
1727 start_pos= i;
1728 buffer_nchars -= i;
669c6673 1729 while (i > 0)
69f4ef20 1730 {
669c6673 1731 tem1 = Fcompare_strings (tem, make_number (start_pos), Qnil,
69f4ef20
RS
1732 completion, make_number (0),
1733 make_number (buffer_nchars),
1734 completion_ignore_case ? Qt : Qnil);
1735 start_pos++;
1736 if (EQ (tem1, Qt))
1737 break;
1738 i++;
669c6673 1739 buffer_nchars--;
69f4ef20
RS
1740 }
1741 del_range (1, i + 1);
a9c26562 1742 SET_PT_BOTH (ZV, ZV_BYTE);
f927c5ae 1743 }
d7be4211 1744 UNGCPRO;
f927c5ae
JB
1745 }
1746#endif /* Rewritten code */
af2b7cd5
RS
1747 i_byte = ZV_BYTE - BEGV_BYTE;
1748 i = ZV - BEGV;
f927c5ae
JB
1749
1750 /* If completion finds next char not unique,
b278606c 1751 consider adding a space or a hyphen. */
f927c5ae
JB
1752 if (i == XSTRING (completion)->size)
1753 {
b278606c 1754 GCPRO1 (completion);
f927c5ae
JB
1755 tem = Ftry_completion (concat2 (Fbuffer_string (), build_string (" ")),
1756 Vminibuffer_completion_table,
1757 Vminibuffer_completion_predicate);
b278606c
BF
1758 UNGCPRO;
1759
7510b296 1760 if (STRINGP (tem))
f927c5ae
JB
1761 completion = tem;
1762 else
1763 {
b278606c
BF
1764 GCPRO1 (completion);
1765 tem =
1766 Ftry_completion (concat2 (Fbuffer_string (), build_string ("-")),
1767 Vminibuffer_completion_table,
1768 Vminibuffer_completion_predicate);
1769 UNGCPRO;
1770
7510b296 1771 if (STRINGP (tem))
f927c5ae
JB
1772 completion = tem;
1773 }
1774 }
1775
1776 /* Now find first word-break in the stuff found by completion.
1777 i gets index in string of where to stop completing. */
d50a3d2a
KH
1778 {
1779 int len, c;
b278606c 1780
d50a3d2a 1781 completion_string = XSTRING (completion)->data;
fc932ac6 1782 for (; i_byte < STRING_BYTES (XSTRING (completion)); i_byte += len, i++)
d50a3d2a 1783 {
af2b7cd5
RS
1784 c = STRING_CHAR_AND_LENGTH (completion_string + i_byte,
1785 XSTRING (completion)->size - i_byte,
d50a3d2a
KH
1786 len);
1787 if (SYNTAX (c) != Sword)
1788 {
af2b7cd5
RS
1789 i_byte += len;
1790 i++;
d50a3d2a
KH
1791 break;
1792 }
1793 }
1794 }
f927c5ae
JB
1795
1796 /* If got no characters, print help for user. */
1797
af2b7cd5 1798 if (i_byte == ZV_BYTE - BEGV_BYTE)
f927c5ae
JB
1799 {
1800 if (auto_help)
1801 Fminibuffer_completion_help ();
1802 return Qnil;
1803 }
1804
1805 /* Otherwise insert in minibuffer the chars we got */
1806
1807 Ferase_buffer ();
af2b7cd5 1808 insert_from_string (completion, 0, 0, i, i_byte, 1);
f927c5ae
JB
1809 return Qt;
1810}
1811\f
1812DEFUN ("display-completion-list", Fdisplay_completion_list, Sdisplay_completion_list,
1813 1, 1, 0,
2dc2b736 1814 "Display the list of completions, COMPLETIONS, using `standard-output'.\n\
f927c5ae 1815Each element may be just a symbol or string\n\
2d7e41fe
RS
1816or may be a list of two strings to be printed as if concatenated.\n\
1817`standard-output' must be a buffer.\n\
1818At the end, run the normal hook `completion-setup-hook'.\n\
1819It can find the completion buffer in `standard-output'.")
f927c5ae
JB
1820 (completions)
1821 Lisp_Object completions;
1822{
dae36123 1823 Lisp_Object tail, elt;
f927c5ae 1824 register int i;
2dc2b736 1825 int column = 0;
dae36123 1826 struct gcpro gcpro1, gcpro2;
2dc2b736 1827 struct buffer *old = current_buffer;
681f5af4 1828 int first = 1;
486cc7fb
RS
1829
1830 /* Note that (when it matters) every variable
dae36123
RS
1831 points to a non-string that is pointed to by COMPLETIONS,
1832 except for ELT. ELT can be pointing to a string
1833 when terpri or Findent_to calls a change hook. */
1834 elt = Qnil;
1835 GCPRO2 (completions, elt);
486cc7fb 1836
7510b296 1837 if (BUFFERP (Vstandard_output))
2dc2b736 1838 set_buffer_internal (XBUFFER (Vstandard_output));
f927c5ae 1839
56a98455 1840 if (NILP (completions))
cfc736bf
RS
1841 write_string ("There are no possible completions of what you have typed.",
1842 -1);
f927c5ae
JB
1843 else
1844 {
2dc2b736 1845 write_string ("Possible completions are:", -1);
56a98455 1846 for (tail = completions, i = 0; !NILP (tail); tail = Fcdr (tail), i++)
f927c5ae 1847 {
ec067ec7 1848 Lisp_Object tem, string;
681f5af4 1849 int length;
47d7d104 1850 Lisp_Object startpos, endpos;
681f5af4
RS
1851
1852 elt = Fcar (tail);
1853 /* Compute the length of this element. */
1854 if (CONSP (elt))
1855 {
49db96ce 1856 tem = XCAR (elt);
681f5af4 1857 CHECK_STRING (tem, 0);
49db96ce 1858 length = XSTRING (tem)->size;
681f5af4 1859
49db96ce 1860 tem = Fcar (XCDR (elt));
681f5af4 1861 CHECK_STRING (tem, 0);
49db96ce 1862 length += XSTRING (tem)->size;
681f5af4
RS
1863 }
1864 else
1865 {
1866 CHECK_STRING (elt, 0);
49db96ce 1867 length = XSTRING (elt)->size;
681f5af4
RS
1868 }
1869
1870 /* This does a bad job for narrower than usual windows.
1871 Sadly, the window it will appear in is not known
1872 until after the text has been made. */
1873
47d7d104
RS
1874 if (BUFFERP (Vstandard_output))
1875 XSETINT (startpos, BUF_PT (XBUFFER (Vstandard_output)));
1876
681f5af4
RS
1877 /* If the previous completion was very wide,
1878 or we have two on this line already,
1879 don't put another on the same line. */
1880 if (column > 33 || first
1881 /* If this is really wide, don't put it second on a line. */
1882 || column > 0 && length > 45)
1883 {
1884 Fterpri (Qnil);
1885 column = 0;
1886 }
1887 /* Otherwise advance to column 35. */
1888 else
2dc2b736 1889 {
7510b296 1890 if (BUFFERP (Vstandard_output))
681f5af4
RS
1891 {
1892 tem = Findent_to (make_number (35), make_number (2));
47d7d104 1893
681f5af4
RS
1894 column = XINT (tem);
1895 }
2dc2b736
RS
1896 else
1897 {
1898 do
1899 {
1900 write_string (" ", -1);
1901 column++;
1902 }
1903 while (column < 35);
1904 }
1905 }
681f5af4 1906
47d7d104
RS
1907 if (BUFFERP (Vstandard_output))
1908 {
1909 XSETINT (endpos, BUF_PT (XBUFFER (Vstandard_output)));
1910 Fset_text_properties (startpos, endpos,
1911 Qnil, Vstandard_output);
1912 }
1913
ec067ec7 1914 /* Output this element.
9404446f 1915 If necessary, convert it to unibyte or to multibyte first. */
f927c5ae 1916 if (CONSP (elt))
ec067ec7 1917 string = Fcar (elt);
f927c5ae 1918 else
ec067ec7
RS
1919 string = elt;
1920 if (NILP (current_buffer->enable_multibyte_characters)
1921 && STRING_MULTIBYTE (string))
1922 string = Fstring_make_unibyte (string);
9404446f
RS
1923 else if (!NILP (current_buffer->enable_multibyte_characters)
1924 && !STRING_MULTIBYTE (string))
1925 string = Fstring_make_multibyte (string);
ec067ec7
RS
1926 Fprinc (string, Qnil);
1927
1928 /* Output the annotation for this element. */
1929 if (CONSP (elt))
1930 Fprinc (Fcar (Fcdr (elt)), Qnil);
681f5af4 1931
ec067ec7 1932 /* Update COLUMN for what we have output. */
681f5af4
RS
1933 column += length;
1934
1935 /* If output is to a buffer, recompute COLUMN in a way
1936 that takes account of character widths. */
1937 if (BUFFERP (Vstandard_output))
2dc2b736 1938 {
681f5af4
RS
1939 tem = Fcurrent_column ();
1940 column = XINT (tem);
2dc2b736 1941 }
681f5af4
RS
1942
1943 first = 0;
f927c5ae
JB
1944 }
1945 }
2dc2b736 1946
486cc7fb
RS
1947 UNGCPRO;
1948
7510b296 1949 if (BUFFERP (Vstandard_output))
2d7e41fe
RS
1950 set_buffer_internal (old);
1951
cfc736bf
RS
1952 if (!NILP (Vrun_hooks))
1953 call1 (Vrun_hooks, intern ("completion-setup-hook"));
1954
f927c5ae
JB
1955 return Qnil;
1956}
1957
1958DEFUN ("minibuffer-completion-help", Fminibuffer_completion_help, Sminibuffer_completion_help,
1959 0, 0, "",
1960 "Display a list of possible completions of the current minibuffer contents.")
1961 ()
1962{
1963 Lisp_Object completions;
1964
1965 message ("Making completion list...");
1966 completions = Fall_completions (Fbuffer_string (),
1967 Vminibuffer_completion_table,
89a255dc
RS
1968 Vminibuffer_completion_predicate,
1969 Qt);
f927c5ae
JB
1970 echo_area_glyphs = 0;
1971
56a98455 1972 if (NILP (completions))
f927c5ae
JB
1973 {
1974 bitch_at_user ();
1975 temp_echo_area_glyphs (" [No completions]");
1976 }
1977 else
1978 internal_with_output_to_temp_buffer ("*Completions*",
1979 Fdisplay_completion_list,
1980 Fsort (completions, Qstring_lessp));
1981 return Qnil;
1982}
1983\f
1984DEFUN ("self-insert-and-exit", Fself_insert_and_exit, Sself_insert_and_exit, 0, 0, "",
1985 "Terminate minibuffer input.")
1986 ()
1987{
7510b296 1988 if (INTEGERP (last_command_char))
dab3ab3c 1989 internal_self_insert (XINT (last_command_char), 0);
f927c5ae
JB
1990 else
1991 bitch_at_user ();
1992
1993 Fthrow (Qexit, Qnil);
1994}
1995
1996DEFUN ("exit-minibuffer", Fexit_minibuffer, Sexit_minibuffer, 0, 0, "",
1997 "Terminate this minibuffer argument.")
1998 ()
1999{
2000 Fthrow (Qexit, Qnil);
2001}
2002
2003DEFUN ("minibuffer-depth", Fminibuffer_depth, Sminibuffer_depth, 0, 0, 0,
2004 "Return current depth of activations of minibuffer, a nonnegative integer.")
2005 ()
2006{
2007 return make_number (minibuf_level);
2008}
2009
37e9a934
KH
2010DEFUN ("minibuffer-prompt", Fminibuffer_prompt, Sminibuffer_prompt, 0, 0, 0,
2011 "Return the prompt string of the currently-active minibuffer.\n\
2012If no minibuffer is active, return nil.")
2013 ()
2014{
4d04c1f1 2015 return Fcopy_sequence (minibuf_prompt);
37e9a934
KH
2016}
2017
2018DEFUN ("minibuffer-prompt-width", Fminibuffer_prompt_width,
2019 Sminibuffer_prompt_width, 0, 0, 0,
c5896ef4 2020 "Return the display width of the minibuffer prompt.")
37e9a934
KH
2021 ()
2022{
2023 Lisp_Object width;
5a866662 2024 XSETFASTINT (width, minibuf_prompt_width);
37e9a934
KH
2025 return width;
2026}
f927c5ae 2027\f
2d955a50
RS
2028/* Temporarily display the string M at the end of the current
2029 minibuffer contents. This is used to display things like
2030 "[No Match]" when the user requests a completion for a prefix
2031 that has no possible completions, and other quick, unobtrusive
2032 messages. */
2033
9d815fd9 2034void
2d955a50
RS
2035temp_echo_area_glyphs (m)
2036 char *m;
2037{
2038 int osize = ZV;
a9c26562 2039 int osize_byte = ZV_BYTE;
2d955a50 2040 int opoint = PT;
a9c26562 2041 int opoint_byte = PT_BYTE;
2d955a50
RS
2042 Lisp_Object oinhibit;
2043 oinhibit = Vinhibit_quit;
2044
2045 /* Clear out any old echo-area message to make way for our new thing. */
2046 message (0);
2047
a9c26562 2048 SET_PT_BOTH (osize, osize_byte);
2d955a50 2049 insert_string (m);
a9c26562 2050 SET_PT_BOTH (opoint, opoint_byte);
2d955a50
RS
2051 Vinhibit_quit = Qt;
2052 Fsit_for (make_number (2), Qnil, Qnil);
bc69581b 2053 del_range_both (osize, osize_byte, ZV, ZV_BYTE, 1);
a9c26562 2054 SET_PT_BOTH (opoint, opoint_byte);
2d955a50
RS
2055 if (!NILP (Vquit_flag))
2056 {
2057 Vquit_flag = Qnil;
2058 Vunread_command_events = Fcons (make_number (quit_char), Qnil);
2059 }
2060 Vinhibit_quit = oinhibit;
2061}
2062
2063DEFUN ("minibuffer-message", Fminibuffer_message, Sminibuffer_message,
2064 1, 1, 0,
2065 "Temporarily display STRING at the end of the minibuffer.\n\
2066The text is displayed for two seconds,\n\
2067or until the next input event arrives, whichever comes first.")
2068 (string)
2069 Lisp_Object string;
2070{
2071 temp_echo_area_glyphs (XSTRING (string)->data);
2072 return Qnil;
2073}
2074\f
9d815fd9 2075void
f927c5ae
JB
2076init_minibuf_once ()
2077{
2078 Vminibuffer_list = Qnil;
2079 staticpro (&Vminibuffer_list);
2080}
2081
9d815fd9 2082void
f927c5ae
JB
2083syms_of_minibuf ()
2084{
2085 minibuf_level = 0;
4d04c1f1
KH
2086 minibuf_prompt = Qnil;
2087 staticpro (&minibuf_prompt);
2088
2089 minibuf_save_list = Qnil;
2090 staticpro (&minibuf_save_list);
f927c5ae 2091
719b4a40
RS
2092 Qread_file_name_internal = intern ("read-file-name-internal");
2093 staticpro (&Qread_file_name_internal);
2094
e5d4686b
RS
2095 Qminibuffer_default = intern ("minibuffer-default");
2096 staticpro (&Qminibuffer_default);
2097 Fset (Qminibuffer_default, Qnil);
2098
f927c5ae
JB
2099 Qminibuffer_completion_table = intern ("minibuffer-completion-table");
2100 staticpro (&Qminibuffer_completion_table);
2101
2102 Qminibuffer_completion_confirm = intern ("minibuffer-completion-confirm");
2103 staticpro (&Qminibuffer_completion_confirm);
2104
2105 Qminibuffer_completion_predicate = intern ("minibuffer-completion-predicate");
2106 staticpro (&Qminibuffer_completion_predicate);
2107
1e00c2ff
KH
2108 staticpro (&last_exact_completion);
2109 last_exact_completion = Qnil;
2110
f927c5ae
JB
2111 staticpro (&last_minibuf_string);
2112 last_minibuf_string = Qnil;
2113
2114 Quser_variable_p = intern ("user-variable-p");
2115 staticpro (&Quser_variable_p);
2116
770970cb
RS
2117 Qminibuffer_history = intern ("minibuffer-history");
2118 staticpro (&Qminibuffer_history);
f927c5ae 2119
406e55df
RS
2120 Qbuffer_name_history = intern ("buffer-name-history");
2121 staticpro (&Qbuffer_name_history);
2122
5c781212
RS
2123 Qminibuffer_setup_hook = intern ("minibuffer-setup-hook");
2124 staticpro (&Qminibuffer_setup_hook);
2125
177aecf9
KH
2126 Qminibuffer_exit_hook = intern ("minibuffer-exit-hook");
2127 staticpro (&Qminibuffer_exit_hook);
2128
77aa8edf
RS
2129 Qhistory_length = intern ("history-length");
2130 staticpro (&Qhistory_length);
2131
cee54539
KH
2132 Qcurrent_input_method = intern ("current-input-method");
2133 staticpro (&Qcurrent_input_method);
2134
2135 Qactivate_input_method = intern ("activate-input-method");
2136 staticpro (&Qactivate_input_method);
2137
eebbfb01
KH
2138 DEFVAR_LISP ("read-buffer-function", &Vread_buffer_function,
2139 "If this is non-nil, `read-buffer' does its work by calling this function.");
2140 Vread_buffer_function = Qnil;
2141
5c781212
RS
2142 DEFVAR_LISP ("minibuffer-setup-hook", &Vminibuffer_setup_hook,
2143 "Normal hook run just after entry to minibuffer.");
2144 Vminibuffer_setup_hook = Qnil;
2145
177aecf9
KH
2146 DEFVAR_LISP ("minibuffer-exit-hook", &Vminibuffer_exit_hook,
2147 "Normal hook run just after exit from minibuffer.");
2148 Vminibuffer_exit_hook = Qnil;
2149
77aa8edf
RS
2150 DEFVAR_LISP ("history-length", &Vhistory_length,
2151 "*Maximum length for history lists before truncation takes place.\n\
2152A number means that length; t means infinite. Truncation takes place\n\
2153just after a new element is inserted. Setting the history-length\n\
2154property of a history variable overrides this default.");
2155 XSETFASTINT (Vhistory_length, 30);
2156
f927c5ae
JB
2157 DEFVAR_BOOL ("completion-auto-help", &auto_help,
2158 "*Non-nil means automatically provide help for invalid completion input.");
2159 auto_help = 1;
2160
2161 DEFVAR_BOOL ("completion-ignore-case", &completion_ignore_case,
2162 "Non-nil means don't consider case significant in completion.");
2163 completion_ignore_case = 0;
2164
2165 DEFVAR_BOOL ("enable-recursive-minibuffers", &enable_recursive_minibuffers,
2166 "*Non-nil means to allow minibuffer commands while in the minibuffer.\n\
7e3e3ad1 2167This variable makes a difference whenever the minibuffer window is active.");
f927c5ae
JB
2168 enable_recursive_minibuffers = 0;
2169
2170 DEFVAR_LISP ("minibuffer-completion-table", &Vminibuffer_completion_table,
2171 "Alist or obarray used for completion in the minibuffer.\n\
2172This becomes the ALIST argument to `try-completion' and `all-completion'.\n\
2173\n\
2174The value may alternatively be a function, which is given three arguments:\n\
2175 STRING, the current buffer contents;\n\
2176 PREDICATE, the predicate for filtering possible matches;\n\
2177 CODE, which says what kind of things to do.\n\
2178CODE can be nil, t or `lambda'.\n\
2179nil means to return the best completion of STRING, or nil if there is none.\n\
2180t means to return a list of all possible completions of STRING.\n\
2181`lambda' means to return t if STRING is a valid completion as it stands.");
2182 Vminibuffer_completion_table = Qnil;
2183
2184 DEFVAR_LISP ("minibuffer-completion-predicate", &Vminibuffer_completion_predicate,
2185 "Within call to `completing-read', this holds the PREDICATE argument.");
2186 Vminibuffer_completion_predicate = Qnil;
2187
2188 DEFVAR_LISP ("minibuffer-completion-confirm", &Vminibuffer_completion_confirm,
2189 "Non-nil => demand confirmation of completion before exiting minibuffer.");
2190 Vminibuffer_completion_confirm = Qnil;
2191
2192 DEFVAR_LISP ("minibuffer-help-form", &Vminibuffer_help_form,
2193 "Value that `help-form' takes on inside the minibuffer.");
2194 Vminibuffer_help_form = Qnil;
2195
770970cb
RS
2196 DEFVAR_LISP ("minibuffer-history-variable", &Vminibuffer_history_variable,
2197 "History list symbol to add minibuffer values to.\n\
2fa2413b
RS
2198Each string of minibuffer input, as it appears on exit from the minibuffer,\n\
2199is added with\n\
770970cb
RS
2200 (set minibuffer-history-variable\n\
2201 (cons STRING (symbol-value minibuffer-history-variable)))");
5a866662 2202 XSETFASTINT (Vminibuffer_history_variable, 0);
770970cb
RS
2203
2204 DEFVAR_LISP ("minibuffer-history-position", &Vminibuffer_history_position,
2205 "Current position of redoing in the history list.");
2206 Vminibuffer_history_position = Qnil;
2207
6a9ee000 2208 DEFVAR_BOOL ("minibuffer-auto-raise", &minibuffer_auto_raise,
e98bcc1a
RS
2209 "*Non-nil means entering the minibuffer raises the minibuffer's frame.\n\
2210Some uses of the echo area also raise that frame (since they use it too).");
6a9ee000
RS
2211 minibuffer_auto_raise = 0;
2212
42006772
RS
2213 DEFVAR_LISP ("completion-regexp-list", &Vcompletion_regexp_list,
2214 "List of regexps that should restrict possible completions.");
2215 Vcompletion_regexp_list = Qnil;
2216
c3421833
RS
2217 DEFVAR_BOOL ("minibuffer-allow-text-properties",
2218 &minibuffer_allow_text_properties,
2219 "Non-nil means `read-from-miniffer' should not discard text properties.\n\
2220This also affects `read-string', but it does not affect `read-minibuffer',\n\
2221`read-no-blanks-input', or any of the functions that do minibuffer input\n\
2bfbde2b 2222with completion; they always discard text properties.");
c3421833
RS
2223 minibuffer_allow_text_properties = 0;
2224
68313ed8 2225 defsubr (&Sset_minibuffer_window);
f927c5ae
JB
2226 defsubr (&Sread_from_minibuffer);
2227 defsubr (&Seval_minibuffer);
2228 defsubr (&Sread_minibuffer);
2229 defsubr (&Sread_string);
2230 defsubr (&Sread_command);
2231 defsubr (&Sread_variable);
2232 defsubr (&Sread_buffer);
2233 defsubr (&Sread_no_blanks_input);
2234 defsubr (&Sminibuffer_depth);
37e9a934
KH
2235 defsubr (&Sminibuffer_prompt);
2236 defsubr (&Sminibuffer_prompt_width);
f927c5ae
JB
2237
2238 defsubr (&Stry_completion);
2239 defsubr (&Sall_completions);
2240 defsubr (&Scompleting_read);
2241 defsubr (&Sminibuffer_complete);
2242 defsubr (&Sminibuffer_complete_word);
2243 defsubr (&Sminibuffer_complete_and_exit);
2244 defsubr (&Sdisplay_completion_list);
2245 defsubr (&Sminibuffer_completion_help);
2246
2247 defsubr (&Sself_insert_and_exit);
2248 defsubr (&Sexit_minibuffer);
2249
2d955a50 2250 defsubr (&Sminibuffer_message);
f927c5ae
JB
2251}
2252
9d815fd9 2253void
f927c5ae
JB
2254keys_of_minibuf ()
2255{
2256 initial_define_key (Vminibuffer_local_map, Ctl ('g'),
2257 "abort-recursive-edit");
2258 initial_define_key (Vminibuffer_local_map, Ctl ('m'),
2259 "exit-minibuffer");
2260 initial_define_key (Vminibuffer_local_map, Ctl ('j'),
2261 "exit-minibuffer");
2262
2263 initial_define_key (Vminibuffer_local_ns_map, Ctl ('g'),
2264 "abort-recursive-edit");
2265 initial_define_key (Vminibuffer_local_ns_map, Ctl ('m'),
2266 "exit-minibuffer");
2267 initial_define_key (Vminibuffer_local_ns_map, Ctl ('j'),
2268 "exit-minibuffer");
2269
2270 initial_define_key (Vminibuffer_local_ns_map, ' ',
2271 "exit-minibuffer");
2272 initial_define_key (Vminibuffer_local_ns_map, '\t',
2273 "exit-minibuffer");
2274 initial_define_key (Vminibuffer_local_ns_map, '?',
2275 "self-insert-and-exit");
2276
2277 initial_define_key (Vminibuffer_local_completion_map, Ctl ('g'),
2278 "abort-recursive-edit");
2279 initial_define_key (Vminibuffer_local_completion_map, Ctl ('m'),
2280 "exit-minibuffer");
2281 initial_define_key (Vminibuffer_local_completion_map, Ctl ('j'),
2282 "exit-minibuffer");
2283
2284 initial_define_key (Vminibuffer_local_completion_map, '\t',
2285 "minibuffer-complete");
2286 initial_define_key (Vminibuffer_local_completion_map, ' ',
2287 "minibuffer-complete-word");
2288 initial_define_key (Vminibuffer_local_completion_map, '?',
2289 "minibuffer-completion-help");
2290
2291 initial_define_key (Vminibuffer_local_must_match_map, Ctl ('g'),
2292 "abort-recursive-edit");
2293 initial_define_key (Vminibuffer_local_must_match_map, Ctl ('m'),
2294 "minibuffer-complete-and-exit");
2295 initial_define_key (Vminibuffer_local_must_match_map, Ctl ('j'),
2296 "minibuffer-complete-and-exit");
2297 initial_define_key (Vminibuffer_local_must_match_map, '\t',
2298 "minibuffer-complete");
2299 initial_define_key (Vminibuffer_local_must_match_map, ' ',
2300 "minibuffer-complete-word");
2301 initial_define_key (Vminibuffer_local_must_match_map, '?',
2302 "minibuffer-completion-help");
2303}