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