(sort_overlays): Allow for null window.
[emacs.git] / src / minibuf.c
blobc160711f903f5ed5f3e471bcdf04d2453ebf8310
1 /* Minibuffer input and completion.
2 Copyright (C) 1985, 1986, 1993 Free Software Foundation, Inc.
4 This file is part of GNU Emacs.
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.
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.
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, 675 Mass Ave, Cambridge, MA 02139, USA. */
21 #include <config.h>
22 #include "lisp.h"
23 #include "commands.h"
24 #include "buffer.h"
25 #include "dispextern.h"
26 #include "frame.h"
27 #include "window.h"
28 #include "syntax.h"
30 #define min(a, b) ((a) < (b) ? (a) : (b))
32 /* List of buffers for use as minibuffers.
33 The first element of the list is used for the outermost minibuffer invocation,
34 the next element is used for a recursive minibuffer invocation, etc.
35 The list is extended at the end as deeped minibuffer recursions are encountered. */
36 Lisp_Object Vminibuffer_list;
38 struct minibuf_save_data
40 char *prompt;
41 int prompt_width;
42 Lisp_Object help_form;
43 Lisp_Object current_prefix_arg;
44 Lisp_Object history_position;
45 Lisp_Object history_variable;
48 int minibuf_save_vector_size;
49 struct minibuf_save_data *minibuf_save_vector;
51 /* Depth in minibuffer invocations. */
52 int minibuf_level;
54 /* Nonzero means display completion help for invalid input */
55 int auto_help;
57 /* Fread_minibuffer leaves the input here as a string. */
58 Lisp_Object last_minibuf_string;
60 /* Nonzero means let functions called when within a minibuffer
61 invoke recursive minibuffers (to read arguments, or whatever) */
62 int enable_recursive_minibuffers;
64 /* help-form is bound to this while in the minibuffer. */
66 Lisp_Object Vminibuffer_help_form;
68 /* Variable which is the history list to add minibuffer values to. */
70 Lisp_Object Vminibuffer_history_variable;
72 /* Current position in the history list (adjusted by M-n and M-p). */
74 Lisp_Object Vminibuffer_history_position;
76 Lisp_Object Qminibuffer_history;
78 Lisp_Object Qread_file_name_internal;
80 /* Normal hook for entry to minibuffer. */
82 Lisp_Object Qminibuffer_setup_hook, Vminibuffer_setup_hook;
84 /* Nonzero means completion ignores case. */
86 int completion_ignore_case;
88 /* Nonzero means raise the minibuffer frame when the minibuffer
89 is entered. */
91 int minibuffer_auto_raise;
93 /* If last completion attempt reported "Complete but not unique"
94 then this is the string completed then; otherwise this is nil. */
96 static Lisp_Object last_exact_completion;
98 Lisp_Object Quser_variable_p;
100 /* Actual minibuffer invocation. */
102 void read_minibuf_unwind ();
103 Lisp_Object get_minibuffer ();
104 Lisp_Object read_minibuf ();
106 /* Read from the minibuffer using keymap MAP, initial contents INITIAL
107 (a string), putting point minus BACKUP_N chars from the end of INITIAL,
108 prompting with PROMPT (a string), using history list HISTVAR
109 with initial position HISTPOS. (BACKUP_N should be <= 0.)
111 Normally return the result as a string (the text that was read),
112 but if EXPFLAG is non-nil, read it and return the object read.
113 If HISTVAR is given, save the value read on that history only if it doesn't
114 match the front of that history list exactly. The value is pushed onto
115 the list as the string that was read, or as the object that resulted iff
116 EXPFLAG is non-nil. */
118 Lisp_Object
119 read_minibuf (map, initial, prompt, backup_n, expflag, histvar, histpos)
120 Lisp_Object map;
121 Lisp_Object initial;
122 Lisp_Object prompt;
123 Lisp_Object backup_n;
124 int expflag;
125 Lisp_Object histvar;
126 Lisp_Object histpos;
128 register Lisp_Object val;
129 int count = specpdl_ptr - specpdl;
130 Lisp_Object mini_frame;
131 struct gcpro gcpro1, gcpro2;
133 if (XTYPE (prompt) != Lisp_String)
134 prompt = build_string ("");
136 /* Emacs in -batch mode calls minibuffer: print the prompt. */
137 if (noninteractive && XTYPE (prompt) == Lisp_String)
138 printf ("%s", XSTRING (prompt)->data);
140 if (!enable_recursive_minibuffers
141 && minibuf_level > 0
142 && (EQ (selected_window, minibuf_window)))
143 #if 0
144 || selected_frame != XFRAME (WINDOW_FRAME (XWINDOW (minibuf_window)))
145 #endif
146 error ("Command attempted to use minibuffer while in minibuffer");
148 if (minibuf_level == minibuf_save_vector_size)
149 minibuf_save_vector =
150 (struct minibuf_save_data *)
151 xrealloc (minibuf_save_vector,
152 (minibuf_save_vector_size *= 2)
153 * sizeof (struct minibuf_save_data));
154 minibuf_save_vector[minibuf_level].prompt = minibuf_prompt;
155 minibuf_save_vector[minibuf_level].prompt_width = minibuf_prompt_width;
156 minibuf_prompt_width = 0;
157 /* >> Why is this done this way rather than binding these variables? */
158 minibuf_save_vector[minibuf_level].help_form = Vhelp_form;
159 minibuf_save_vector[minibuf_level].current_prefix_arg = Vcurrent_prefix_arg;
160 minibuf_save_vector[minibuf_level].history_position = Vminibuffer_history_position;
161 minibuf_save_vector[minibuf_level].history_variable = Vminibuffer_history_variable;
162 GCPRO2 (minibuf_save_vector[minibuf_level].help_form,
163 minibuf_save_vector[minibuf_level].current_prefix_arg);
165 record_unwind_protect (Fset_window_configuration,
166 Fcurrent_window_configuration (Qnil));
168 /* If the minibuffer window is on a different frame, save that
169 frame's configuration too. */
170 #ifdef MULTI_FRAME
171 XSET (mini_frame, Lisp_Frame, WINDOW_FRAME (XWINDOW (minibuf_window)));
172 if (XFRAME (mini_frame) != selected_frame)
173 record_unwind_protect (Fset_window_configuration,
174 Fcurrent_window_configuration (mini_frame));
175 if (minibuffer_auto_raise)
176 Fraise_frame (mini_frame);
177 #endif
179 val = current_buffer->directory;
180 Fset_buffer (get_minibuffer (minibuf_level));
182 /* The current buffer's default directory is usually the right thing
183 for our minibuffer here. However, if you're typing a command at
184 a minibuffer-only frame when minibuf_level is zero, then buf IS
185 the current_buffer, so reset_buffer leaves buf's default
186 directory unchanged. This is a bummer when you've just started
187 up Emacs and buf's default directory is Qnil. Here's a hack; can
188 you think of something better to do? Find another buffer with a
189 better directory, and use that one instead. */
190 if (XTYPE (val) == Lisp_String)
191 current_buffer->directory = val;
192 else
194 Lisp_Object buf_list;
196 for (buf_list = Vbuffer_alist;
197 CONSP (buf_list);
198 buf_list = XCONS (buf_list)->cdr)
200 Lisp_Object other_buf = XCONS (XCONS (buf_list)->car)->cdr;
202 if (XTYPE (XBUFFER (other_buf)->directory) == Lisp_String)
204 current_buffer->directory = XBUFFER (other_buf)->directory;
205 break;
210 #ifdef MULTI_FRAME
211 Fredirect_frame_focus (Fselected_frame (), mini_frame);
212 #endif
213 Fmake_local_variable (Qprint_escape_newlines);
214 print_escape_newlines = 1;
216 record_unwind_protect (read_minibuf_unwind, Qnil);
218 Vminibuf_scroll_window = selected_window;
219 Fset_window_buffer (minibuf_window, Fcurrent_buffer ());
220 Fselect_window (minibuf_window);
221 XFASTINT (XWINDOW (minibuf_window)->hscroll) = 0;
223 Ferase_buffer ();
224 minibuf_level++;
226 if (!NILP (initial))
228 Finsert (1, &initial);
229 if (!NILP (backup_n) && XTYPE (backup_n) == Lisp_Int)
230 Fforward_char (backup_n);
233 minibuf_prompt = (char *) alloca (XSTRING (prompt)->size + 1);
234 bcopy (XSTRING (prompt)->data, minibuf_prompt, XSTRING (prompt)->size + 1);
235 echo_area_glyphs = 0;
237 Vhelp_form = Vminibuffer_help_form;
238 current_buffer->keymap = map;
239 Vminibuffer_history_position = histpos;
240 Vminibuffer_history_variable = histvar;
242 /* Run our hook, but not if it is empty.
243 (run-hooks would do nothing if it is empty,
244 but it's important to save time here in the usual case. */
245 if (!NILP (Vminibuffer_setup_hook) && !EQ (Vminibuffer_setup_hook, Qunbound))
246 call1 (Vrun_hooks, Qminibuffer_setup_hook);
248 /* ??? MCC did redraw_screen here if switching screens. */
249 recursive_edit_1 ();
251 /* If cursor is on the minibuffer line,
252 show the user we have exited by putting it in column 0. */
253 if ((FRAME_CURSOR_Y (selected_frame)
254 >= XFASTINT (XWINDOW (minibuf_window)->top))
255 && !noninteractive)
257 FRAME_CURSOR_X (selected_frame) = 0;
258 update_frame (selected_frame, 1, 1);
261 /* Make minibuffer contents into a string */
262 val = make_buffer_string (1, Z);
263 bcopy (GAP_END_ADDR, XSTRING (val)->data + GPT - BEG, Z - GPT);
265 /* VAL is the string of minibuffer text. */
266 last_minibuf_string = val;
268 /* Add the value to the appropriate history list. */
269 if (XTYPE (Vminibuffer_history_variable) == Lisp_Symbol
270 && ! EQ (XSYMBOL (Vminibuffer_history_variable)->value, Qunbound))
272 /* If the caller wanted to save the value read on a history list,
273 then do so if the value is not already the front of the list. */
274 Lisp_Object histval;
275 histval = Fsymbol_value (Vminibuffer_history_variable);
277 /* The value of the history variable must be a cons or nil. Other
278 values are unacceptable. We silently ignore these values. */
279 if (NILP (histval)
280 || (CONSP (histval)
281 && NILP (Fequal (last_minibuf_string, Fcar (histval)))))
282 Fset (Vminibuffer_history_variable,
283 Fcons (last_minibuf_string, histval));
286 /* If Lisp form desired instead of string, parse it. */
287 if (expflag)
288 val = Fread (val);
290 unbind_to (count, Qnil); /* The appropriate frame will get selected
291 in set-window-configuration. */
293 UNGCPRO;
295 return val;
298 /* Return a buffer to be used as the minibuffer at depth `depth'.
299 depth = 0 is the lowest allowed argument, and that is the value
300 used for nonrecursive minibuffer invocations */
302 Lisp_Object
303 get_minibuffer (depth)
304 int depth;
306 Lisp_Object tail, num, buf;
307 char name[14];
308 extern Lisp_Object nconc2 ();
310 XFASTINT (num) = depth;
311 tail = Fnthcdr (num, Vminibuffer_list);
312 if (NILP (tail))
314 tail = Fcons (Qnil, Qnil);
315 Vminibuffer_list = nconc2 (Vminibuffer_list, tail);
317 buf = Fcar (tail);
318 if (NILP (buf) || NILP (XBUFFER (buf)->name))
320 sprintf (name, " *Minibuf-%d*", depth);
321 buf = Fget_buffer_create (build_string (name));
323 /* Although the buffer's name starts with a space, undo should be
324 enabled in it. */
325 Fbuffer_enable_undo (buf);
327 XCONS (tail)->car = buf;
329 else
330 reset_buffer (XBUFFER (buf));
332 return buf;
335 /* This function is called on exiting minibuffer, whether normally or not,
336 and it restores the current window, buffer, etc. */
338 void
339 read_minibuf_unwind (data)
340 Lisp_Object data;
342 /* Erase the minibuffer we were using at this level. */
343 Fset_buffer (XWINDOW (minibuf_window)->buffer);
345 /* Prevent error in erase-buffer. */
346 current_buffer->read_only = Qnil;
347 Ferase_buffer ();
349 /* If this was a recursive minibuffer,
350 tie the minibuffer window back to the outer level minibuffer buffer */
351 minibuf_level--;
352 /* Make sure minibuffer window is erased, not ignored */
353 windows_or_buffers_changed++;
354 XFASTINT (XWINDOW (minibuf_window)->last_modified) = 0;
356 /* Restore prompt from outer minibuffer */
357 minibuf_prompt = minibuf_save_vector[minibuf_level].prompt;
358 minibuf_prompt_width = minibuf_save_vector[minibuf_level].prompt_width;
359 Vhelp_form = minibuf_save_vector[minibuf_level].help_form;
360 Vcurrent_prefix_arg = minibuf_save_vector[minibuf_level].current_prefix_arg;
361 Vminibuffer_history_position
362 = minibuf_save_vector[minibuf_level].history_position;
363 Vminibuffer_history_variable
364 = minibuf_save_vector[minibuf_level].history_variable;
368 /* This comment supplies the doc string for read-from-minibuffer,
369 for make-docfile to see. We cannot put this in the real DEFUN
370 due to limits in the Unix cpp.
372 DEFUN ("read-from-minibuffer", Fread_from_minibuffer, Sread_from_minibuffer, 1, 5, 0,
373 "Read a string from the minibuffer, prompting with string PROMPT.\n\
374 If optional second arg INITIAL-CONTENTS is non-nil, it is a string\n\
375 to be inserted into the minibuffer before reading input.\n\
376 If INITIAL-CONTENTS is (STRING . POSITION), the initial input\n\
377 is STRING, but point is placed POSITION characters into the string.\n\
378 Third arg KEYMAP is a keymap to use whilst reading;\n\
379 if omitted or nil, the default is `minibuffer-local-map'.\n\
380 If fourth arg READ is non-nil, then interpret the result as a lisp object\n\
381 and return that object:\n\
382 in other words, do `(car (read-from-string INPUT-STRING))'\n\
383 Fifth arg HIST, if non-nil, specifies a history list\n\
384 and optionally the initial position in the list.\n\
385 It can be a symbol, which is the history list variable to use,\n\
386 or it can be a cons cell (HISTVAR . HISTPOS).\n\
387 In that case, HISTVAR is the history list variable to use,\n\
388 and HISTPOS is the initial position (the position in the list\n\
389 which INITIAL-CONTENTS corresponds to).\n\
390 Positions are counted starting from 1 at the beginning of the list."
393 DEFUN ("read-from-minibuffer", Fread_from_minibuffer, Sread_from_minibuffer, 1, 5, 0,
394 0 /* See immediately above */)
395 (prompt, initial_contents, keymap, read, hist)
396 Lisp_Object prompt, initial_contents, keymap, read, hist;
398 int pos = 0;
399 Lisp_Object histvar, histpos, position;
400 position = Qnil;
402 CHECK_STRING (prompt, 0);
403 if (!NILP (initial_contents))
405 if (XTYPE (initial_contents) == Lisp_Cons)
407 position = Fcdr (initial_contents);
408 initial_contents = Fcar (initial_contents);
410 CHECK_STRING (initial_contents, 1);
411 if (!NILP (position))
413 CHECK_NUMBER (position, 0);
414 /* Convert to distance from end of input. */
415 pos = XINT (position) - 1 - XSTRING (initial_contents)->size;
419 if (NILP (keymap))
420 keymap = Vminibuffer_local_map;
421 else
422 keymap = get_keymap (keymap,2);
424 if (XTYPE (hist) == Lisp_Symbol)
426 histvar = hist;
427 histpos = Qnil;
429 else
431 histvar = Fcar_safe (hist);
432 histpos = Fcdr_safe (hist);
434 if (NILP (histvar))
435 histvar = Qminibuffer_history;
436 if (NILP (histpos))
437 XFASTINT (histpos) = 0;
439 return read_minibuf (keymap, initial_contents, prompt,
440 make_number (pos), !NILP (read), histvar, histpos);
443 DEFUN ("read-minibuffer", Fread_minibuffer, Sread_minibuffer, 1, 2, 0,
444 "Return a Lisp object read using the minibuffer.\n\
445 Prompt with PROMPT. If non-nil, optional second arg INITIAL-CONTENTS\n\
446 is a string to insert in the minibuffer before reading.")
447 (prompt, initial_contents)
448 Lisp_Object prompt, initial_contents;
450 CHECK_STRING (prompt, 0);
451 if (!NILP (initial_contents))
452 CHECK_STRING (initial_contents, 1);
453 return read_minibuf (Vminibuffer_local_map, initial_contents,
454 prompt, Qnil, 1, Qminibuffer_history, make_number (0));
457 DEFUN ("eval-minibuffer", Feval_minibuffer, Seval_minibuffer, 1, 2, 0,
458 "Return value of Lisp expression read using the minibuffer.\n\
459 Prompt with PROMPT. If non-nil, optional second arg INITIAL-CONTENTS\n\
460 is a string to insert in the minibuffer before reading.")
461 (prompt, initial_contents)
462 Lisp_Object prompt, initial_contents;
464 return Feval (Fread_minibuffer (prompt, initial_contents));
467 /* Functions that use the minibuffer to read various things. */
469 DEFUN ("read-string", Fread_string, Sread_string, 1, 2, 0,
470 "Read a string from the minibuffer, prompting with string PROMPT.\n\
471 If non-nil second arg INITIAL-INPUT is a string to insert before reading.")
472 (prompt, initial_input)
473 Lisp_Object prompt, initial_input;
475 return Fread_from_minibuffer (prompt, initial_input, Qnil, Qnil, Qnil);
478 DEFUN ("read-no-blanks-input", Fread_no_blanks_input, Sread_no_blanks_input, 1, 2, 0,
479 "Args PROMPT and INIT, strings. Read a string from the terminal, not allowing blanks.\n\
480 Prompt with PROMPT, and provide INIT as an initial value of the input string.")
481 (prompt, init)
482 Lisp_Object prompt, init;
484 CHECK_STRING (prompt, 0);
485 if (! NILP (init))
486 CHECK_STRING (init, 1);
488 return read_minibuf (Vminibuffer_local_ns_map, init, prompt, Qnil, 0,
489 Qminibuffer_history, make_number (0));
492 DEFUN ("read-command", Fread_command, Sread_command, 1, 1, 0,
493 "One arg PROMPT, a string. Read the name of a command and return as a symbol.\n\
494 Prompts with PROMPT.")
495 (prompt)
496 Lisp_Object prompt;
498 return Fintern (Fcompleting_read (prompt, Vobarray, Qcommandp, Qt, Qnil, Qnil),
499 Qnil);
502 #ifdef NOTDEF
503 DEFUN ("read-function", Fread_function, Sread_function, 1, 1, 0,
504 "One arg PROMPT, a string. Read the name of a function and return as a symbol.\n\
505 Prompts with PROMPT.")
506 (prompt)
507 Lisp_Object prompt;
509 return Fintern (Fcompleting_read (prompt, Vobarray, Qfboundp, Qt, Qnil, Qnil),
510 Qnil);
512 #endif /* NOTDEF */
514 DEFUN ("read-variable", Fread_variable, Sread_variable, 1, 1, 0,
515 "One arg PROMPT, a string. Read the name of a user variable and return\n\
516 it as a symbol. Prompts with PROMPT.\n\
517 A user variable is one whose documentation starts with a `*' character.")
518 (prompt)
519 Lisp_Object prompt;
521 return Fintern (Fcompleting_read (prompt, Vobarray,
522 Quser_variable_p, Qt, Qnil, Qnil),
523 Qnil);
526 DEFUN ("read-buffer", Fread_buffer, Sread_buffer, 1, 3, 0,
527 "One arg PROMPT, a string. Read the name of a buffer and return as a string.\n\
528 Prompts with PROMPT.\n\
529 Optional second arg is value to return if user enters an empty line.\n\
530 If optional third arg REQUIRE-MATCH is non-nil, only existing buffer names are allowed.")
531 (prompt, def, require_match)
532 Lisp_Object prompt, def, require_match;
534 Lisp_Object tem;
535 Lisp_Object args[3];
536 struct gcpro gcpro1;
538 if (XTYPE (def) == Lisp_Buffer)
539 def = XBUFFER (def)->name;
540 if (!NILP (def))
542 args[0] = build_string ("%s(default %s) ");
543 args[1] = prompt;
544 args[2] = def;
545 prompt = Fformat (3, args);
547 GCPRO1 (def);
548 tem = Fcompleting_read (prompt, Vbuffer_alist, Qnil, require_match, Qnil, Qnil);
549 UNGCPRO;
550 if (XSTRING (tem)->size)
551 return tem;
552 return def;
555 DEFUN ("try-completion", Ftry_completion, Stry_completion, 2, 3, 0,
556 "Return common substring of all completions of STRING in ALIST.\n\
557 Each car of each element of ALIST is tested to see if it begins with STRING.\n\
558 All that match are compared together; the longest initial sequence\n\
559 common to all matches is returned as a string.\n\
560 If there is no match at all, nil is returned.\n\
561 For an exact match, t is returned.\n\
563 ALIST can be an obarray instead of an alist.\n\
564 Then the print names of all symbols in the obarray are the possible matches.\n\
566 ALIST can also be a function to do the completion itself.\n\
567 It receives three arguments: the values STRING, PREDICATE and nil.\n\
568 Whatever it returns becomes the value of `try-completion'.\n\
570 If optional third argument PREDICATE is non-nil,\n\
571 it is used to test each possible match.\n\
572 The match is a candidate only if PREDICATE returns non-nil.\n\
573 The argument given to PREDICATE is the alist element or the symbol from the obarray.")
574 (string, alist, pred)
575 Lisp_Object string, alist, pred;
577 Lisp_Object bestmatch, tail, elt, eltstring;
578 int bestmatchsize;
579 int compare, matchsize;
580 int list = CONSP (alist) || NILP (alist);
581 int index, obsize;
582 int matchcount = 0;
583 Lisp_Object bucket, zero, end, tem;
584 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
586 CHECK_STRING (string, 0);
587 if (!list && XTYPE (alist) != Lisp_Vector)
588 return call3 (alist, string, pred, Qnil);
590 bestmatch = Qnil;
592 /* If ALIST is not a list, set TAIL just for gc pro. */
593 tail = alist;
594 if (! list)
596 index = 0;
597 obsize = XVECTOR (alist)->size;
598 bucket = XVECTOR (alist)->contents[index];
601 while (1)
603 /* Get the next element of the alist or obarray. */
604 /* Exit the loop if the elements are all used up. */
605 /* elt gets the alist element or symbol.
606 eltstring gets the name to check as a completion. */
608 if (list)
610 if (NILP (tail))
611 break;
612 elt = Fcar (tail);
613 eltstring = Fcar (elt);
614 tail = Fcdr (tail);
616 else
618 if (XFASTINT (bucket) != 0)
620 elt = bucket;
621 eltstring = Fsymbol_name (elt);
622 if (XSYMBOL (bucket)->next)
623 XSETSYMBOL (bucket, XSYMBOL (bucket)->next);
624 else
625 XFASTINT (bucket) = 0;
627 else if (++index >= obsize)
628 break;
629 else
631 bucket = XVECTOR (alist)->contents[index];
632 continue;
636 /* Is this element a possible completion? */
638 if (XTYPE (eltstring) == Lisp_String &&
639 XSTRING (string)->size <= XSTRING (eltstring)->size &&
640 0 > scmp (XSTRING (eltstring)->data, XSTRING (string)->data,
641 XSTRING (string)->size))
643 /* Yes. */
644 /* Ignore this element if there is a predicate
645 and the predicate doesn't like it. */
647 if (!NILP (pred))
649 if (EQ (pred, Qcommandp))
650 tem = Fcommandp (elt);
651 else
653 GCPRO4 (tail, string, eltstring, bestmatch);
654 tem = call1 (pred, elt);
655 UNGCPRO;
657 if (NILP (tem)) continue;
660 /* Update computation of how much all possible completions match */
662 matchcount++;
663 if (NILP (bestmatch))
664 bestmatch = eltstring, bestmatchsize = XSTRING (eltstring)->size;
665 else
667 compare = min (bestmatchsize, XSTRING (eltstring)->size);
668 matchsize = scmp (XSTRING (bestmatch)->data,
669 XSTRING (eltstring)->data,
670 compare);
671 if (matchsize < 0)
672 matchsize = compare;
673 if (completion_ignore_case)
675 /* If this is an exact match except for case,
676 use it as the best match rather than one that is not an
677 exact match. This way, we get the case pattern
678 of the actual match. */
679 if ((matchsize == XSTRING (eltstring)->size
680 && matchsize < XSTRING (bestmatch)->size)
682 /* If there is more than one exact match ignoring case,
683 and one of them is exact including case,
684 prefer that one. */
685 /* If there is no exact match ignoring case,
686 prefer a match that does not change the case
687 of the input. */
688 ((matchsize == XSTRING (eltstring)->size)
690 (matchsize == XSTRING (bestmatch)->size)
691 && !bcmp (XSTRING (eltstring)->data,
692 XSTRING (string)->data, XSTRING (string)->size)
693 && bcmp (XSTRING (bestmatch)->data,
694 XSTRING (string)->data, XSTRING (string)->size)))
695 bestmatch = eltstring;
697 bestmatchsize = matchsize;
702 if (NILP (bestmatch))
703 return Qnil; /* No completions found */
704 /* If we are ignoring case, and there is no exact match,
705 and no additional text was supplied,
706 don't change the case of what the user typed. */
707 if (completion_ignore_case && bestmatchsize == XSTRING (string)->size
708 && XSTRING (bestmatch)->size > bestmatchsize)
709 return string;
711 /* Return t if the supplied string is an exact match (counting case);
712 it does not require any change to be made. */
713 if (matchcount == 1 && bestmatchsize == XSTRING (string)->size
714 && !bcmp (XSTRING (bestmatch)->data, XSTRING (string)->data,
715 bestmatchsize))
716 return Qt;
718 XFASTINT (zero) = 0; /* Else extract the part in which */
719 XFASTINT (end) = bestmatchsize; /* all completions agree */
720 return Fsubstring (bestmatch, zero, end);
723 /* Compare exactly LEN chars of strings at S1 and S2,
724 ignoring case if appropriate.
725 Return -1 if strings match,
726 else number of chars that match at the beginning. */
728 scmp (s1, s2, len)
729 register char *s1, *s2;
730 int len;
732 register int l = len;
734 if (completion_ignore_case)
736 while (l && DOWNCASE (*s1++) == DOWNCASE (*s2++))
737 l--;
739 else
741 while (l && *s1++ == *s2++)
742 l--;
744 if (l == 0)
745 return -1;
746 else return len - l;
749 DEFUN ("all-completions", Fall_completions, Sall_completions, 2, 3, 0,
750 "Search for partial matches to STRING in ALIST.\n\
751 Each car of each element of ALIST is tested to see if it begins with STRING.\n\
752 The value is a list of all the strings from ALIST that match.\n\
753 ALIST can be an obarray instead of an alist.\n\
754 Then the print names of all symbols in the obarray are the possible matches.\n\
756 ALIST can also be a function to do the completion itself.\n\
757 It receives three arguments: the values STRING, PREDICATE and t.\n\
758 Whatever it returns becomes the value of `all-completion'.\n\
760 If optional third argument PREDICATE is non-nil,\n\
761 it is used to test each possible match.\n\
762 The match is a candidate only if PREDICATE returns non-nil.\n\
763 The argument given to PREDICATE is the alist element or the symbol from the obarray.")
764 (string, alist, pred)
765 Lisp_Object string, alist, pred;
767 Lisp_Object tail, elt, eltstring;
768 Lisp_Object allmatches;
769 int list = CONSP (alist) || NILP (alist);
770 int index, obsize;
771 Lisp_Object bucket, tem;
772 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
774 CHECK_STRING (string, 0);
775 if (!list && XTYPE (alist) != Lisp_Vector)
777 return call3 (alist, string, pred, Qt);
779 allmatches = Qnil;
781 /* If ALIST is not a list, set TAIL just for gc pro. */
782 tail = alist;
783 if (! list)
785 index = 0;
786 obsize = XVECTOR (alist)->size;
787 bucket = XVECTOR (alist)->contents[index];
790 while (1)
792 /* Get the next element of the alist or obarray. */
793 /* Exit the loop if the elements are all used up. */
794 /* elt gets the alist element or symbol.
795 eltstring gets the name to check as a completion. */
797 if (list)
799 if (NILP (tail))
800 break;
801 elt = Fcar (tail);
802 eltstring = Fcar (elt);
803 tail = Fcdr (tail);
805 else
807 if (XFASTINT (bucket) != 0)
809 elt = bucket;
810 eltstring = Fsymbol_name (elt);
811 if (XSYMBOL (bucket)->next)
812 XSETSYMBOL (bucket, XSYMBOL (bucket)->next);
813 else
814 XFASTINT (bucket) = 0;
816 else if (++index >= obsize)
817 break;
818 else
820 bucket = XVECTOR (alist)->contents[index];
821 continue;
825 /* Is this element a possible completion? */
827 if (XTYPE (eltstring) == Lisp_String
828 && XSTRING (string)->size <= XSTRING (eltstring)->size
829 /* Reject alternatives that start with space
830 unless the input starts with space. */
831 && ((XSTRING (string)->size > 0 && XSTRING (string)->data[0] == ' ')
832 || XSTRING (eltstring)->data[0] != ' ')
833 && 0 > scmp (XSTRING (eltstring)->data, XSTRING (string)->data,
834 XSTRING (string)->size))
836 /* Yes. */
837 /* Ignore this element if there is a predicate
838 and the predicate doesn't like it. */
840 if (!NILP (pred))
842 if (EQ (pred, Qcommandp))
843 tem = Fcommandp (elt);
844 else
846 GCPRO4 (tail, eltstring, allmatches, string);
847 tem = call1 (pred, elt);
848 UNGCPRO;
850 if (NILP (tem)) continue;
852 /* Ok => put it on the list. */
853 allmatches = Fcons (eltstring, allmatches);
857 return Fnreverse (allmatches);
860 Lisp_Object Vminibuffer_completion_table, Qminibuffer_completion_table;
861 Lisp_Object Vminibuffer_completion_predicate, Qminibuffer_completion_predicate;
862 Lisp_Object Vminibuffer_completion_confirm, Qminibuffer_completion_confirm;
864 /* This comment supplies the doc string for completing-read,
865 for make-docfile to see. We cannot put this in the real DEFUN
866 due to limits in the Unix cpp.
868 DEFUN ("completing-read", Fcompleting_read, Scompleting_read, 2, 6, 0,
869 "Read a string in the minibuffer, with completion.\n\
870 Args: PROMPT, TABLE, PREDICATE, REQUIRE-MATCH, INITIAL-INPUT, HIST.\n\
871 PROMPT is a string to prompt with; normally it ends in a colon and a space.\n\
872 TABLE is an alist whose elements' cars are strings, or an obarray.\n\
873 PREDICATE limits completion to a subset of TABLE.\n\
874 See `try-completion' for more details on completion, TABLE, and PREDICATE.\n\
875 If REQUIRE-MATCH is non-nil, the user is not allowed to exit unless\n\
876 the input is (or completes to) an element of TABLE.\n\
877 If it is also not t, Return does not exit if it does non-null completion.\n\
878 If INITIAL-INPUT is non-nil, insert it in the minibuffer initially.\n\
879 If it is (STRING . POSITION), the initial input\n\
880 is STRING, but point is placed POSITION characters into the string.\n\
881 HIST, if non-nil, specifies a history list\n\
882 and optionally the initial position in the list.\n\
883 It can be a symbol, which is the history list variable to use,\n\
884 or it can be a cons cell (HISTVAR . HISTPOS).\n\
885 In that case, HISTVAR is the history list variable to use,\n\
886 and HISTPOS is the initial position (the position in the list\n\
887 which INITIAL-CONTENTS corresponds to).\n\
888 Positions are counted starting from 1 at the beginning of the list.\n\
889 Completion ignores case if the ambient value of\n\
890 `completion-ignore-case' is non-nil."
892 DEFUN ("completing-read", Fcompleting_read, Scompleting_read, 2, 6, 0,
893 0 /* See immediately above */)
894 (prompt, table, pred, require_match, init, hist)
895 Lisp_Object prompt, table, pred, require_match, init, hist;
897 Lisp_Object val, histvar, histpos, position;
898 int pos = 0;
899 int count = specpdl_ptr - specpdl;
900 specbind (Qminibuffer_completion_table, table);
901 specbind (Qminibuffer_completion_predicate, pred);
902 specbind (Qminibuffer_completion_confirm,
903 EQ (require_match, Qt) ? Qnil : Qt);
904 last_exact_completion = Qnil;
906 position = Qnil;
907 if (!NILP (init))
909 if (XTYPE (init) == Lisp_Cons)
911 position = Fcdr (init);
912 init = Fcar (init);
914 CHECK_STRING (init, 0);
915 if (!NILP (position))
917 CHECK_NUMBER (position, 0);
918 /* Convert to distance from end of input. */
919 pos = XINT (position) - XSTRING (init)->size;
923 if (XTYPE (hist) == Lisp_Symbol)
925 histvar = hist;
926 histpos = Qnil;
928 else
930 histvar = Fcar_safe (hist);
931 histpos = Fcdr_safe (hist);
933 if (NILP (histvar))
934 histvar = Qminibuffer_history;
935 if (NILP (histpos))
936 XFASTINT (histpos) = 0;
938 val = read_minibuf (NILP (require_match)
939 ? Vminibuffer_local_completion_map
940 : Vminibuffer_local_must_match_map,
941 init, prompt, make_number (pos), 0,
942 histvar, histpos);
943 return unbind_to (count, val);
946 /* Temporarily display the string M at the end of the current
947 minibuffer contents. This is used to display things like
948 "[No Match]" when the user requests a completion for a prefix
949 that has no possible completions, and other quick, unobtrusive
950 messages. */
952 temp_echo_area_glyphs (m)
953 char *m;
955 int osize = ZV;
956 Lisp_Object oinhibit;
957 oinhibit = Vinhibit_quit;
959 /* Clear out any old echo-area message to make way for our new thing. */
960 message (0);
962 SET_PT (osize);
963 insert_string (m);
964 SET_PT (osize);
965 Vinhibit_quit = Qt;
966 Fsit_for (make_number (2), Qnil, Qnil);
967 del_range (point, ZV);
968 if (!NILP (Vquit_flag))
970 Vquit_flag = Qnil;
971 unread_command_events = Fcons (make_number (Ctl ('g')), Qnil);
973 Vinhibit_quit = oinhibit;
976 Lisp_Object Fminibuffer_completion_help ();
977 Lisp_Object assoc_for_completion ();
979 /* returns:
980 * 0 no possible completion
981 * 1 was already an exact and unique completion
982 * 3 was already an exact completion
983 * 4 completed to an exact completion
984 * 5 some completion happened
985 * 6 no completion happened
988 do_completion ()
990 Lisp_Object completion, tem;
991 int completedp;
992 Lisp_Object last;
994 completion = Ftry_completion (Fbuffer_string (), Vminibuffer_completion_table,
995 Vminibuffer_completion_predicate);
996 last = last_exact_completion;
997 last_exact_completion = Qnil;
999 if (NILP (completion))
1001 bitch_at_user ();
1002 temp_echo_area_glyphs (" [No match]");
1003 return 0;
1006 if (EQ (completion, Qt)) /* exact and unique match */
1007 return 1;
1009 /* compiler bug */
1010 tem = Fstring_equal (completion, Fbuffer_string());
1011 if (completedp = NILP (tem))
1013 Ferase_buffer (); /* Some completion happened */
1014 Finsert (1, &completion);
1017 /* It did find a match. Do we match some possibility exactly now? */
1018 if (CONSP (Vminibuffer_completion_table)
1019 || NILP (Vminibuffer_completion_table))
1020 tem = assoc_for_completion (Fbuffer_string (),
1021 Vminibuffer_completion_table);
1022 else if (XTYPE (Vminibuffer_completion_table) == Lisp_Vector)
1024 /* the primitive used by Fintern_soft */
1025 extern Lisp_Object oblookup ();
1027 tem = Fbuffer_string ();
1028 /* Bypass intern-soft as that loses for nil */
1029 tem = oblookup (Vminibuffer_completion_table,
1030 XSTRING (tem)->data, XSTRING (tem)->size);
1031 if (XTYPE (tem) != Lisp_Symbol)
1032 tem = Qnil;
1033 else if (!NILP (Vminibuffer_completion_predicate))
1034 tem = call1 (Vminibuffer_completion_predicate, tem);
1035 else
1036 tem = Qt;
1038 else
1039 tem = call3 (Vminibuffer_completion_table,
1040 Fbuffer_string (),
1041 Vminibuffer_completion_predicate,
1042 Qlambda);
1044 if (NILP (tem))
1045 { /* not an exact match */
1046 if (completedp)
1047 return 5;
1048 else if (auto_help)
1049 Fminibuffer_completion_help ();
1050 else
1051 temp_echo_area_glyphs (" [Next char not unique]");
1052 return 6;
1054 else if (completedp)
1055 return 4;
1056 /* If the last exact completion and this one were the same,
1057 it means we've already given a "Complete but not unique"
1058 message and the user's hit TAB again, so now we give him help. */
1059 last_exact_completion = completion;
1060 if (!NILP (last))
1062 tem = Fbuffer_string ();
1063 if (!NILP (Fequal (tem, last)))
1064 Fminibuffer_completion_help ();
1066 return 3;
1069 /* Like assoc but assumes KEY is a string, and ignores case if appropriate. */
1071 Lisp_Object
1072 assoc_for_completion (key, list)
1073 register Lisp_Object key;
1074 Lisp_Object list;
1076 register Lisp_Object tail;
1078 if (completion_ignore_case)
1079 key = Fupcase (key);
1081 for (tail = list; !NILP (tail); tail = Fcdr (tail))
1083 register Lisp_Object elt, tem, thiscar;
1084 elt = Fcar (tail);
1085 if (!CONSP (elt)) continue;
1086 thiscar = Fcar (elt);
1087 if (XTYPE (thiscar) != Lisp_String)
1088 continue;
1089 if (completion_ignore_case)
1090 thiscar = Fupcase (thiscar);
1091 tem = Fequal (thiscar, key);
1092 if (!NILP (tem)) return elt;
1093 QUIT;
1095 return Qnil;
1098 DEFUN ("minibuffer-complete", Fminibuffer_complete, Sminibuffer_complete, 0, 0, "",
1099 "Complete the minibuffer contents as far as possible.")
1102 register int i = do_completion ();
1103 switch (i)
1105 case 0:
1106 return Qnil;
1108 case 1:
1109 temp_echo_area_glyphs (" [Sole completion]");
1110 break;
1112 case 3:
1113 temp_echo_area_glyphs (" [Complete, but not unique]");
1114 break;
1117 return Qt;
1120 DEFUN ("minibuffer-complete-and-exit", Fminibuffer_complete_and_exit,
1121 Sminibuffer_complete_and_exit, 0, 0, "",
1122 "Complete the minibuffer contents, and maybe exit.\n\
1123 Exit if the name is valid with no completion needed.\n\
1124 If name was completed to a valid match,\n\
1125 a repetition of this command will exit.")
1128 register int i;
1130 /* Allow user to specify null string */
1131 if (BEGV == ZV)
1132 goto exit;
1134 i = do_completion ();
1135 switch (i)
1137 case 1:
1138 case 3:
1139 goto exit;
1141 case 4:
1142 if (!NILP (Vminibuffer_completion_confirm))
1144 temp_echo_area_glyphs (" [Confirm]");
1145 return Qnil;
1147 else
1148 goto exit;
1150 default:
1151 return Qnil;
1153 exit:
1154 Fthrow (Qexit, Qnil);
1155 /* NOTREACHED */
1158 DEFUN ("minibuffer-complete-word", Fminibuffer_complete_word, Sminibuffer_complete_word,
1159 0, 0, "",
1160 "Complete the minibuffer contents at most a single word.\n\
1161 After one word is completed as much as possible, a space or hyphen\n\
1162 is added, provided that matches some possible completion.")
1165 Lisp_Object completion, tem;
1166 register int i;
1167 register unsigned char *completion_string;
1168 struct gcpro gcpro1;
1170 /* We keep calling Fbuffer_string rather than arrange for GC to
1171 hold onto a pointer to one of the strings thus made. */
1173 completion = Ftry_completion (Fbuffer_string (),
1174 Vminibuffer_completion_table,
1175 Vminibuffer_completion_predicate);
1176 if (NILP (completion))
1178 bitch_at_user ();
1179 temp_echo_area_glyphs (" [No match]");
1180 return Qnil;
1182 if (EQ (completion, Qt))
1183 return Qnil;
1185 #if 0 /* How the below code used to look, for reference. */
1186 tem = Fbuffer_string ();
1187 b = XSTRING (tem)->data;
1188 i = ZV - 1 - XSTRING (completion)->size;
1189 p = XSTRING (completion)->data;
1190 if (i > 0 ||
1191 0 <= scmp (b, p, ZV - 1))
1193 i = 1;
1194 /* Set buffer to longest match of buffer tail and completion head. */
1195 while (0 <= scmp (b + i, p, ZV - 1 - i))
1196 i++;
1197 del_range (1, i + 1);
1198 SET_PT (ZV);
1200 #else /* Rewritten code */
1202 register unsigned char *buffer_string;
1203 int buffer_length, completion_length;
1205 tem = Fbuffer_string ();
1206 /* If reading a file name,
1207 expand any $ENVVAR refs in the buffer and in TEM. */
1208 if (EQ (Vminibuffer_completion_table, Qread_file_name_internal))
1210 Lisp_Object substituted;
1211 substituted = Fsubstitute_in_file_name (tem);
1212 if (! EQ (substituted, tem))
1214 tem = substituted;
1215 Ferase_buffer ();
1216 insert_from_string (tem, 0, XSTRING (tem)->size, 0);
1219 buffer_string = XSTRING (tem)->data;
1220 completion_string = XSTRING (completion)->data;
1221 buffer_length = XSTRING (tem)->size; /* ie ZV - BEGV */
1222 completion_length = XSTRING (completion)->size;
1223 i = buffer_length - completion_length;
1224 /* Mly: I don't understand what this is supposed to do AT ALL */
1225 if (i > 0 ||
1226 0 <= scmp (buffer_string, completion_string, buffer_length))
1228 /* Set buffer to longest match of buffer tail and completion head. */
1229 if (i <= 0) i = 1;
1230 buffer_string += i;
1231 buffer_length -= i;
1232 while (0 <= scmp (buffer_string++, completion_string, buffer_length--))
1233 i++;
1234 del_range (1, i + 1);
1235 SET_PT (ZV);
1238 #endif /* Rewritten code */
1239 i = ZV - BEGV;
1241 /* If completion finds next char not unique,
1242 consider adding a space or a hyphen. */
1243 if (i == XSTRING (completion)->size)
1245 GCPRO1 (completion);
1246 tem = Ftry_completion (concat2 (Fbuffer_string (), build_string (" ")),
1247 Vminibuffer_completion_table,
1248 Vminibuffer_completion_predicate);
1249 UNGCPRO;
1251 if (XTYPE (tem) == Lisp_String)
1252 completion = tem;
1253 else
1255 GCPRO1 (completion);
1256 tem =
1257 Ftry_completion (concat2 (Fbuffer_string (), build_string ("-")),
1258 Vminibuffer_completion_table,
1259 Vminibuffer_completion_predicate);
1260 UNGCPRO;
1262 if (XTYPE (tem) == Lisp_String)
1263 completion = tem;
1267 /* Now find first word-break in the stuff found by completion.
1268 i gets index in string of where to stop completing. */
1270 completion_string = XSTRING (completion)->data;
1272 for (; i < XSTRING (completion)->size; i++)
1273 if (SYNTAX (completion_string[i]) != Sword) break;
1274 if (i < XSTRING (completion)->size)
1275 i = i + 1;
1277 /* If got no characters, print help for user. */
1279 if (i == ZV - BEGV)
1281 if (auto_help)
1282 Fminibuffer_completion_help ();
1283 return Qnil;
1286 /* Otherwise insert in minibuffer the chars we got */
1288 Ferase_buffer ();
1289 insert_from_string (completion, 0, i, 1);
1290 return Qt;
1293 DEFUN ("display-completion-list", Fdisplay_completion_list, Sdisplay_completion_list,
1294 1, 1, 0,
1295 "Display the list of completions, COMPLETIONS, using `standard-output'.\n\
1296 Each element may be just a symbol or string\n\
1297 or may be a list of two strings to be printed as if concatenated.")
1298 (completions)
1299 Lisp_Object completions;
1301 register Lisp_Object tail, elt;
1302 register int i;
1303 int column = 0;
1304 /* No GCPRO needed, since (when it matters) every variable
1305 points to a non-string that is pointed to by COMPLETIONS. */
1306 struct buffer *old = current_buffer;
1307 if (XTYPE (Vstandard_output) == Lisp_Buffer)
1308 set_buffer_internal (XBUFFER (Vstandard_output));
1310 if (NILP (completions))
1311 write_string ("There are no possible completions of what you have typed.",
1312 -1);
1313 else
1315 write_string ("Possible completions are:", -1);
1316 for (tail = completions, i = 0; !NILP (tail); tail = Fcdr (tail), i++)
1318 /* this needs fixing for the case of long completions
1319 and/or narrow windows */
1320 /* Sadly, the window it will appear in is not known
1321 until after the text has been made. */
1322 if (i & 1)
1324 if (XTYPE (Vstandard_output) == Lisp_Buffer)
1325 Findent_to (make_number (35), make_number (1));
1326 else
1330 write_string (" ", -1);
1331 column++;
1333 while (column < 35);
1336 else
1338 Fterpri (Qnil);
1339 column = 0;
1341 elt = Fcar (tail);
1342 if (CONSP (elt))
1344 if (XTYPE (Vstandard_output) != Lisp_Buffer)
1346 Lisp_Object tem;
1347 tem = Flength (Fcar (elt));
1348 column += XINT (tem);
1349 tem = Flength (Fcar (Fcdr (elt)));
1350 column += XINT (tem);
1352 Fprinc (Fcar (elt), Qnil);
1353 Fprinc (Fcar (Fcdr (elt)), Qnil);
1355 else
1357 if (XTYPE (Vstandard_output) != Lisp_Buffer)
1359 Lisp_Object tem;
1360 tem = Flength (elt);
1361 column += XINT (tem);
1363 Fprinc (elt, Qnil);
1368 if (!NILP (Vrun_hooks))
1369 call1 (Vrun_hooks, intern ("completion-setup-hook"));
1371 if (XTYPE (Vstandard_output) == Lisp_Buffer)
1372 set_buffer_internal (old);
1373 return Qnil;
1376 DEFUN ("minibuffer-completion-help", Fminibuffer_completion_help, Sminibuffer_completion_help,
1377 0, 0, "",
1378 "Display a list of possible completions of the current minibuffer contents.")
1381 Lisp_Object completions;
1383 message ("Making completion list...");
1384 completions = Fall_completions (Fbuffer_string (),
1385 Vminibuffer_completion_table,
1386 Vminibuffer_completion_predicate);
1387 echo_area_glyphs = 0;
1389 if (NILP (completions))
1391 bitch_at_user ();
1392 temp_echo_area_glyphs (" [No completions]");
1394 else
1395 internal_with_output_to_temp_buffer ("*Completions*",
1396 Fdisplay_completion_list,
1397 Fsort (completions, Qstring_lessp));
1398 return Qnil;
1401 DEFUN ("self-insert-and-exit", Fself_insert_and_exit, Sself_insert_and_exit, 0, 0, "",
1402 "Terminate minibuffer input.")
1405 if (XTYPE (last_command_char) == Lisp_Int)
1406 internal_self_insert (last_command_char, 0);
1407 else
1408 bitch_at_user ();
1410 Fthrow (Qexit, Qnil);
1413 DEFUN ("exit-minibuffer", Fexit_minibuffer, Sexit_minibuffer, 0, 0, "",
1414 "Terminate this minibuffer argument.")
1417 Fthrow (Qexit, Qnil);
1420 DEFUN ("minibuffer-depth", Fminibuffer_depth, Sminibuffer_depth, 0, 0, 0,
1421 "Return current depth of activations of minibuffer, a nonnegative integer.")
1424 return make_number (minibuf_level);
1428 init_minibuf_once ()
1430 Vminibuffer_list = Qnil;
1431 staticpro (&Vminibuffer_list);
1434 syms_of_minibuf ()
1436 minibuf_level = 0;
1437 minibuf_prompt = 0;
1438 minibuf_save_vector_size = 5;
1439 minibuf_save_vector = (struct minibuf_save_data *) malloc (5 * sizeof (struct minibuf_save_data));
1441 Qread_file_name_internal = intern ("read-file-name-internal");
1442 staticpro (&Qread_file_name_internal);
1444 Qminibuffer_completion_table = intern ("minibuffer-completion-table");
1445 staticpro (&Qminibuffer_completion_table);
1447 Qminibuffer_completion_confirm = intern ("minibuffer-completion-confirm");
1448 staticpro (&Qminibuffer_completion_confirm);
1450 Qminibuffer_completion_predicate = intern ("minibuffer-completion-predicate");
1451 staticpro (&Qminibuffer_completion_predicate);
1453 staticpro (&last_minibuf_string);
1454 last_minibuf_string = Qnil;
1456 Quser_variable_p = intern ("user-variable-p");
1457 staticpro (&Quser_variable_p);
1459 Qminibuffer_history = intern ("minibuffer-history");
1460 staticpro (&Qminibuffer_history);
1462 Qminibuffer_setup_hook = intern ("minibuffer-setup-hook");
1463 staticpro (&Qminibuffer_setup_hook);
1465 DEFVAR_LISP ("minibuffer-setup-hook", &Vminibuffer_setup_hook,
1466 "Normal hook run just after entry to minibuffer.");
1467 Vminibuffer_setup_hook = Qnil;
1469 DEFVAR_BOOL ("completion-auto-help", &auto_help,
1470 "*Non-nil means automatically provide help for invalid completion input.");
1471 auto_help = 1;
1473 DEFVAR_BOOL ("completion-ignore-case", &completion_ignore_case,
1474 "Non-nil means don't consider case significant in completion.");
1475 completion_ignore_case = 0;
1477 DEFVAR_BOOL ("enable-recursive-minibuffers", &enable_recursive_minibuffers,
1478 "*Non-nil means to allow minibuffer commands while in the minibuffer.\n\
1479 More precisely, this variable makes a difference when the minibuffer window\n\
1480 is the selected window. If you are in some other window, minibuffer commands\n\
1481 are allowed even if a minibuffer is active.");
1482 enable_recursive_minibuffers = 0;
1484 DEFVAR_LISP ("minibuffer-completion-table", &Vminibuffer_completion_table,
1485 "Alist or obarray used for completion in the minibuffer.\n\
1486 This becomes the ALIST argument to `try-completion' and `all-completion'.\n\
1488 The value may alternatively be a function, which is given three arguments:\n\
1489 STRING, the current buffer contents;\n\
1490 PREDICATE, the predicate for filtering possible matches;\n\
1491 CODE, which says what kind of things to do.\n\
1492 CODE can be nil, t or `lambda'.\n\
1493 nil means to return the best completion of STRING, or nil if there is none.\n\
1494 t means to return a list of all possible completions of STRING.\n\
1495 `lambda' means to return t if STRING is a valid completion as it stands.");
1496 Vminibuffer_completion_table = Qnil;
1498 DEFVAR_LISP ("minibuffer-completion-predicate", &Vminibuffer_completion_predicate,
1499 "Within call to `completing-read', this holds the PREDICATE argument.");
1500 Vminibuffer_completion_predicate = Qnil;
1502 DEFVAR_LISP ("minibuffer-completion-confirm", &Vminibuffer_completion_confirm,
1503 "Non-nil => demand confirmation of completion before exiting minibuffer.");
1504 Vminibuffer_completion_confirm = Qnil;
1506 DEFVAR_LISP ("minibuffer-help-form", &Vminibuffer_help_form,
1507 "Value that `help-form' takes on inside the minibuffer.");
1508 Vminibuffer_help_form = Qnil;
1510 DEFVAR_LISP ("minibuffer-history-variable", &Vminibuffer_history_variable,
1511 "History list symbol to add minibuffer values to.\n\
1512 Each minibuffer output is added with\n\
1513 (set minibuffer-history-variable\n\
1514 (cons STRING (symbol-value minibuffer-history-variable)))");
1515 XFASTINT (Vminibuffer_history_variable) = 0;
1517 DEFVAR_LISP ("minibuffer-history-position", &Vminibuffer_history_position,
1518 "Current position of redoing in the history list.");
1519 Vminibuffer_history_position = Qnil;
1521 DEFVAR_BOOL ("minibuffer-auto-raise", &minibuffer_auto_raise,
1522 "*Non-nil means entering the minibuffer raises the minibuffer's frame.");
1523 minibuffer_auto_raise = 0;
1525 defsubr (&Sread_from_minibuffer);
1526 defsubr (&Seval_minibuffer);
1527 defsubr (&Sread_minibuffer);
1528 defsubr (&Sread_string);
1529 defsubr (&Sread_command);
1530 defsubr (&Sread_variable);
1531 defsubr (&Sread_buffer);
1532 defsubr (&Sread_no_blanks_input);
1533 defsubr (&Sminibuffer_depth);
1535 defsubr (&Stry_completion);
1536 defsubr (&Sall_completions);
1537 defsubr (&Scompleting_read);
1538 defsubr (&Sminibuffer_complete);
1539 defsubr (&Sminibuffer_complete_word);
1540 defsubr (&Sminibuffer_complete_and_exit);
1541 defsubr (&Sdisplay_completion_list);
1542 defsubr (&Sminibuffer_completion_help);
1544 defsubr (&Sself_insert_and_exit);
1545 defsubr (&Sexit_minibuffer);
1549 keys_of_minibuf ()
1551 initial_define_key (Vminibuffer_local_map, Ctl ('g'),
1552 "abort-recursive-edit");
1553 initial_define_key (Vminibuffer_local_map, Ctl ('m'),
1554 "exit-minibuffer");
1555 initial_define_key (Vminibuffer_local_map, Ctl ('j'),
1556 "exit-minibuffer");
1558 initial_define_key (Vminibuffer_local_ns_map, Ctl ('g'),
1559 "abort-recursive-edit");
1560 initial_define_key (Vminibuffer_local_ns_map, Ctl ('m'),
1561 "exit-minibuffer");
1562 initial_define_key (Vminibuffer_local_ns_map, Ctl ('j'),
1563 "exit-minibuffer");
1565 initial_define_key (Vminibuffer_local_ns_map, ' ',
1566 "exit-minibuffer");
1567 initial_define_key (Vminibuffer_local_ns_map, '\t',
1568 "exit-minibuffer");
1569 initial_define_key (Vminibuffer_local_ns_map, '?',
1570 "self-insert-and-exit");
1572 initial_define_key (Vminibuffer_local_completion_map, Ctl ('g'),
1573 "abort-recursive-edit");
1574 initial_define_key (Vminibuffer_local_completion_map, Ctl ('m'),
1575 "exit-minibuffer");
1576 initial_define_key (Vminibuffer_local_completion_map, Ctl ('j'),
1577 "exit-minibuffer");
1579 initial_define_key (Vminibuffer_local_completion_map, '\t',
1580 "minibuffer-complete");
1581 initial_define_key (Vminibuffer_local_completion_map, ' ',
1582 "minibuffer-complete-word");
1583 initial_define_key (Vminibuffer_local_completion_map, '?',
1584 "minibuffer-completion-help");
1586 initial_define_key (Vminibuffer_local_must_match_map, Ctl ('g'),
1587 "abort-recursive-edit");
1588 initial_define_key (Vminibuffer_local_must_match_map, Ctl ('m'),
1589 "minibuffer-complete-and-exit");
1590 initial_define_key (Vminibuffer_local_must_match_map, Ctl ('j'),
1591 "minibuffer-complete-and-exit");
1592 initial_define_key (Vminibuffer_local_must_match_map, '\t',
1593 "minibuffer-complete");
1594 initial_define_key (Vminibuffer_local_must_match_map, ' ',
1595 "minibuffer-complete-word");
1596 initial_define_key (Vminibuffer_local_must_match_map, '?',
1597 "minibuffer-completion-help");