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)
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. */
25 #include "dispextern.h"
30 #define min(a, b) ((a) < (b) ? (a) : (b))
34 /* List of buffers for use as minibuffers.
35 The first element of the list is used for the outermost minibuffer invocation,
36 the next element is used for a recursive minibuffer invocation, etc.
37 The list is extended at the end as deeped minibuffer recursions are encountered. */
38 Lisp_Object Vminibuffer_list
;
40 struct minibuf_save_data
44 Lisp_Object help_form
;
45 Lisp_Object current_prefix_arg
;
46 Lisp_Object history_position
;
47 Lisp_Object history_variable
;
50 int minibuf_save_vector_size
;
51 struct minibuf_save_data
*minibuf_save_vector
;
53 /* Depth in minibuffer invocations. */
56 /* Nonzero means display completion help for invalid input */
59 /* Fread_minibuffer leaves the input here as a string. */
60 Lisp_Object last_minibuf_string
;
62 /* Nonzero means let functions called when within a minibuffer
63 invoke recursive minibuffers (to read arguments, or whatever) */
64 int enable_recursive_minibuffers
;
66 /* help-form is bound to this while in the minibuffer. */
68 Lisp_Object Vminibuffer_help_form
;
70 /* Variable which is the history list to add minibuffer values to. */
72 Lisp_Object Vminibuffer_history_variable
;
74 /* Current position in the history list (adjusted by M-n and M-p). */
76 Lisp_Object Vminibuffer_history_position
;
78 Lisp_Object Qminibuffer_history
;
80 Lisp_Object Qread_file_name_internal
;
82 /* Normal hook for entry to minibuffer. */
84 Lisp_Object Qminibuffer_setup_hook
, Vminibuffer_setup_hook
;
86 /* Nonzero means completion ignores case. */
88 int completion_ignore_case
;
90 /* List of regexps that should restrict possible completions. */
92 Lisp_Object Vcompletion_regexp_list
;
94 /* Nonzero means raise the minibuffer frame when the minibuffer
97 int minibuffer_auto_raise
;
99 /* If last completion attempt reported "Complete but not unique"
100 then this is the string completed then; otherwise this is nil. */
102 static Lisp_Object last_exact_completion
;
104 Lisp_Object Quser_variable_p
;
106 /* Non-nil means it is the window for C-M-v to scroll
107 when the minibuffer is selected. */
108 extern Lisp_Object Vminibuf_scroll_window
;
110 /* Actual minibuffer invocation. */
112 void read_minibuf_unwind ();
113 Lisp_Object
get_minibuffer ();
114 Lisp_Object
read_minibuf ();
116 /* Read from the minibuffer using keymap MAP, initial contents INITIAL
117 (a string), putting point minus BACKUP_N chars from the end of INITIAL,
118 prompting with PROMPT (a string), using history list HISTVAR
119 with initial position HISTPOS. (BACKUP_N should be <= 0.)
121 Normally return the result as a string (the text that was read),
122 but if EXPFLAG is non-nil, read it and return the object read.
123 If HISTVAR is given, save the value read on that history only if it doesn't
124 match the front of that history list exactly. The value is pushed onto
125 the list as the string that was read, or as the object that resulted iff
126 EXPFLAG is non-nil. */
129 read_minibuf (map
, initial
, prompt
, backup_n
, expflag
, histvar
, histpos
)
133 Lisp_Object backup_n
;
138 register Lisp_Object val
;
139 int count
= specpdl_ptr
- specpdl
;
140 Lisp_Object mini_frame
;
141 struct gcpro gcpro1
, gcpro2
;
143 if (XTYPE (prompt
) != Lisp_String
)
144 prompt
= build_string ("");
146 /* Emacs in -batch mode calls minibuffer: print the prompt. */
147 if (noninteractive
&& XTYPE (prompt
) == Lisp_String
)
148 printf ("%s", XSTRING (prompt
)->data
);
150 if (!enable_recursive_minibuffers
152 && (EQ (selected_window
, minibuf_window
)))
154 || selected_frame
!= XFRAME (WINDOW_FRAME (XWINDOW (minibuf_window
)))
156 error ("Command attempted to use minibuffer while in minibuffer");
158 if (minibuf_level
== minibuf_save_vector_size
)
159 minibuf_save_vector
=
160 (struct minibuf_save_data
*)
161 xrealloc (minibuf_save_vector
,
162 (minibuf_save_vector_size
*= 2)
163 * sizeof (struct minibuf_save_data
));
164 minibuf_save_vector
[minibuf_level
].prompt
= minibuf_prompt
;
165 minibuf_save_vector
[minibuf_level
].prompt_width
= minibuf_prompt_width
;
166 minibuf_prompt_width
= 0;
167 /* >> Why is this done this way rather than binding these variables? */
168 minibuf_save_vector
[minibuf_level
].help_form
= Vhelp_form
;
169 minibuf_save_vector
[minibuf_level
].current_prefix_arg
= Vcurrent_prefix_arg
;
170 minibuf_save_vector
[minibuf_level
].history_position
= Vminibuffer_history_position
;
171 minibuf_save_vector
[minibuf_level
].history_variable
= Vminibuffer_history_variable
;
172 GCPRO2 (minibuf_save_vector
[minibuf_level
].help_form
,
173 minibuf_save_vector
[minibuf_level
].current_prefix_arg
);
175 record_unwind_protect (Fset_window_configuration
,
176 Fcurrent_window_configuration (Qnil
));
178 /* If the minibuffer window is on a different frame, save that
179 frame's configuration too. */
181 XSET (mini_frame
, Lisp_Frame
, WINDOW_FRAME (XWINDOW (minibuf_window
)));
182 if (XFRAME (mini_frame
) != selected_frame
)
183 record_unwind_protect (Fset_window_configuration
,
184 Fcurrent_window_configuration (mini_frame
));
186 /* If the minibuffer is on an iconified or invisible frame,
187 make it visible now. */
188 Fmake_frame_visible (mini_frame
);
190 if (minibuffer_auto_raise
)
191 Fraise_frame (mini_frame
);
194 val
= current_buffer
->directory
;
195 Fset_buffer (get_minibuffer (minibuf_level
));
197 /* The current buffer's default directory is usually the right thing
198 for our minibuffer here. However, if you're typing a command at
199 a minibuffer-only frame when minibuf_level is zero, then buf IS
200 the current_buffer, so reset_buffer leaves buf's default
201 directory unchanged. This is a bummer when you've just started
202 up Emacs and buf's default directory is Qnil. Here's a hack; can
203 you think of something better to do? Find another buffer with a
204 better directory, and use that one instead. */
205 if (XTYPE (val
) == Lisp_String
)
206 current_buffer
->directory
= val
;
209 Lisp_Object buf_list
;
211 for (buf_list
= Vbuffer_alist
;
213 buf_list
= XCONS (buf_list
)->cdr
)
215 Lisp_Object other_buf
;
217 other_buf
= XCONS (XCONS (buf_list
)->car
)->cdr
;
218 if (XTYPE (XBUFFER (other_buf
)->directory
) == Lisp_String
)
220 current_buffer
->directory
= XBUFFER (other_buf
)->directory
;
227 if (XFRAME (mini_frame
) != selected_frame
)
228 Fredirect_frame_focus (Fselected_frame (), mini_frame
);
230 Fmake_local_variable (Qprint_escape_newlines
);
231 print_escape_newlines
= 1;
233 record_unwind_protect (read_minibuf_unwind
, Qnil
);
235 Vminibuf_scroll_window
= selected_window
;
236 Fset_window_buffer (minibuf_window
, Fcurrent_buffer ());
237 Fselect_window (minibuf_window
);
238 XFASTINT (XWINDOW (minibuf_window
)->hscroll
) = 0;
245 Finsert (1, &initial
);
246 if (!NILP (backup_n
) && XTYPE (backup_n
) == Lisp_Int
)
247 Fforward_char (backup_n
);
250 minibuf_prompt
= (char *) alloca (XSTRING (prompt
)->size
+ 1);
251 bcopy (XSTRING (prompt
)->data
, minibuf_prompt
, XSTRING (prompt
)->size
+ 1);
252 echo_area_glyphs
= 0;
254 Vhelp_form
= Vminibuffer_help_form
;
255 current_buffer
->keymap
= map
;
256 Vminibuffer_history_position
= histpos
;
257 Vminibuffer_history_variable
= histvar
;
259 /* Run our hook, but not if it is empty.
260 (run-hooks would do nothing if it is empty,
261 but it's important to save time here in the usual case. */
262 if (!NILP (Vminibuffer_setup_hook
) && !EQ (Vminibuffer_setup_hook
, Qunbound
)
263 && !NILP (Vrun_hooks
))
264 call1 (Vrun_hooks
, Qminibuffer_setup_hook
);
266 /* ??? MCC did redraw_screen here if switching screens. */
269 /* If cursor is on the minibuffer line,
270 show the user we have exited by putting it in column 0. */
271 if ((FRAME_CURSOR_Y (selected_frame
)
272 >= XFASTINT (XWINDOW (minibuf_window
)->top
))
275 FRAME_CURSOR_X (selected_frame
) = 0;
276 update_frame (selected_frame
, 1, 1);
279 /* Make minibuffer contents into a string */
280 val
= make_buffer_string (1, Z
);
281 bcopy (GAP_END_ADDR
, XSTRING (val
)->data
+ GPT
- BEG
, Z
- GPT
);
283 /* VAL is the string of minibuffer text. */
284 last_minibuf_string
= val
;
286 /* Add the value to the appropriate history list. */
287 if (XTYPE (Vminibuffer_history_variable
) == Lisp_Symbol
288 && ! EQ (XSYMBOL (Vminibuffer_history_variable
)->value
, Qunbound
))
290 /* If the caller wanted to save the value read on a history list,
291 then do so if the value is not already the front of the list. */
293 histval
= Fsymbol_value (Vminibuffer_history_variable
);
295 /* The value of the history variable must be a cons or nil. Other
296 values are unacceptable. We silently ignore these values. */
299 && NILP (Fequal (last_minibuf_string
, Fcar (histval
)))))
300 Fset (Vminibuffer_history_variable
,
301 Fcons (last_minibuf_string
, histval
));
304 /* If Lisp form desired instead of string, parse it. */
307 Lisp_Object expr_and_pos
;
310 expr_and_pos
= Fread_from_string (val
, Qnil
, Qnil
);
311 /* Ignore trailing whitespace; any other trailing junk is an error. */
312 for (p
= XSTRING (val
)->data
+ XINT (Fcdr (expr_and_pos
)); *p
; p
++)
313 if (*p
!= ' ' && *p
!= '\t' && *p
!= '\n')
314 error ("Trailing garbage following expression");
315 val
= Fcar (expr_and_pos
);
319 return unbind_to (count
, val
); /* The appropriate frame will get selected
320 in set-window-configuration. */
323 /* Return a buffer to be used as the minibuffer at depth `depth'.
324 depth = 0 is the lowest allowed argument, and that is the value
325 used for nonrecursive minibuffer invocations */
328 get_minibuffer (depth
)
331 Lisp_Object tail
, num
, buf
;
333 extern Lisp_Object
nconc2 ();
335 XFASTINT (num
) = depth
;
336 tail
= Fnthcdr (num
, Vminibuffer_list
);
339 tail
= Fcons (Qnil
, Qnil
);
340 Vminibuffer_list
= nconc2 (Vminibuffer_list
, tail
);
343 if (NILP (buf
) || NILP (XBUFFER (buf
)->name
))
345 sprintf (name
, " *Minibuf-%d*", depth
);
346 buf
= Fget_buffer_create (build_string (name
));
348 /* Although the buffer's name starts with a space, undo should be
350 Fbuffer_enable_undo (buf
);
352 XCONS (tail
)->car
= buf
;
355 reset_buffer (XBUFFER (buf
));
360 /* This function is called on exiting minibuffer, whether normally or not,
361 and it restores the current window, buffer, etc. */
364 read_minibuf_unwind (data
)
367 /* Erase the minibuffer we were using at this level. */
368 Fset_buffer (XWINDOW (minibuf_window
)->buffer
);
370 /* Prevent error in erase-buffer. */
371 current_buffer
->read_only
= Qnil
;
374 /* If this was a recursive minibuffer,
375 tie the minibuffer window back to the outer level minibuffer buffer */
377 /* Make sure minibuffer window is erased, not ignored */
378 windows_or_buffers_changed
++;
379 XFASTINT (XWINDOW (minibuf_window
)->last_modified
) = 0;
381 /* Restore prompt from outer minibuffer */
382 minibuf_prompt
= minibuf_save_vector
[minibuf_level
].prompt
;
383 minibuf_prompt_width
= minibuf_save_vector
[minibuf_level
].prompt_width
;
384 Vhelp_form
= minibuf_save_vector
[minibuf_level
].help_form
;
385 Vcurrent_prefix_arg
= minibuf_save_vector
[minibuf_level
].current_prefix_arg
;
386 Vminibuffer_history_position
387 = minibuf_save_vector
[minibuf_level
].history_position
;
388 Vminibuffer_history_variable
389 = minibuf_save_vector
[minibuf_level
].history_variable
;
393 /* This comment supplies the doc string for read-from-minibuffer,
394 for make-docfile to see. We cannot put this in the real DEFUN
395 due to limits in the Unix cpp.
397 DEFUN ("read-from-minibuffer", Fread_from_minibuffer, Sread_from_minibuffer, 1, 5, 0,
398 "Read a string from the minibuffer, prompting with string PROMPT.\n\
399 If optional second arg INITIAL-CONTENTS is non-nil, it is a string\n\
400 to be inserted into the minibuffer before reading input.\n\
401 If INITIAL-CONTENTS is (STRING . POSITION), the initial input\n\
402 is STRING, but point is placed POSITION characters into the string.\n\
403 Third arg KEYMAP is a keymap to use whilst reading;\n\
404 if omitted or nil, the default is `minibuffer-local-map'.\n\
405 If fourth arg READ is non-nil, then interpret the result as a lisp object\n\
406 and return that object:\n\
407 in other words, do `(car (read-from-string INPUT-STRING))'\n\
408 Fifth arg HIST, if non-nil, specifies a history list\n\
409 and optionally the initial position in the list.\n\
410 It can be a symbol, which is the history list variable to use,\n\
411 or it can be a cons cell (HISTVAR . HISTPOS).\n\
412 In that case, HISTVAR is the history list variable to use,\n\
413 and HISTPOS is the initial position (the position in the list\n\
414 which INITIAL-CONTENTS corresponds to).\n\
415 Positions are counted starting from 1 at the beginning of the list."
418 DEFUN ("read-from-minibuffer", Fread_from_minibuffer
, Sread_from_minibuffer
, 1, 5, 0,
419 0 /* See immediately above */)
420 (prompt
, initial_contents
, keymap
, read
, hist
)
421 Lisp_Object prompt
, initial_contents
, keymap
, read
, hist
;
424 Lisp_Object histvar
, histpos
, position
;
427 CHECK_STRING (prompt
, 0);
428 if (!NILP (initial_contents
))
430 if (XTYPE (initial_contents
) == Lisp_Cons
)
432 position
= Fcdr (initial_contents
);
433 initial_contents
= Fcar (initial_contents
);
435 CHECK_STRING (initial_contents
, 1);
436 if (!NILP (position
))
438 CHECK_NUMBER (position
, 0);
439 /* Convert to distance from end of input. */
440 pos
= XINT (position
) - 1 - XSTRING (initial_contents
)->size
;
445 keymap
= Vminibuffer_local_map
;
447 keymap
= get_keymap (keymap
,2);
449 if (XTYPE (hist
) == Lisp_Symbol
)
456 histvar
= Fcar_safe (hist
);
457 histpos
= Fcdr_safe (hist
);
460 histvar
= Qminibuffer_history
;
462 XFASTINT (histpos
) = 0;
464 return read_minibuf (keymap
, initial_contents
, prompt
,
465 make_number (pos
), !NILP (read
), histvar
, histpos
);
468 DEFUN ("read-minibuffer", Fread_minibuffer
, Sread_minibuffer
, 1, 2, 0,
469 "Return a Lisp object read using the minibuffer.\n\
470 Prompt with PROMPT. If non-nil, optional second arg INITIAL-CONTENTS\n\
471 is a string to insert in the minibuffer before reading.")
472 (prompt
, initial_contents
)
473 Lisp_Object prompt
, initial_contents
;
475 CHECK_STRING (prompt
, 0);
476 if (!NILP (initial_contents
))
477 CHECK_STRING (initial_contents
, 1);
478 return read_minibuf (Vminibuffer_local_map
, initial_contents
,
479 prompt
, Qnil
, 1, Qminibuffer_history
, make_number (0));
482 DEFUN ("eval-minibuffer", Feval_minibuffer
, Seval_minibuffer
, 1, 2, 0,
483 "Return value of Lisp expression read using the minibuffer.\n\
484 Prompt with PROMPT. If non-nil, optional second arg INITIAL-CONTENTS\n\
485 is a string to insert in the minibuffer before reading.")
486 (prompt
, initial_contents
)
487 Lisp_Object prompt
, initial_contents
;
489 return Feval (Fread_minibuffer (prompt
, initial_contents
));
492 /* Functions that use the minibuffer to read various things. */
494 DEFUN ("read-string", Fread_string
, Sread_string
, 1, 2, 0,
495 "Read a string from the minibuffer, prompting with string PROMPT.\n\
496 If non-nil second arg INITIAL-INPUT is a string to insert before reading.")
497 (prompt
, initial_input
)
498 Lisp_Object prompt
, initial_input
;
500 return Fread_from_minibuffer (prompt
, initial_input
, Qnil
, Qnil
, Qnil
);
503 DEFUN ("read-no-blanks-input", Fread_no_blanks_input
, Sread_no_blanks_input
, 1, 2, 0,
504 "Args PROMPT and INIT, strings. Read a string from the terminal, not allowing blanks.\n\
505 Prompt with PROMPT, and provide INIT as an initial value of the input string.")
507 Lisp_Object prompt
, init
;
509 CHECK_STRING (prompt
, 0);
511 CHECK_STRING (init
, 1);
513 return read_minibuf (Vminibuffer_local_ns_map
, init
, prompt
, Qnil
, 0,
514 Qminibuffer_history
, make_number (0));
517 DEFUN ("read-command", Fread_command
, Sread_command
, 1, 1, 0,
518 "One arg PROMPT, a string. Read the name of a command and return as a symbol.\n\
519 Prompts with PROMPT.")
523 return Fintern (Fcompleting_read (prompt
, Vobarray
, Qcommandp
, Qt
, Qnil
, Qnil
),
528 DEFUN ("read-function", Fread_function
, Sread_function
, 1, 1, 0,
529 "One arg PROMPT, a string. Read the name of a function and return as a symbol.\n\
530 Prompts with PROMPT.")
534 return Fintern (Fcompleting_read (prompt
, Vobarray
, Qfboundp
, Qt
, Qnil
, Qnil
),
539 DEFUN ("read-variable", Fread_variable
, Sread_variable
, 1, 1, 0,
540 "One arg PROMPT, a string. Read the name of a user variable and return\n\
541 it as a symbol. Prompts with PROMPT.\n\
542 A user variable is one whose documentation starts with a `*' character.")
546 return Fintern (Fcompleting_read (prompt
, Vobarray
,
547 Quser_variable_p
, Qt
, Qnil
, Qnil
),
551 DEFUN ("read-buffer", Fread_buffer
, Sread_buffer
, 1, 3, 0,
552 "One arg PROMPT, a string. Read the name of a buffer and return as a string.\n\
553 Prompts with PROMPT.\n\
554 Optional second arg is value to return if user enters an empty line.\n\
555 If optional third arg REQUIRE-MATCH is non-nil, only existing buffer names are allowed.")
556 (prompt
, def
, require_match
)
557 Lisp_Object prompt
, def
, require_match
;
563 if (XTYPE (def
) == Lisp_Buffer
)
564 def
= XBUFFER (def
)->name
;
567 args
[0] = build_string ("%s(default %s) ");
570 prompt
= Fformat (3, args
);
573 tem
= Fcompleting_read (prompt
, Vbuffer_alist
, Qnil
, require_match
, Qnil
, Qnil
);
575 if (XSTRING (tem
)->size
)
580 DEFUN ("try-completion", Ftry_completion
, Stry_completion
, 2, 3, 0,
581 "Return common substring of all completions of STRING in ALIST.\n\
582 Each car of each element of ALIST is tested to see if it begins with STRING.\n\
583 All that match are compared together; the longest initial sequence\n\
584 common to all matches is returned as a string.\n\
585 If there is no match at all, nil is returned.\n\
586 For an exact match, t is returned.\n\
588 ALIST can be an obarray instead of an alist.\n\
589 Then the print names of all symbols in the obarray are the possible matches.\n\
591 ALIST can also be a function to do the completion itself.\n\
592 It receives three arguments: the values STRING, PREDICATE and nil.\n\
593 Whatever it returns becomes the value of `try-completion'.\n\
595 If optional third argument PREDICATE is non-nil,\n\
596 it is used to test each possible match.\n\
597 The match is a candidate only if PREDICATE returns non-nil.\n\
598 The argument given to PREDICATE is the alist element or the symbol from the obarray.")
599 (string
, alist
, pred
)
600 Lisp_Object string
, alist
, pred
;
602 Lisp_Object bestmatch
, tail
, elt
, eltstring
;
604 int compare
, matchsize
;
605 int list
= CONSP (alist
) || NILP (alist
);
608 Lisp_Object bucket
, zero
, end
, tem
;
609 struct gcpro gcpro1
, gcpro2
, gcpro3
, gcpro4
;
611 CHECK_STRING (string
, 0);
612 if (!list
&& XTYPE (alist
) != Lisp_Vector
)
613 return call3 (alist
, string
, pred
, Qnil
);
617 /* If ALIST is not a list, set TAIL just for gc pro. */
622 obsize
= XVECTOR (alist
)->size
;
623 bucket
= XVECTOR (alist
)->contents
[index
];
628 /* Get the next element of the alist or obarray. */
629 /* Exit the loop if the elements are all used up. */
630 /* elt gets the alist element or symbol.
631 eltstring gets the name to check as a completion. */
638 eltstring
= Fcar (elt
);
643 if (XFASTINT (bucket
) != 0)
646 eltstring
= Fsymbol_name (elt
);
647 if (XSYMBOL (bucket
)->next
)
648 XSETSYMBOL (bucket
, XSYMBOL (bucket
)->next
);
650 XFASTINT (bucket
) = 0;
652 else if (++index
>= obsize
)
656 bucket
= XVECTOR (alist
)->contents
[index
];
661 /* Is this element a possible completion? */
663 if (XTYPE (eltstring
) == Lisp_String
664 && XSTRING (string
)->size
<= XSTRING (eltstring
)->size
665 && 0 > scmp (XSTRING (eltstring
)->data
, XSTRING (string
)->data
,
666 XSTRING (string
)->size
))
673 /* Ignore this element if it fails to match all the regexps. */
674 for (regexps
= Vcompletion_regexp_list
; CONSP (regexps
);
675 regexps
= XCONS (regexps
)->cdr
)
677 tem
= Fstring_match (XCONS (regexps
)->car
, eltstring
, zero
);
684 /* Ignore this element if there is a predicate
685 and the predicate doesn't like it. */
689 if (EQ (pred
, Qcommandp
))
690 tem
= Fcommandp (elt
);
693 GCPRO4 (tail
, string
, eltstring
, bestmatch
);
694 tem
= call1 (pred
, elt
);
697 if (NILP (tem
)) continue;
700 /* Update computation of how much all possible completions match */
703 if (NILP (bestmatch
))
704 bestmatch
= eltstring
, bestmatchsize
= XSTRING (eltstring
)->size
;
707 compare
= min (bestmatchsize
, XSTRING (eltstring
)->size
);
708 matchsize
= scmp (XSTRING (bestmatch
)->data
,
709 XSTRING (eltstring
)->data
,
713 if (completion_ignore_case
)
715 /* If this is an exact match except for case,
716 use it as the best match rather than one that is not an
717 exact match. This way, we get the case pattern
718 of the actual match. */
719 if ((matchsize
== XSTRING (eltstring
)->size
720 && matchsize
< XSTRING (bestmatch
)->size
)
722 /* If there is more than one exact match ignoring case,
723 and one of them is exact including case,
725 /* If there is no exact match ignoring case,
726 prefer a match that does not change the case
728 ((matchsize
== XSTRING (eltstring
)->size
)
730 (matchsize
== XSTRING (bestmatch
)->size
)
731 && !bcmp (XSTRING (eltstring
)->data
,
732 XSTRING (string
)->data
, XSTRING (string
)->size
)
733 && bcmp (XSTRING (bestmatch
)->data
,
734 XSTRING (string
)->data
, XSTRING (string
)->size
)))
735 bestmatch
= eltstring
;
737 bestmatchsize
= matchsize
;
742 if (NILP (bestmatch
))
743 return Qnil
; /* No completions found */
744 /* If we are ignoring case, and there is no exact match,
745 and no additional text was supplied,
746 don't change the case of what the user typed. */
747 if (completion_ignore_case
&& bestmatchsize
== XSTRING (string
)->size
748 && XSTRING (bestmatch
)->size
> bestmatchsize
)
751 /* Return t if the supplied string is an exact match (counting case);
752 it does not require any change to be made. */
753 if (matchcount
== 1 && bestmatchsize
== XSTRING (string
)->size
754 && !bcmp (XSTRING (bestmatch
)->data
, XSTRING (string
)->data
,
758 XFASTINT (zero
) = 0; /* Else extract the part in which */
759 XFASTINT (end
) = bestmatchsize
; /* all completions agree */
760 return Fsubstring (bestmatch
, zero
, end
);
763 /* Compare exactly LEN chars of strings at S1 and S2,
764 ignoring case if appropriate.
765 Return -1 if strings match,
766 else number of chars that match at the beginning. */
769 register char *s1
, *s2
;
772 register int l
= len
;
774 if (completion_ignore_case
)
776 while (l
&& DOWNCASE (*s1
++) == DOWNCASE (*s2
++))
781 while (l
&& *s1
++ == *s2
++)
789 DEFUN ("all-completions", Fall_completions
, Sall_completions
, 2, 3, 0,
790 "Search for partial matches to STRING in ALIST.\n\
791 Each car of each element of ALIST is tested to see if it begins with STRING.\n\
792 The value is a list of all the strings from ALIST that match.\n\
793 ALIST can be an obarray instead of an alist.\n\
794 Then the print names of all symbols in the obarray are the possible matches.\n\
796 ALIST can also be a function to do the completion itself.\n\
797 It receives three arguments: the values STRING, PREDICATE and t.\n\
798 Whatever it returns becomes the value of `all-completion'.\n\
800 If optional third argument PREDICATE is non-nil,\n\
801 it is used to test each possible match.\n\
802 The match is a candidate only if PREDICATE returns non-nil.\n\
803 The argument given to PREDICATE is the alist element or the symbol from the obarray.")
804 (string
, alist
, pred
)
805 Lisp_Object string
, alist
, pred
;
807 Lisp_Object tail
, elt
, eltstring
;
808 Lisp_Object allmatches
;
809 int list
= CONSP (alist
) || NILP (alist
);
811 Lisp_Object bucket
, tem
;
812 struct gcpro gcpro1
, gcpro2
, gcpro3
, gcpro4
;
814 CHECK_STRING (string
, 0);
815 if (!list
&& XTYPE (alist
) != Lisp_Vector
)
817 return call3 (alist
, string
, pred
, Qt
);
821 /* If ALIST is not a list, set TAIL just for gc pro. */
826 obsize
= XVECTOR (alist
)->size
;
827 bucket
= XVECTOR (alist
)->contents
[index
];
832 /* Get the next element of the alist or obarray. */
833 /* Exit the loop if the elements are all used up. */
834 /* elt gets the alist element or symbol.
835 eltstring gets the name to check as a completion. */
842 eltstring
= Fcar (elt
);
847 if (XFASTINT (bucket
) != 0)
850 eltstring
= Fsymbol_name (elt
);
851 if (XSYMBOL (bucket
)->next
)
852 XSETSYMBOL (bucket
, XSYMBOL (bucket
)->next
);
854 XFASTINT (bucket
) = 0;
856 else if (++index
>= obsize
)
860 bucket
= XVECTOR (alist
)->contents
[index
];
865 /* Is this element a possible completion? */
867 if (XTYPE (eltstring
) == Lisp_String
868 && XSTRING (string
)->size
<= XSTRING (eltstring
)->size
869 /* Reject alternatives that start with space
870 unless the input starts with space. */
871 && ((XSTRING (string
)->size
> 0 && XSTRING (string
)->data
[0] == ' ')
872 || XSTRING (eltstring
)->data
[0] != ' ')
873 && 0 > scmp (XSTRING (eltstring
)->data
, XSTRING (string
)->data
,
874 XSTRING (string
)->size
))
881 /* Ignore this element if it fails to match all the regexps. */
882 for (regexps
= Vcompletion_regexp_list
; CONSP (regexps
);
883 regexps
= XCONS (regexps
)->cdr
)
885 tem
= Fstring_match (XCONS (regexps
)->car
, eltstring
, zero
);
892 /* Ignore this element if there is a predicate
893 and the predicate doesn't like it. */
897 if (EQ (pred
, Qcommandp
))
898 tem
= Fcommandp (elt
);
901 GCPRO4 (tail
, eltstring
, allmatches
, string
);
902 tem
= call1 (pred
, elt
);
905 if (NILP (tem
)) continue;
907 /* Ok => put it on the list. */
908 allmatches
= Fcons (eltstring
, allmatches
);
912 return Fnreverse (allmatches
);
915 Lisp_Object Vminibuffer_completion_table
, Qminibuffer_completion_table
;
916 Lisp_Object Vminibuffer_completion_predicate
, Qminibuffer_completion_predicate
;
917 Lisp_Object Vminibuffer_completion_confirm
, Qminibuffer_completion_confirm
;
919 /* This comment supplies the doc string for completing-read,
920 for make-docfile to see. We cannot put this in the real DEFUN
921 due to limits in the Unix cpp.
923 DEFUN ("completing-read", Fcompleting_read, Scompleting_read, 2, 6, 0,
924 "Read a string in the minibuffer, with completion.\n\
925 Args: PROMPT, TABLE, PREDICATE, REQUIRE-MATCH, INITIAL-INPUT, HIST.\n\
926 PROMPT is a string to prompt with; normally it ends in a colon and a space.\n\
927 TABLE is an alist whose elements' cars are strings, or an obarray.\n\
928 PREDICATE limits completion to a subset of TABLE.\n\
929 See `try-completion' for more details on completion, TABLE, and PREDICATE.\n\
930 If REQUIRE-MATCH is non-nil, the user is not allowed to exit unless\n\
931 the input is (or completes to) an element of TABLE.\n\
932 If it is also not t, Return does not exit if it does non-null completion.\n\
933 If INITIAL-INPUT is non-nil, insert it in the minibuffer initially.\n\
934 If it is (STRING . POSITION), the initial input\n\
935 is STRING, but point is placed POSITION characters into the string.\n\
936 HIST, if non-nil, specifies a history list\n\
937 and optionally the initial position in the list.\n\
938 It can be a symbol, which is the history list variable to use,\n\
939 or it can be a cons cell (HISTVAR . HISTPOS).\n\
940 In that case, HISTVAR is the history list variable to use,\n\
941 and HISTPOS is the initial position (the position in the list\n\
942 which INITIAL-CONTENTS corresponds to).\n\
943 Positions are counted starting from 1 at the beginning of the list.\n\
944 Completion ignores case if the ambient value of\n\
945 `completion-ignore-case' is non-nil."
947 DEFUN ("completing-read", Fcompleting_read
, Scompleting_read
, 2, 6, 0,
948 0 /* See immediately above */)
949 (prompt
, table
, pred
, require_match
, init
, hist
)
950 Lisp_Object prompt
, table
, pred
, require_match
, init
, hist
;
952 Lisp_Object val
, histvar
, histpos
, position
;
954 int count
= specpdl_ptr
- specpdl
;
955 specbind (Qminibuffer_completion_table
, table
);
956 specbind (Qminibuffer_completion_predicate
, pred
);
957 specbind (Qminibuffer_completion_confirm
,
958 EQ (require_match
, Qt
) ? Qnil
: Qt
);
959 last_exact_completion
= Qnil
;
964 if (XTYPE (init
) == Lisp_Cons
)
966 position
= Fcdr (init
);
969 CHECK_STRING (init
, 0);
970 if (!NILP (position
))
972 CHECK_NUMBER (position
, 0);
973 /* Convert to distance from end of input. */
974 pos
= XINT (position
) - XSTRING (init
)->size
;
978 if (XTYPE (hist
) == Lisp_Symbol
)
985 histvar
= Fcar_safe (hist
);
986 histpos
= Fcdr_safe (hist
);
989 histvar
= Qminibuffer_history
;
991 XFASTINT (histpos
) = 0;
993 val
= read_minibuf (NILP (require_match
)
994 ? Vminibuffer_local_completion_map
995 : Vminibuffer_local_must_match_map
,
996 init
, prompt
, make_number (pos
), 0,
998 return unbind_to (count
, val
);
1001 /* Temporarily display the string M at the end of the current
1002 minibuffer contents. This is used to display things like
1003 "[No Match]" when the user requests a completion for a prefix
1004 that has no possible completions, and other quick, unobtrusive
1007 temp_echo_area_glyphs (m
)
1011 Lisp_Object oinhibit
;
1012 oinhibit
= Vinhibit_quit
;
1014 /* Clear out any old echo-area message to make way for our new thing. */
1021 Fsit_for (make_number (2), Qnil
, Qnil
);
1022 del_range (point
, ZV
);
1023 if (!NILP (Vquit_flag
))
1026 unread_command_events
= Fcons (make_number (quit_char
), Qnil
);
1028 Vinhibit_quit
= oinhibit
;
1031 Lisp_Object
Fminibuffer_completion_help ();
1032 Lisp_Object
assoc_for_completion ();
1035 * 0 no possible completion
1036 * 1 was already an exact and unique completion
1037 * 3 was already an exact completion
1038 * 4 completed to an exact completion
1039 * 5 some completion happened
1040 * 6 no completion happened
1045 Lisp_Object completion
, tem
;
1048 struct gcpro gcpro1
, gcpro2
;
1050 GCPRO2 (completion
, last
);
1051 completion
= Ftry_completion (Fbuffer_string (), Vminibuffer_completion_table
,
1052 Vminibuffer_completion_predicate
);
1053 last
= last_exact_completion
;
1054 last_exact_completion
= Qnil
;
1056 if (NILP (completion
))
1059 temp_echo_area_glyphs (" [No match]");
1064 if (EQ (completion
, Qt
)) /* exact and unique match */
1071 tem
= Fstring_equal (completion
, Fbuffer_string());
1072 if (completedp
= NILP (tem
))
1074 Ferase_buffer (); /* Some completion happened */
1075 Finsert (1, &completion
);
1078 /* It did find a match. Do we match some possibility exactly now? */
1079 if (CONSP (Vminibuffer_completion_table
)
1080 || NILP (Vminibuffer_completion_table
))
1081 tem
= assoc_for_completion (Fbuffer_string (),
1082 Vminibuffer_completion_table
);
1083 else if (XTYPE (Vminibuffer_completion_table
) == Lisp_Vector
)
1085 /* the primitive used by Fintern_soft */
1086 extern Lisp_Object
oblookup ();
1088 tem
= Fbuffer_string ();
1089 /* Bypass intern-soft as that loses for nil */
1090 tem
= oblookup (Vminibuffer_completion_table
,
1091 XSTRING (tem
)->data
, XSTRING (tem
)->size
);
1092 if (XTYPE (tem
) != Lisp_Symbol
)
1094 else if (!NILP (Vminibuffer_completion_predicate
))
1095 tem
= call1 (Vminibuffer_completion_predicate
, tem
);
1100 tem
= call3 (Vminibuffer_completion_table
,
1102 Vminibuffer_completion_predicate
,
1107 /* not an exact match */
1112 Fminibuffer_completion_help ();
1114 temp_echo_area_glyphs (" [Next char not unique]");
1117 else if (completedp
)
1122 /* If the last exact completion and this one were the same,
1123 it means we've already given a "Complete but not unique"
1124 message and the user's hit TAB again, so now we give him help. */
1125 last_exact_completion
= completion
;
1128 tem
= Fbuffer_string ();
1129 if (!NILP (Fequal (tem
, last
)))
1130 Fminibuffer_completion_help ();
1136 /* Like assoc but assumes KEY is a string, and ignores case if appropriate. */
1139 assoc_for_completion (key
, list
)
1140 register Lisp_Object key
;
1143 register Lisp_Object tail
;
1145 if (completion_ignore_case
)
1146 key
= Fupcase (key
);
1148 for (tail
= list
; !NILP (tail
); tail
= Fcdr (tail
))
1150 register Lisp_Object elt
, tem
, thiscar
;
1152 if (!CONSP (elt
)) continue;
1153 thiscar
= Fcar (elt
);
1154 if (XTYPE (thiscar
) != Lisp_String
)
1156 if (completion_ignore_case
)
1157 thiscar
= Fupcase (thiscar
);
1158 tem
= Fequal (thiscar
, key
);
1159 if (!NILP (tem
)) return elt
;
1165 DEFUN ("minibuffer-complete", Fminibuffer_complete
, Sminibuffer_complete
, 0, 0, "",
1166 "Complete the minibuffer contents as far as possible.\n\
1167 Return nil if there is no valid completion, else t.\n\
1168 If no characters can be completed, display a list of possible completions.\n\
1169 If you repeat this command after it displayed such a list,\n\
1170 scroll the window of possible completions.")
1174 Lisp_Object window
, tem
;
1176 /* If the previous command was not this, then mark the completion
1178 if (! EQ (last_command
, this_command
))
1179 Vminibuf_scroll_window
= Qnil
;
1181 window
= Vminibuf_scroll_window
;
1182 /* If there's a fresh completion window with a live buffer,
1183 and this command is repeated, scroll that window. */
1184 if (! NILP (window
) && ! NILP (XWINDOW (window
)->buffer
)
1185 && !NILP (XBUFFER (XWINDOW (window
)->buffer
)->name
))
1187 struct buffer
*obuf
= current_buffer
;
1189 Fset_buffer (XWINDOW (window
)->buffer
);
1190 tem
= Fpos_visible_in_window_p (make_number (ZV
), window
);
1192 /* If end is in view, scroll up to the beginning. */
1193 Fset_window_start (window
, BEGV
);
1195 /* Else scroll down one screen. */
1196 Fscroll_other_window (Qnil
);
1198 set_buffer_internal (obuf
);
1202 i
= do_completion ();
1209 temp_echo_area_glyphs (" [Sole completion]");
1213 temp_echo_area_glyphs (" [Complete, but not unique]");
1220 DEFUN ("minibuffer-complete-and-exit", Fminibuffer_complete_and_exit
,
1221 Sminibuffer_complete_and_exit
, 0, 0, "",
1222 "Complete the minibuffer contents, and maybe exit.\n\
1223 Exit if the name is valid with no completion needed.\n\
1224 If name was completed to a valid match,\n\
1225 a repetition of this command will exit.")
1230 /* Allow user to specify null string */
1234 i
= do_completion ();
1242 if (!NILP (Vminibuffer_completion_confirm
))
1244 temp_echo_area_glyphs (" [Confirm]");
1254 Fthrow (Qexit
, Qnil
);
1258 DEFUN ("minibuffer-complete-word", Fminibuffer_complete_word
, Sminibuffer_complete_word
,
1260 "Complete the minibuffer contents at most a single word.\n\
1261 After one word is completed as much as possible, a space or hyphen\n\
1262 is added, provided that matches some possible completion.\n\
1263 Return nil if there is no valid completion, else t.")
1266 Lisp_Object completion
, tem
;
1268 register unsigned char *completion_string
;
1269 struct gcpro gcpro1
;
1271 /* We keep calling Fbuffer_string rather than arrange for GC to
1272 hold onto a pointer to one of the strings thus made. */
1274 completion
= Ftry_completion (Fbuffer_string (),
1275 Vminibuffer_completion_table
,
1276 Vminibuffer_completion_predicate
);
1277 if (NILP (completion
))
1280 temp_echo_area_glyphs (" [No match]");
1283 if (EQ (completion
, Qt
))
1286 #if 0 /* How the below code used to look, for reference. */
1287 tem
= Fbuffer_string ();
1288 b
= XSTRING (tem
)->data
;
1289 i
= ZV
- 1 - XSTRING (completion
)->size
;
1290 p
= XSTRING (completion
)->data
;
1292 0 <= scmp (b
, p
, ZV
- 1))
1295 /* Set buffer to longest match of buffer tail and completion head. */
1296 while (0 <= scmp (b
+ i
, p
, ZV
- 1 - i
))
1298 del_range (1, i
+ 1);
1301 #else /* Rewritten code */
1303 register unsigned char *buffer_string
;
1304 int buffer_length
, completion_length
;
1306 tem
= Fbuffer_string ();
1307 /* If reading a file name,
1308 expand any $ENVVAR refs in the buffer and in TEM. */
1309 if (EQ (Vminibuffer_completion_table
, Qread_file_name_internal
))
1311 Lisp_Object substituted
;
1312 substituted
= Fsubstitute_in_file_name (tem
);
1313 if (! EQ (substituted
, tem
))
1317 insert_from_string (tem
, 0, XSTRING (tem
)->size
, 0);
1320 buffer_string
= XSTRING (tem
)->data
;
1321 completion_string
= XSTRING (completion
)->data
;
1322 buffer_length
= XSTRING (tem
)->size
; /* ie ZV - BEGV */
1323 completion_length
= XSTRING (completion
)->size
;
1324 i
= buffer_length
- completion_length
;
1325 /* Mly: I don't understand what this is supposed to do AT ALL */
1327 0 <= scmp (buffer_string
, completion_string
, buffer_length
))
1329 /* Set buffer to longest match of buffer tail and completion head. */
1333 while (0 <= scmp (buffer_string
++, completion_string
, buffer_length
--))
1335 del_range (1, i
+ 1);
1339 #endif /* Rewritten code */
1342 /* If completion finds next char not unique,
1343 consider adding a space or a hyphen. */
1344 if (i
== XSTRING (completion
)->size
)
1346 GCPRO1 (completion
);
1347 tem
= Ftry_completion (concat2 (Fbuffer_string (), build_string (" ")),
1348 Vminibuffer_completion_table
,
1349 Vminibuffer_completion_predicate
);
1352 if (XTYPE (tem
) == Lisp_String
)
1356 GCPRO1 (completion
);
1358 Ftry_completion (concat2 (Fbuffer_string (), build_string ("-")),
1359 Vminibuffer_completion_table
,
1360 Vminibuffer_completion_predicate
);
1363 if (XTYPE (tem
) == Lisp_String
)
1368 /* Now find first word-break in the stuff found by completion.
1369 i gets index in string of where to stop completing. */
1371 completion_string
= XSTRING (completion
)->data
;
1373 for (; i
< XSTRING (completion
)->size
; i
++)
1374 if (SYNTAX (completion_string
[i
]) != Sword
) break;
1375 if (i
< XSTRING (completion
)->size
)
1378 /* If got no characters, print help for user. */
1383 Fminibuffer_completion_help ();
1387 /* Otherwise insert in minibuffer the chars we got */
1390 insert_from_string (completion
, 0, i
, 1);
1394 DEFUN ("display-completion-list", Fdisplay_completion_list
, Sdisplay_completion_list
,
1396 "Display the list of completions, COMPLETIONS, using `standard-output'.\n\
1397 Each element may be just a symbol or string\n\
1398 or may be a list of two strings to be printed as if concatenated.\n\
1399 `standard-output' must be a buffer.\n\
1400 At the end, run the normal hook `completion-setup-hook'.\n\
1401 It can find the completion buffer in `standard-output'.")
1403 Lisp_Object completions
;
1405 register Lisp_Object tail
, elt
;
1408 /* No GCPRO needed, since (when it matters) every variable
1409 points to a non-string that is pointed to by COMPLETIONS. */
1410 struct buffer
*old
= current_buffer
;
1411 if (XTYPE (Vstandard_output
) == Lisp_Buffer
)
1412 set_buffer_internal (XBUFFER (Vstandard_output
));
1414 if (NILP (completions
))
1415 write_string ("There are no possible completions of what you have typed.",
1419 write_string ("Possible completions are:", -1);
1420 for (tail
= completions
, i
= 0; !NILP (tail
); tail
= Fcdr (tail
), i
++)
1422 /* this needs fixing for the case of long completions
1423 and/or narrow windows */
1424 /* Sadly, the window it will appear in is not known
1425 until after the text has been made. */
1428 if (XTYPE (Vstandard_output
) == Lisp_Buffer
)
1429 Findent_to (make_number (35), make_number (1));
1434 write_string (" ", -1);
1437 while (column
< 35);
1448 if (XTYPE (Vstandard_output
) != Lisp_Buffer
)
1451 tem
= Flength (Fcar (elt
));
1452 column
+= XINT (tem
);
1453 tem
= Flength (Fcar (Fcdr (elt
)));
1454 column
+= XINT (tem
);
1456 Fprinc (Fcar (elt
), Qnil
);
1457 Fprinc (Fcar (Fcdr (elt
)), Qnil
);
1461 if (XTYPE (Vstandard_output
) != Lisp_Buffer
)
1464 tem
= Flength (elt
);
1465 column
+= XINT (tem
);
1472 if (XTYPE (Vstandard_output
) == Lisp_Buffer
)
1473 set_buffer_internal (old
);
1475 if (!NILP (Vrun_hooks
))
1476 call1 (Vrun_hooks
, intern ("completion-setup-hook"));
1481 DEFUN ("minibuffer-completion-help", Fminibuffer_completion_help
, Sminibuffer_completion_help
,
1483 "Display a list of possible completions of the current minibuffer contents.")
1486 Lisp_Object completions
;
1488 message ("Making completion list...");
1489 completions
= Fall_completions (Fbuffer_string (),
1490 Vminibuffer_completion_table
,
1491 Vminibuffer_completion_predicate
);
1492 echo_area_glyphs
= 0;
1494 if (NILP (completions
))
1497 temp_echo_area_glyphs (" [No completions]");
1500 internal_with_output_to_temp_buffer ("*Completions*",
1501 Fdisplay_completion_list
,
1502 Fsort (completions
, Qstring_lessp
));
1506 DEFUN ("self-insert-and-exit", Fself_insert_and_exit
, Sself_insert_and_exit
, 0, 0, "",
1507 "Terminate minibuffer input.")
1510 if (XTYPE (last_command_char
) == Lisp_Int
)
1511 internal_self_insert (last_command_char
, 0);
1515 Fthrow (Qexit
, Qnil
);
1518 DEFUN ("exit-minibuffer", Fexit_minibuffer
, Sexit_minibuffer
, 0, 0, "",
1519 "Terminate this minibuffer argument.")
1522 Fthrow (Qexit
, Qnil
);
1525 DEFUN ("minibuffer-depth", Fminibuffer_depth
, Sminibuffer_depth
, 0, 0, 0,
1526 "Return current depth of activations of minibuffer, a nonnegative integer.")
1529 return make_number (minibuf_level
);
1532 DEFUN ("minibuffer-prompt", Fminibuffer_prompt
, Sminibuffer_prompt
, 0, 0, 0,
1533 "Return the prompt string of the currently-active minibuffer.\n\
1534 If no minibuffer is active, return nil.")
1537 if (!minibuf_prompt
)
1539 return build_string (minibuf_prompt
);
1542 DEFUN ("minibuffer-prompt-width", Fminibuffer_prompt_width
,
1543 Sminibuffer_prompt_width
, 0, 0, 0,
1544 "Return the display width of the minibuffer prompt.")
1548 XFASTINT (width
) = minibuf_prompt_width
;
1552 init_minibuf_once ()
1554 Vminibuffer_list
= Qnil
;
1555 staticpro (&Vminibuffer_list
);
1562 minibuf_save_vector_size
= 5;
1563 minibuf_save_vector
= (struct minibuf_save_data
*) malloc (5 * sizeof (struct minibuf_save_data
));
1565 Qread_file_name_internal
= intern ("read-file-name-internal");
1566 staticpro (&Qread_file_name_internal
);
1568 Qminibuffer_completion_table
= intern ("minibuffer-completion-table");
1569 staticpro (&Qminibuffer_completion_table
);
1571 Qminibuffer_completion_confirm
= intern ("minibuffer-completion-confirm");
1572 staticpro (&Qminibuffer_completion_confirm
);
1574 Qminibuffer_completion_predicate
= intern ("minibuffer-completion-predicate");
1575 staticpro (&Qminibuffer_completion_predicate
);
1577 staticpro (&last_exact_completion
);
1578 last_exact_completion
= Qnil
;
1580 staticpro (&last_minibuf_string
);
1581 last_minibuf_string
= Qnil
;
1583 Quser_variable_p
= intern ("user-variable-p");
1584 staticpro (&Quser_variable_p
);
1586 Qminibuffer_history
= intern ("minibuffer-history");
1587 staticpro (&Qminibuffer_history
);
1589 Qminibuffer_setup_hook
= intern ("minibuffer-setup-hook");
1590 staticpro (&Qminibuffer_setup_hook
);
1592 DEFVAR_LISP ("minibuffer-setup-hook", &Vminibuffer_setup_hook
,
1593 "Normal hook run just after entry to minibuffer.");
1594 Vminibuffer_setup_hook
= Qnil
;
1596 DEFVAR_BOOL ("completion-auto-help", &auto_help
,
1597 "*Non-nil means automatically provide help for invalid completion input.");
1600 DEFVAR_BOOL ("completion-ignore-case", &completion_ignore_case
,
1601 "Non-nil means don't consider case significant in completion.");
1602 completion_ignore_case
= 0;
1604 DEFVAR_BOOL ("enable-recursive-minibuffers", &enable_recursive_minibuffers
,
1605 "*Non-nil means to allow minibuffer commands while in the minibuffer.\n\
1606 More precisely, this variable makes a difference when the minibuffer window\n\
1607 is the selected window. If you are in some other window, minibuffer commands\n\
1608 are allowed even if a minibuffer is active.");
1609 enable_recursive_minibuffers
= 0;
1611 DEFVAR_LISP ("minibuffer-completion-table", &Vminibuffer_completion_table
,
1612 "Alist or obarray used for completion in the minibuffer.\n\
1613 This becomes the ALIST argument to `try-completion' and `all-completion'.\n\
1615 The value may alternatively be a function, which is given three arguments:\n\
1616 STRING, the current buffer contents;\n\
1617 PREDICATE, the predicate for filtering possible matches;\n\
1618 CODE, which says what kind of things to do.\n\
1619 CODE can be nil, t or `lambda'.\n\
1620 nil means to return the best completion of STRING, or nil if there is none.\n\
1621 t means to return a list of all possible completions of STRING.\n\
1622 `lambda' means to return t if STRING is a valid completion as it stands.");
1623 Vminibuffer_completion_table
= Qnil
;
1625 DEFVAR_LISP ("minibuffer-completion-predicate", &Vminibuffer_completion_predicate
,
1626 "Within call to `completing-read', this holds the PREDICATE argument.");
1627 Vminibuffer_completion_predicate
= Qnil
;
1629 DEFVAR_LISP ("minibuffer-completion-confirm", &Vminibuffer_completion_confirm
,
1630 "Non-nil => demand confirmation of completion before exiting minibuffer.");
1631 Vminibuffer_completion_confirm
= Qnil
;
1633 DEFVAR_LISP ("minibuffer-help-form", &Vminibuffer_help_form
,
1634 "Value that `help-form' takes on inside the minibuffer.");
1635 Vminibuffer_help_form
= Qnil
;
1637 DEFVAR_LISP ("minibuffer-history-variable", &Vminibuffer_history_variable
,
1638 "History list symbol to add minibuffer values to.\n\
1639 Each minibuffer output is added with\n\
1640 (set minibuffer-history-variable\n\
1641 (cons STRING (symbol-value minibuffer-history-variable)))");
1642 XFASTINT (Vminibuffer_history_variable
) = 0;
1644 DEFVAR_LISP ("minibuffer-history-position", &Vminibuffer_history_position
,
1645 "Current position of redoing in the history list.");
1646 Vminibuffer_history_position
= Qnil
;
1648 DEFVAR_BOOL ("minibuffer-auto-raise", &minibuffer_auto_raise
,
1649 "*Non-nil means entering the minibuffer raises the minibuffer's frame.");
1650 minibuffer_auto_raise
= 0;
1652 DEFVAR_LISP ("completion-regexp-list", &Vcompletion_regexp_list
,
1653 "List of regexps that should restrict possible completions.");
1654 Vcompletion_regexp_list
= Qnil
;
1656 defsubr (&Sread_from_minibuffer
);
1657 defsubr (&Seval_minibuffer
);
1658 defsubr (&Sread_minibuffer
);
1659 defsubr (&Sread_string
);
1660 defsubr (&Sread_command
);
1661 defsubr (&Sread_variable
);
1662 defsubr (&Sread_buffer
);
1663 defsubr (&Sread_no_blanks_input
);
1664 defsubr (&Sminibuffer_depth
);
1665 defsubr (&Sminibuffer_prompt
);
1666 defsubr (&Sminibuffer_prompt_width
);
1668 defsubr (&Stry_completion
);
1669 defsubr (&Sall_completions
);
1670 defsubr (&Scompleting_read
);
1671 defsubr (&Sminibuffer_complete
);
1672 defsubr (&Sminibuffer_complete_word
);
1673 defsubr (&Sminibuffer_complete_and_exit
);
1674 defsubr (&Sdisplay_completion_list
);
1675 defsubr (&Sminibuffer_completion_help
);
1677 defsubr (&Sself_insert_and_exit
);
1678 defsubr (&Sexit_minibuffer
);
1684 initial_define_key (Vminibuffer_local_map
, Ctl ('g'),
1685 "abort-recursive-edit");
1686 initial_define_key (Vminibuffer_local_map
, Ctl ('m'),
1688 initial_define_key (Vminibuffer_local_map
, Ctl ('j'),
1691 initial_define_key (Vminibuffer_local_ns_map
, Ctl ('g'),
1692 "abort-recursive-edit");
1693 initial_define_key (Vminibuffer_local_ns_map
, Ctl ('m'),
1695 initial_define_key (Vminibuffer_local_ns_map
, Ctl ('j'),
1698 initial_define_key (Vminibuffer_local_ns_map
, ' ',
1700 initial_define_key (Vminibuffer_local_ns_map
, '\t',
1702 initial_define_key (Vminibuffer_local_ns_map
, '?',
1703 "self-insert-and-exit");
1705 initial_define_key (Vminibuffer_local_completion_map
, Ctl ('g'),
1706 "abort-recursive-edit");
1707 initial_define_key (Vminibuffer_local_completion_map
, Ctl ('m'),
1709 initial_define_key (Vminibuffer_local_completion_map
, Ctl ('j'),
1712 initial_define_key (Vminibuffer_local_completion_map
, '\t',
1713 "minibuffer-complete");
1714 initial_define_key (Vminibuffer_local_completion_map
, ' ',
1715 "minibuffer-complete-word");
1716 initial_define_key (Vminibuffer_local_completion_map
, '?',
1717 "minibuffer-completion-help");
1719 initial_define_key (Vminibuffer_local_must_match_map
, Ctl ('g'),
1720 "abort-recursive-edit");
1721 initial_define_key (Vminibuffer_local_must_match_map
, Ctl ('m'),
1722 "minibuffer-complete-and-exit");
1723 initial_define_key (Vminibuffer_local_must_match_map
, Ctl ('j'),
1724 "minibuffer-complete-and-exit");
1725 initial_define_key (Vminibuffer_local_must_match_map
, '\t',
1726 "minibuffer-complete");
1727 initial_define_key (Vminibuffer_local_must_match_map
, ' ',
1728 "minibuffer-complete-word");
1729 initial_define_key (Vminibuffer_local_must_match_map
, '?',
1730 "minibuffer-completion-help");