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