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 hooks for entry to and exit from minibuffer. */
84 Lisp_Object Qminibuffer_setup_hook
, Vminibuffer_setup_hook
;
85 Lisp_Object Qminibuffer_exit_hook
, Vminibuffer_exit_hook
;
87 /* Nonzero means completion ignores case. */
89 int completion_ignore_case
;
91 /* List of regexps that should restrict possible completions. */
93 Lisp_Object Vcompletion_regexp_list
;
95 /* Nonzero means raise the minibuffer frame when the minibuffer
98 int minibuffer_auto_raise
;
100 /* If last completion attempt reported "Complete but not unique"
101 then this is the string completed then; otherwise this is nil. */
103 static Lisp_Object last_exact_completion
;
105 Lisp_Object Quser_variable_p
;
107 /* Non-nil means it is the window for C-M-v to scroll
108 when the minibuffer is selected. */
109 extern Lisp_Object Vminibuf_scroll_window
;
111 /* Actual minibuffer invocation. */
113 void read_minibuf_unwind ();
114 Lisp_Object
get_minibuffer ();
115 Lisp_Object
read_minibuf ();
117 /* Read from the minibuffer using keymap MAP, initial contents INITIAL
118 (a string), putting point minus BACKUP_N chars from the end of INITIAL,
119 prompting with PROMPT (a string), using history list HISTVAR
120 with initial position HISTPOS. (BACKUP_N should be <= 0.)
122 Normally return the result as a string (the text that was read),
123 but if EXPFLAG is non-nil, read it and return the object read.
124 If HISTVAR is given, save the value read on that history only if it doesn't
125 match the front of that history list exactly. The value is pushed onto
126 the list as the string that was read, or as the object that resulted iff
127 EXPFLAG is non-nil. */
130 read_minibuf (map
, initial
, prompt
, backup_n
, expflag
, histvar
, histpos
)
134 Lisp_Object backup_n
;
139 register Lisp_Object val
;
140 int count
= specpdl_ptr
- specpdl
;
141 Lisp_Object mini_frame
;
142 struct gcpro gcpro1
, gcpro2
;
144 if (XTYPE (prompt
) != Lisp_String
)
145 prompt
= build_string ("");
147 /* Emacs in -batch mode calls minibuffer: print the prompt. */
148 if (noninteractive
&& XTYPE (prompt
) == Lisp_String
)
149 printf ("%s", XSTRING (prompt
)->data
);
151 if (!enable_recursive_minibuffers
153 && (EQ (selected_window
, minibuf_window
)))
155 || selected_frame
!= XFRAME (WINDOW_FRAME (XWINDOW (minibuf_window
)))
157 error ("Command attempted to use minibuffer while in minibuffer");
159 if (minibuf_level
== minibuf_save_vector_size
)
160 minibuf_save_vector
=
161 (struct minibuf_save_data
*)
162 xrealloc (minibuf_save_vector
,
163 (minibuf_save_vector_size
*= 2)
164 * sizeof (struct minibuf_save_data
));
165 minibuf_save_vector
[minibuf_level
].prompt
= minibuf_prompt
;
166 minibuf_save_vector
[minibuf_level
].prompt_width
= minibuf_prompt_width
;
167 minibuf_prompt_width
= 0;
168 /* >> Why is this done this way rather than binding these variables? */
169 minibuf_save_vector
[minibuf_level
].help_form
= Vhelp_form
;
170 minibuf_save_vector
[minibuf_level
].current_prefix_arg
= Vcurrent_prefix_arg
;
171 minibuf_save_vector
[minibuf_level
].history_position
= Vminibuffer_history_position
;
172 minibuf_save_vector
[minibuf_level
].history_variable
= Vminibuffer_history_variable
;
173 GCPRO2 (minibuf_save_vector
[minibuf_level
].help_form
,
174 minibuf_save_vector
[minibuf_level
].current_prefix_arg
);
176 record_unwind_protect (Fset_window_configuration
,
177 Fcurrent_window_configuration (Qnil
));
179 /* If the minibuffer window is on a different frame, save that
180 frame's configuration too. */
182 XSET (mini_frame
, Lisp_Frame
, WINDOW_FRAME (XWINDOW (minibuf_window
)));
183 if (XFRAME (mini_frame
) != selected_frame
)
184 record_unwind_protect (Fset_window_configuration
,
185 Fcurrent_window_configuration (mini_frame
));
187 /* If the minibuffer is on an iconified or invisible frame,
188 make it visible now. */
189 Fmake_frame_visible (mini_frame
);
191 if (minibuffer_auto_raise
)
192 Fraise_frame (mini_frame
);
195 val
= current_buffer
->directory
;
196 Fset_buffer (get_minibuffer (minibuf_level
));
198 /* The current buffer's default directory is usually the right thing
199 for our minibuffer here. However, if you're typing a command at
200 a minibuffer-only frame when minibuf_level is zero, then buf IS
201 the current_buffer, so reset_buffer leaves buf's default
202 directory unchanged. This is a bummer when you've just started
203 up Emacs and buf's default directory is Qnil. Here's a hack; can
204 you think of something better to do? Find another buffer with a
205 better directory, and use that one instead. */
206 if (XTYPE (val
) == Lisp_String
)
207 current_buffer
->directory
= val
;
210 Lisp_Object buf_list
;
212 for (buf_list
= Vbuffer_alist
;
214 buf_list
= XCONS (buf_list
)->cdr
)
216 Lisp_Object other_buf
;
218 other_buf
= XCONS (XCONS (buf_list
)->car
)->cdr
;
219 if (XTYPE (XBUFFER (other_buf
)->directory
) == Lisp_String
)
221 current_buffer
->directory
= XBUFFER (other_buf
)->directory
;
228 if (XFRAME (mini_frame
) != selected_frame
)
229 Fredirect_frame_focus (Fselected_frame (), mini_frame
);
231 Fmake_local_variable (Qprint_escape_newlines
);
232 print_escape_newlines
= 1;
234 record_unwind_protect (read_minibuf_unwind
, Qnil
);
236 Vminibuf_scroll_window
= selected_window
;
237 Fset_window_buffer (minibuf_window
, Fcurrent_buffer ());
238 Fselect_window (minibuf_window
);
239 XFASTINT (XWINDOW (minibuf_window
)->hscroll
) = 0;
246 Finsert (1, &initial
);
247 if (!NILP (backup_n
) && XTYPE (backup_n
) == Lisp_Int
)
248 Fforward_char (backup_n
);
251 minibuf_prompt
= (char *) alloca (XSTRING (prompt
)->size
+ 1);
252 bcopy (XSTRING (prompt
)->data
, minibuf_prompt
, XSTRING (prompt
)->size
+ 1);
253 echo_area_glyphs
= 0;
255 Vhelp_form
= Vminibuffer_help_form
;
256 current_buffer
->keymap
= map
;
257 Vminibuffer_history_position
= histpos
;
258 Vminibuffer_history_variable
= histvar
;
260 /* Run our hook, but not if it is empty.
261 (run-hooks would do nothing if it is empty,
262 but it's important to save time here in the usual case. */
263 if (!NILP (Vminibuffer_setup_hook
) && !EQ (Vminibuffer_setup_hook
, Qunbound
)
264 && !NILP (Vrun_hooks
))
265 call1 (Vrun_hooks
, Qminibuffer_setup_hook
);
267 /* ??? MCC did redraw_screen here if switching screens. */
270 if (!NILP (Vminibuffer_exit_hook
) && !EQ (Vminibuffer_exit_hook
, Qunbound
)
271 && !NILP (Vrun_hooks
))
272 call1 (Vrun_hooks
, Qminibuffer_exit_hook
);
274 /* If cursor is on the minibuffer line,
275 show the user we have exited by putting it in column 0. */
276 if ((FRAME_CURSOR_Y (selected_frame
)
277 >= XFASTINT (XWINDOW (minibuf_window
)->top
))
280 FRAME_CURSOR_X (selected_frame
) = 0;
281 update_frame (selected_frame
, 1, 1);
284 /* Make minibuffer contents into a string */
285 val
= make_buffer_string (1, Z
);
286 bcopy (GAP_END_ADDR
, XSTRING (val
)->data
+ GPT
- BEG
, Z
- GPT
);
288 /* VAL is the string of minibuffer text. */
289 last_minibuf_string
= val
;
291 /* Add the value to the appropriate history list. */
292 if (XTYPE (Vminibuffer_history_variable
) == Lisp_Symbol
293 && ! EQ (XSYMBOL (Vminibuffer_history_variable
)->value
, Qunbound
))
295 /* If the caller wanted to save the value read on a history list,
296 then do so if the value is not already the front of the list. */
298 histval
= Fsymbol_value (Vminibuffer_history_variable
);
300 /* The value of the history variable must be a cons or nil. Other
301 values are unacceptable. We silently ignore these values. */
304 && NILP (Fequal (last_minibuf_string
, Fcar (histval
)))))
305 Fset (Vminibuffer_history_variable
,
306 Fcons (last_minibuf_string
, histval
));
309 /* If Lisp form desired instead of string, parse it. */
312 Lisp_Object expr_and_pos
;
315 expr_and_pos
= Fread_from_string (val
, Qnil
, Qnil
);
316 /* Ignore trailing whitespace; any other trailing junk is an error. */
317 for (p
= XSTRING (val
)->data
+ XINT (Fcdr (expr_and_pos
)); *p
; p
++)
318 if (*p
!= ' ' && *p
!= '\t' && *p
!= '\n')
319 error ("Trailing garbage following expression");
320 val
= Fcar (expr_and_pos
);
324 return unbind_to (count
, val
); /* The appropriate frame will get selected
325 in set-window-configuration. */
328 /* Return a buffer to be used as the minibuffer at depth `depth'.
329 depth = 0 is the lowest allowed argument, and that is the value
330 used for nonrecursive minibuffer invocations */
333 get_minibuffer (depth
)
336 Lisp_Object tail
, num
, buf
;
338 extern Lisp_Object
nconc2 ();
340 XFASTINT (num
) = depth
;
341 tail
= Fnthcdr (num
, Vminibuffer_list
);
344 tail
= Fcons (Qnil
, Qnil
);
345 Vminibuffer_list
= nconc2 (Vminibuffer_list
, tail
);
348 if (NILP (buf
) || NILP (XBUFFER (buf
)->name
))
350 sprintf (name
, " *Minibuf-%d*", depth
);
351 buf
= Fget_buffer_create (build_string (name
));
353 /* Although the buffer's name starts with a space, undo should be
355 Fbuffer_enable_undo (buf
);
357 XCONS (tail
)->car
= buf
;
360 reset_buffer (XBUFFER (buf
));
365 /* This function is called on exiting minibuffer, whether normally or not,
366 and it restores the current window, buffer, etc. */
369 read_minibuf_unwind (data
)
372 /* Erase the minibuffer we were using at this level. */
373 Fset_buffer (XWINDOW (minibuf_window
)->buffer
);
375 /* Prevent error in erase-buffer. */
376 current_buffer
->read_only
= Qnil
;
379 /* If this was a recursive minibuffer,
380 tie the minibuffer window back to the outer level minibuffer buffer */
382 /* Make sure minibuffer window is erased, not ignored */
383 windows_or_buffers_changed
++;
384 XFASTINT (XWINDOW (minibuf_window
)->last_modified
) = 0;
386 /* Restore prompt from outer minibuffer */
387 minibuf_prompt
= minibuf_save_vector
[minibuf_level
].prompt
;
388 minibuf_prompt_width
= minibuf_save_vector
[minibuf_level
].prompt_width
;
389 Vhelp_form
= minibuf_save_vector
[minibuf_level
].help_form
;
390 Vcurrent_prefix_arg
= minibuf_save_vector
[minibuf_level
].current_prefix_arg
;
391 Vminibuffer_history_position
392 = minibuf_save_vector
[minibuf_level
].history_position
;
393 Vminibuffer_history_variable
394 = minibuf_save_vector
[minibuf_level
].history_variable
;
398 /* This comment supplies the doc string for read-from-minibuffer,
399 for make-docfile to see. We cannot put this in the real DEFUN
400 due to limits in the Unix cpp.
402 DEFUN ("read-from-minibuffer", Fread_from_minibuffer, Sread_from_minibuffer, 1, 5, 0,
403 "Read a string from the minibuffer, prompting with string PROMPT.\n\
404 If optional second arg INITIAL-CONTENTS is non-nil, it is a string\n\
405 to be inserted into the minibuffer before reading input.\n\
406 If INITIAL-CONTENTS is (STRING . POSITION), the initial input\n\
407 is STRING, but point is placed POSITION characters into the string.\n\
408 Third arg KEYMAP is a keymap to use whilst reading;\n\
409 if omitted or nil, the default is `minibuffer-local-map'.\n\
410 If fourth arg READ is non-nil, then interpret the result as a lisp object\n\
411 and return that object:\n\
412 in other words, do `(car (read-from-string INPUT-STRING))'\n\
413 Fifth arg HIST, if non-nil, specifies a history list\n\
414 and optionally the initial position in the list.\n\
415 It can be a symbol, which is the history list variable to use,\n\
416 or it can be a cons cell (HISTVAR . HISTPOS).\n\
417 In that case, HISTVAR is the history list variable to use,\n\
418 and HISTPOS is the initial position (the position in the list\n\
419 which INITIAL-CONTENTS corresponds to).\n\
420 Positions are counted starting from 1 at the beginning of the list."
423 DEFUN ("read-from-minibuffer", Fread_from_minibuffer
, Sread_from_minibuffer
, 1, 5, 0,
424 0 /* See immediately above */)
425 (prompt
, initial_contents
, keymap
, read
, hist
)
426 Lisp_Object prompt
, initial_contents
, keymap
, read
, hist
;
429 Lisp_Object histvar
, histpos
, position
;
432 CHECK_STRING (prompt
, 0);
433 if (!NILP (initial_contents
))
435 if (XTYPE (initial_contents
) == Lisp_Cons
)
437 position
= Fcdr (initial_contents
);
438 initial_contents
= Fcar (initial_contents
);
440 CHECK_STRING (initial_contents
, 1);
441 if (!NILP (position
))
443 CHECK_NUMBER (position
, 0);
444 /* Convert to distance from end of input. */
445 pos
= XINT (position
) - 1 - XSTRING (initial_contents
)->size
;
450 keymap
= Vminibuffer_local_map
;
452 keymap
= get_keymap (keymap
,2);
454 if (XTYPE (hist
) == Lisp_Symbol
)
461 histvar
= Fcar_safe (hist
);
462 histpos
= Fcdr_safe (hist
);
465 histvar
= Qminibuffer_history
;
467 XFASTINT (histpos
) = 0;
469 return read_minibuf (keymap
, initial_contents
, prompt
,
470 make_number (pos
), !NILP (read
), histvar
, histpos
);
473 DEFUN ("read-minibuffer", Fread_minibuffer
, Sread_minibuffer
, 1, 2, 0,
474 "Return a Lisp object read using the minibuffer.\n\
475 Prompt with PROMPT. If non-nil, optional second arg INITIAL-CONTENTS\n\
476 is a string to insert in the minibuffer before reading.")
477 (prompt
, initial_contents
)
478 Lisp_Object prompt
, initial_contents
;
480 CHECK_STRING (prompt
, 0);
481 if (!NILP (initial_contents
))
482 CHECK_STRING (initial_contents
, 1);
483 return read_minibuf (Vminibuffer_local_map
, initial_contents
,
484 prompt
, Qnil
, 1, Qminibuffer_history
, make_number (0));
487 DEFUN ("eval-minibuffer", Feval_minibuffer
, Seval_minibuffer
, 1, 2, 0,
488 "Return value of Lisp expression read using the minibuffer.\n\
489 Prompt with PROMPT. If non-nil, optional second arg INITIAL-CONTENTS\n\
490 is a string to insert in the minibuffer before reading.")
491 (prompt
, initial_contents
)
492 Lisp_Object prompt
, initial_contents
;
494 return Feval (Fread_minibuffer (prompt
, initial_contents
));
497 /* Functions that use the minibuffer to read various things. */
499 DEFUN ("read-string", Fread_string
, Sread_string
, 1, 2, 0,
500 "Read a string from the minibuffer, prompting with string PROMPT.\n\
501 If non-nil second arg INITIAL-INPUT is a string to insert before reading.")
502 (prompt
, initial_input
)
503 Lisp_Object prompt
, initial_input
;
505 return Fread_from_minibuffer (prompt
, initial_input
, Qnil
, Qnil
, Qnil
);
508 DEFUN ("read-no-blanks-input", Fread_no_blanks_input
, Sread_no_blanks_input
, 1, 2, 0,
509 "Args PROMPT and INIT, strings. Read a string from the terminal, not allowing blanks.\n\
510 Prompt with PROMPT, and provide INIT as an initial value of the input string.")
512 Lisp_Object prompt
, init
;
514 CHECK_STRING (prompt
, 0);
516 CHECK_STRING (init
, 1);
518 return read_minibuf (Vminibuffer_local_ns_map
, init
, prompt
, Qnil
, 0,
519 Qminibuffer_history
, make_number (0));
522 DEFUN ("read-command", Fread_command
, Sread_command
, 1, 1, 0,
523 "One arg PROMPT, a string. Read the name of a command and return as a symbol.\n\
524 Prompts with PROMPT.")
528 return Fintern (Fcompleting_read (prompt
, Vobarray
, Qcommandp
, Qt
, Qnil
, Qnil
),
533 DEFUN ("read-function", Fread_function
, Sread_function
, 1, 1, 0,
534 "One arg PROMPT, a string. Read the name of a function and return as a symbol.\n\
535 Prompts with PROMPT.")
539 return Fintern (Fcompleting_read (prompt
, Vobarray
, Qfboundp
, Qt
, Qnil
, Qnil
),
544 DEFUN ("read-variable", Fread_variable
, Sread_variable
, 1, 1, 0,
545 "One arg PROMPT, a string. Read the name of a user variable and return\n\
546 it as a symbol. Prompts with PROMPT.\n\
547 A user variable is one whose documentation starts with a `*' character.")
551 return Fintern (Fcompleting_read (prompt
, Vobarray
,
552 Quser_variable_p
, Qt
, Qnil
, Qnil
),
556 DEFUN ("read-buffer", Fread_buffer
, Sread_buffer
, 1, 3, 0,
557 "One arg PROMPT, a string. Read the name of a buffer and return as a string.\n\
558 Prompts with PROMPT.\n\
559 Optional second arg is value to return if user enters an empty line.\n\
560 If optional third arg REQUIRE-MATCH is non-nil, only existing buffer names are allowed.")
561 (prompt
, def
, require_match
)
562 Lisp_Object prompt
, def
, require_match
;
568 if (XTYPE (def
) == Lisp_Buffer
)
569 def
= XBUFFER (def
)->name
;
572 args
[0] = build_string ("%s(default %s) ");
575 prompt
= Fformat (3, args
);
578 tem
= Fcompleting_read (prompt
, Vbuffer_alist
, Qnil
, require_match
, Qnil
, Qnil
);
580 if (XSTRING (tem
)->size
)
585 DEFUN ("try-completion", Ftry_completion
, Stry_completion
, 2, 3, 0,
586 "Return common substring of all completions of STRING in ALIST.\n\
587 Each car of each element of ALIST is tested to see if it begins with STRING.\n\
588 All that match are compared together; the longest initial sequence\n\
589 common to all matches is returned as a string.\n\
590 If there is no match at all, nil is returned.\n\
591 For an exact match, t is returned.\n\
593 ALIST can be an obarray instead of an alist.\n\
594 Then the print names of all symbols in the obarray are the possible matches.\n\
596 ALIST can also be a function to do the completion itself.\n\
597 It receives three arguments: the values STRING, PREDICATE and nil.\n\
598 Whatever it returns becomes the value of `try-completion'.\n\
600 If optional third argument PREDICATE is non-nil,\n\
601 it is used to test each possible match.\n\
602 The match is a candidate only if PREDICATE returns non-nil.\n\
603 The argument given to PREDICATE is the alist element or the symbol from the obarray.")
604 (string
, alist
, pred
)
605 Lisp_Object string
, alist
, pred
;
607 Lisp_Object bestmatch
, tail
, elt
, eltstring
;
609 int compare
, matchsize
;
610 int list
= CONSP (alist
) || NILP (alist
);
613 Lisp_Object bucket
, zero
, end
, tem
;
614 struct gcpro gcpro1
, gcpro2
, gcpro3
, gcpro4
;
616 CHECK_STRING (string
, 0);
617 if (!list
&& XTYPE (alist
) != Lisp_Vector
)
618 return call3 (alist
, string
, pred
, Qnil
);
622 /* If ALIST is not a list, set TAIL just for gc pro. */
627 obsize
= XVECTOR (alist
)->size
;
628 bucket
= XVECTOR (alist
)->contents
[index
];
633 /* Get the next element of the alist or obarray. */
634 /* Exit the loop if the elements are all used up. */
635 /* elt gets the alist element or symbol.
636 eltstring gets the name to check as a completion. */
643 eltstring
= Fcar (elt
);
648 if (XFASTINT (bucket
) != 0)
651 eltstring
= Fsymbol_name (elt
);
652 if (XSYMBOL (bucket
)->next
)
653 XSETSYMBOL (bucket
, XSYMBOL (bucket
)->next
);
655 XFASTINT (bucket
) = 0;
657 else if (++index
>= obsize
)
661 bucket
= XVECTOR (alist
)->contents
[index
];
666 /* Is this element a possible completion? */
668 if (XTYPE (eltstring
) == Lisp_String
669 && XSTRING (string
)->size
<= XSTRING (eltstring
)->size
670 && 0 > scmp (XSTRING (eltstring
)->data
, XSTRING (string
)->data
,
671 XSTRING (string
)->size
))
678 /* Ignore this element if it fails to match all the regexps. */
679 for (regexps
= Vcompletion_regexp_list
; CONSP (regexps
);
680 regexps
= XCONS (regexps
)->cdr
)
682 tem
= Fstring_match (XCONS (regexps
)->car
, eltstring
, zero
);
689 /* Ignore this element if there is a predicate
690 and the predicate doesn't like it. */
694 if (EQ (pred
, Qcommandp
))
695 tem
= Fcommandp (elt
);
698 GCPRO4 (tail
, string
, eltstring
, bestmatch
);
699 tem
= call1 (pred
, elt
);
702 if (NILP (tem
)) continue;
705 /* Update computation of how much all possible completions match */
708 if (NILP (bestmatch
))
709 bestmatch
= eltstring
, bestmatchsize
= XSTRING (eltstring
)->size
;
712 compare
= min (bestmatchsize
, XSTRING (eltstring
)->size
);
713 matchsize
= scmp (XSTRING (bestmatch
)->data
,
714 XSTRING (eltstring
)->data
,
718 if (completion_ignore_case
)
720 /* If this is an exact match except for case,
721 use it as the best match rather than one that is not an
722 exact match. This way, we get the case pattern
723 of the actual match. */
724 if ((matchsize
== XSTRING (eltstring
)->size
725 && matchsize
< XSTRING (bestmatch
)->size
)
727 /* If there is more than one exact match ignoring case,
728 and one of them is exact including case,
730 /* If there is no exact match ignoring case,
731 prefer a match that does not change the case
733 ((matchsize
== XSTRING (eltstring
)->size
)
735 (matchsize
== XSTRING (bestmatch
)->size
)
736 && !bcmp (XSTRING (eltstring
)->data
,
737 XSTRING (string
)->data
, XSTRING (string
)->size
)
738 && bcmp (XSTRING (bestmatch
)->data
,
739 XSTRING (string
)->data
, XSTRING (string
)->size
)))
740 bestmatch
= eltstring
;
742 bestmatchsize
= matchsize
;
747 if (NILP (bestmatch
))
748 return Qnil
; /* No completions found */
749 /* If we are ignoring case, and there is no exact match,
750 and no additional text was supplied,
751 don't change the case of what the user typed. */
752 if (completion_ignore_case
&& bestmatchsize
== XSTRING (string
)->size
753 && XSTRING (bestmatch
)->size
> bestmatchsize
)
756 /* Return t if the supplied string is an exact match (counting case);
757 it does not require any change to be made. */
758 if (matchcount
== 1 && bestmatchsize
== XSTRING (string
)->size
759 && !bcmp (XSTRING (bestmatch
)->data
, XSTRING (string
)->data
,
763 XFASTINT (zero
) = 0; /* Else extract the part in which */
764 XFASTINT (end
) = bestmatchsize
; /* all completions agree */
765 return Fsubstring (bestmatch
, zero
, end
);
768 /* Compare exactly LEN chars of strings at S1 and S2,
769 ignoring case if appropriate.
770 Return -1 if strings match,
771 else number of chars that match at the beginning. */
774 register char *s1
, *s2
;
777 register int l
= len
;
779 if (completion_ignore_case
)
781 while (l
&& DOWNCASE (*s1
++) == DOWNCASE (*s2
++))
786 while (l
&& *s1
++ == *s2
++)
794 DEFUN ("all-completions", Fall_completions
, Sall_completions
, 2, 3, 0,
795 "Search for partial matches to STRING in ALIST.\n\
796 Each car of each element of ALIST is tested to see if it begins with STRING.\n\
797 The value is a list of all the strings from ALIST that match.\n\
798 ALIST can be an obarray instead of an alist.\n\
799 Then the print names of all symbols in the obarray are the possible matches.\n\
801 ALIST can also be a function to do the completion itself.\n\
802 It receives three arguments: the values STRING, PREDICATE and t.\n\
803 Whatever it returns becomes the value of `all-completion'.\n\
805 If optional third argument PREDICATE is non-nil,\n\
806 it is used to test each possible match.\n\
807 The match is a candidate only if PREDICATE returns non-nil.\n\
808 The argument given to PREDICATE is the alist element or the symbol from the obarray.")
809 (string
, alist
, pred
)
810 Lisp_Object string
, alist
, pred
;
812 Lisp_Object tail
, elt
, eltstring
;
813 Lisp_Object allmatches
;
814 int list
= CONSP (alist
) || NILP (alist
);
816 Lisp_Object bucket
, tem
;
817 struct gcpro gcpro1
, gcpro2
, gcpro3
, gcpro4
;
819 CHECK_STRING (string
, 0);
820 if (!list
&& XTYPE (alist
) != Lisp_Vector
)
822 return call3 (alist
, string
, pred
, Qt
);
826 /* If ALIST is not a list, set TAIL just for gc pro. */
831 obsize
= XVECTOR (alist
)->size
;
832 bucket
= XVECTOR (alist
)->contents
[index
];
837 /* Get the next element of the alist or obarray. */
838 /* Exit the loop if the elements are all used up. */
839 /* elt gets the alist element or symbol.
840 eltstring gets the name to check as a completion. */
847 eltstring
= Fcar (elt
);
852 if (XFASTINT (bucket
) != 0)
855 eltstring
= Fsymbol_name (elt
);
856 if (XSYMBOL (bucket
)->next
)
857 XSETSYMBOL (bucket
, XSYMBOL (bucket
)->next
);
859 XFASTINT (bucket
) = 0;
861 else if (++index
>= obsize
)
865 bucket
= XVECTOR (alist
)->contents
[index
];
870 /* Is this element a possible completion? */
872 if (XTYPE (eltstring
) == Lisp_String
873 && XSTRING (string
)->size
<= XSTRING (eltstring
)->size
874 /* Reject alternatives that start with space
875 unless the input starts with space. */
876 && ((XSTRING (string
)->size
> 0 && XSTRING (string
)->data
[0] == ' ')
877 || XSTRING (eltstring
)->data
[0] != ' ')
878 && 0 > scmp (XSTRING (eltstring
)->data
, XSTRING (string
)->data
,
879 XSTRING (string
)->size
))
886 /* Ignore this element if it fails to match all the regexps. */
887 for (regexps
= Vcompletion_regexp_list
; CONSP (regexps
);
888 regexps
= XCONS (regexps
)->cdr
)
890 tem
= Fstring_match (XCONS (regexps
)->car
, eltstring
, zero
);
897 /* Ignore this element if there is a predicate
898 and the predicate doesn't like it. */
902 if (EQ (pred
, Qcommandp
))
903 tem
= Fcommandp (elt
);
906 GCPRO4 (tail
, eltstring
, allmatches
, string
);
907 tem
= call1 (pred
, elt
);
910 if (NILP (tem
)) continue;
912 /* Ok => put it on the list. */
913 allmatches
= Fcons (eltstring
, allmatches
);
917 return Fnreverse (allmatches
);
920 Lisp_Object Vminibuffer_completion_table
, Qminibuffer_completion_table
;
921 Lisp_Object Vminibuffer_completion_predicate
, Qminibuffer_completion_predicate
;
922 Lisp_Object Vminibuffer_completion_confirm
, Qminibuffer_completion_confirm
;
924 /* This comment supplies the doc string for completing-read,
925 for make-docfile to see. We cannot put this in the real DEFUN
926 due to limits in the Unix cpp.
928 DEFUN ("completing-read", Fcompleting_read, Scompleting_read, 2, 6, 0,
929 "Read a string in the minibuffer, with completion.\n\
930 Args: PROMPT, TABLE, PREDICATE, REQUIRE-MATCH, INITIAL-INPUT, HIST.\n\
931 PROMPT is a string to prompt with; normally it ends in a colon and a space.\n\
932 TABLE is an alist whose elements' cars are strings, or an obarray.\n\
933 PREDICATE limits completion to a subset of TABLE.\n\
934 See `try-completion' for more details on completion, TABLE, and PREDICATE.\n\
935 If REQUIRE-MATCH is non-nil, the user is not allowed to exit unless\n\
936 the input is (or completes to) an element of TABLE.\n\
937 If it is also not t, Return does not exit if it does non-null completion.\n\
938 If INITIAL-INPUT is non-nil, insert it in the minibuffer initially.\n\
939 If it is (STRING . POSITION), the initial input\n\
940 is STRING, but point is placed POSITION characters into the string.\n\
941 HIST, if non-nil, specifies a history list\n\
942 and optionally the initial position in the list.\n\
943 It can be a symbol, which is the history list variable to use,\n\
944 or it can be a cons cell (HISTVAR . HISTPOS).\n\
945 In that case, HISTVAR is the history list variable to use,\n\
946 and HISTPOS is the initial position (the position in the list\n\
947 which INITIAL-CONTENTS corresponds to).\n\
948 Positions are counted starting from 1 at the beginning of the list.\n\
949 Completion ignores case if the ambient value of\n\
950 `completion-ignore-case' is non-nil."
952 DEFUN ("completing-read", Fcompleting_read
, Scompleting_read
, 2, 6, 0,
953 0 /* See immediately above */)
954 (prompt
, table
, pred
, require_match
, init
, hist
)
955 Lisp_Object prompt
, table
, pred
, require_match
, init
, hist
;
957 Lisp_Object val
, histvar
, histpos
, position
;
959 int count
= specpdl_ptr
- specpdl
;
960 specbind (Qminibuffer_completion_table
, table
);
961 specbind (Qminibuffer_completion_predicate
, pred
);
962 specbind (Qminibuffer_completion_confirm
,
963 EQ (require_match
, Qt
) ? Qnil
: Qt
);
964 last_exact_completion
= Qnil
;
969 if (XTYPE (init
) == Lisp_Cons
)
971 position
= Fcdr (init
);
974 CHECK_STRING (init
, 0);
975 if (!NILP (position
))
977 CHECK_NUMBER (position
, 0);
978 /* Convert to distance from end of input. */
979 pos
= XINT (position
) - XSTRING (init
)->size
;
983 if (XTYPE (hist
) == Lisp_Symbol
)
990 histvar
= Fcar_safe (hist
);
991 histpos
= Fcdr_safe (hist
);
994 histvar
= Qminibuffer_history
;
996 XFASTINT (histpos
) = 0;
998 val
= read_minibuf (NILP (require_match
)
999 ? Vminibuffer_local_completion_map
1000 : Vminibuffer_local_must_match_map
,
1001 init
, prompt
, make_number (pos
), 0,
1003 return unbind_to (count
, val
);
1006 /* Temporarily display the string M at the end of the current
1007 minibuffer contents. This is used to display things like
1008 "[No Match]" when the user requests a completion for a prefix
1009 that has no possible completions, and other quick, unobtrusive
1012 temp_echo_area_glyphs (m
)
1016 Lisp_Object oinhibit
;
1017 oinhibit
= Vinhibit_quit
;
1019 /* Clear out any old echo-area message to make way for our new thing. */
1026 Fsit_for (make_number (2), Qnil
, Qnil
);
1028 if (!NILP (Vquit_flag
))
1031 Vunread_command_events
= Fcons (make_number (quit_char
), Qnil
);
1033 Vinhibit_quit
= oinhibit
;
1036 Lisp_Object
Fminibuffer_completion_help ();
1037 Lisp_Object
assoc_for_completion ();
1040 * 0 no possible completion
1041 * 1 was already an exact and unique completion
1042 * 3 was already an exact completion
1043 * 4 completed to an exact completion
1044 * 5 some completion happened
1045 * 6 no completion happened
1050 Lisp_Object completion
, tem
;
1053 struct gcpro gcpro1
, gcpro2
;
1055 completion
= Ftry_completion (Fbuffer_string (), Vminibuffer_completion_table
,
1056 Vminibuffer_completion_predicate
);
1057 last
= last_exact_completion
;
1058 last_exact_completion
= Qnil
;
1060 GCPRO2 (completion
, last
);
1062 if (NILP (completion
))
1065 temp_echo_area_glyphs (" [No match]");
1070 if (EQ (completion
, Qt
)) /* exact and unique match */
1077 tem
= Fstring_equal (completion
, Fbuffer_string());
1078 if (completedp
= NILP (tem
))
1080 Ferase_buffer (); /* Some completion happened */
1081 Finsert (1, &completion
);
1084 /* It did find a match. Do we match some possibility exactly now? */
1085 if (CONSP (Vminibuffer_completion_table
)
1086 || NILP (Vminibuffer_completion_table
))
1087 tem
= assoc_for_completion (Fbuffer_string (),
1088 Vminibuffer_completion_table
);
1089 else if (XTYPE (Vminibuffer_completion_table
) == Lisp_Vector
)
1091 /* the primitive used by Fintern_soft */
1092 extern Lisp_Object
oblookup ();
1094 tem
= Fbuffer_string ();
1095 /* Bypass intern-soft as that loses for nil */
1096 tem
= oblookup (Vminibuffer_completion_table
,
1097 XSTRING (tem
)->data
, XSTRING (tem
)->size
);
1098 if (XTYPE (tem
) != Lisp_Symbol
)
1100 else if (!NILP (Vminibuffer_completion_predicate
))
1101 tem
= call1 (Vminibuffer_completion_predicate
, tem
);
1106 tem
= call3 (Vminibuffer_completion_table
,
1108 Vminibuffer_completion_predicate
,
1113 /* not an exact match */
1118 Fminibuffer_completion_help ();
1120 temp_echo_area_glyphs (" [Next char not unique]");
1123 else if (completedp
)
1128 /* If the last exact completion and this one were the same,
1129 it means we've already given a "Complete but not unique"
1130 message and the user's hit TAB again, so now we give him help. */
1131 last_exact_completion
= completion
;
1134 tem
= Fbuffer_string ();
1135 if (!NILP (Fequal (tem
, last
)))
1136 Fminibuffer_completion_help ();
1142 /* Like assoc but assumes KEY is a string, and ignores case if appropriate. */
1145 assoc_for_completion (key
, list
)
1146 register Lisp_Object key
;
1149 register Lisp_Object tail
;
1151 if (completion_ignore_case
)
1152 key
= Fupcase (key
);
1154 for (tail
= list
; !NILP (tail
); tail
= Fcdr (tail
))
1156 register Lisp_Object elt
, tem
, thiscar
;
1158 if (!CONSP (elt
)) continue;
1159 thiscar
= Fcar (elt
);
1160 if (XTYPE (thiscar
) != Lisp_String
)
1162 if (completion_ignore_case
)
1163 thiscar
= Fupcase (thiscar
);
1164 tem
= Fequal (thiscar
, key
);
1165 if (!NILP (tem
)) return elt
;
1171 DEFUN ("minibuffer-complete", Fminibuffer_complete
, Sminibuffer_complete
, 0, 0, "",
1172 "Complete the minibuffer contents as far as possible.\n\
1173 Return nil if there is no valid completion, else t.\n\
1174 If no characters can be completed, display a list of possible completions.\n\
1175 If you repeat this command after it displayed such a list,\n\
1176 scroll the window of possible completions.")
1180 Lisp_Object window
, tem
;
1182 /* If the previous command was not this, then mark the completion
1184 if (! EQ (last_command
, this_command
))
1185 Vminibuf_scroll_window
= Qnil
;
1187 window
= Vminibuf_scroll_window
;
1188 /* If there's a fresh completion window with a live buffer,
1189 and this command is repeated, scroll that window. */
1190 if (! NILP (window
) && ! NILP (XWINDOW (window
)->buffer
)
1191 && !NILP (XBUFFER (XWINDOW (window
)->buffer
)->name
))
1193 struct buffer
*obuf
= current_buffer
;
1195 Fset_buffer (XWINDOW (window
)->buffer
);
1196 tem
= Fpos_visible_in_window_p (make_number (ZV
), window
);
1198 /* If end is in view, scroll up to the beginning. */
1199 Fset_window_start (window
, BEGV
, Qnil
);
1201 /* Else scroll down one screen. */
1202 Fscroll_other_window (Qnil
);
1204 set_buffer_internal (obuf
);
1208 i
= do_completion ();
1215 temp_echo_area_glyphs (" [Sole completion]");
1219 temp_echo_area_glyphs (" [Complete, but not unique]");
1226 DEFUN ("minibuffer-complete-and-exit", Fminibuffer_complete_and_exit
,
1227 Sminibuffer_complete_and_exit
, 0, 0, "",
1228 "Complete the minibuffer contents, and maybe exit.\n\
1229 Exit if the name is valid with no completion needed.\n\
1230 If name was completed to a valid match,\n\
1231 a repetition of this command will exit.")
1236 /* Allow user to specify null string */
1240 i
= do_completion ();
1248 if (!NILP (Vminibuffer_completion_confirm
))
1250 temp_echo_area_glyphs (" [Confirm]");
1260 Fthrow (Qexit
, Qnil
);
1264 DEFUN ("minibuffer-complete-word", Fminibuffer_complete_word
, Sminibuffer_complete_word
,
1266 "Complete the minibuffer contents at most a single word.\n\
1267 After one word is completed as much as possible, a space or hyphen\n\
1268 is added, provided that matches some possible completion.\n\
1269 Return nil if there is no valid completion, else t.")
1272 Lisp_Object completion
, tem
;
1274 register unsigned char *completion_string
;
1275 struct gcpro gcpro1
;
1277 /* We keep calling Fbuffer_string rather than arrange for GC to
1278 hold onto a pointer to one of the strings thus made. */
1280 completion
= Ftry_completion (Fbuffer_string (),
1281 Vminibuffer_completion_table
,
1282 Vminibuffer_completion_predicate
);
1283 if (NILP (completion
))
1286 temp_echo_area_glyphs (" [No match]");
1289 if (EQ (completion
, Qt
))
1292 #if 0 /* How the below code used to look, for reference. */
1293 tem
= Fbuffer_string ();
1294 b
= XSTRING (tem
)->data
;
1295 i
= ZV
- 1 - XSTRING (completion
)->size
;
1296 p
= XSTRING (completion
)->data
;
1298 0 <= scmp (b
, p
, ZV
- 1))
1301 /* Set buffer to longest match of buffer tail and completion head. */
1302 while (0 <= scmp (b
+ i
, p
, ZV
- 1 - i
))
1304 del_range (1, i
+ 1);
1307 #else /* Rewritten code */
1309 register unsigned char *buffer_string
;
1310 int buffer_length
, completion_length
;
1312 tem
= Fbuffer_string ();
1313 /* If reading a file name,
1314 expand any $ENVVAR refs in the buffer and in TEM. */
1315 if (EQ (Vminibuffer_completion_table
, Qread_file_name_internal
))
1317 Lisp_Object substituted
;
1318 substituted
= Fsubstitute_in_file_name (tem
);
1319 if (! EQ (substituted
, tem
))
1323 insert_from_string (tem
, 0, XSTRING (tem
)->size
, 0);
1326 buffer_string
= XSTRING (tem
)->data
;
1327 completion_string
= XSTRING (completion
)->data
;
1328 buffer_length
= XSTRING (tem
)->size
; /* ie ZV - BEGV */
1329 completion_length
= XSTRING (completion
)->size
;
1330 i
= buffer_length
- completion_length
;
1331 /* Mly: I don't understand what this is supposed to do AT ALL */
1333 0 <= scmp (buffer_string
, completion_string
, buffer_length
))
1335 /* Set buffer to longest match of buffer tail and completion head. */
1339 while (0 <= scmp (buffer_string
++, completion_string
, buffer_length
--))
1341 del_range (1, i
+ 1);
1345 #endif /* Rewritten code */
1348 /* If completion finds next char not unique,
1349 consider adding a space or a hyphen. */
1350 if (i
== XSTRING (completion
)->size
)
1352 GCPRO1 (completion
);
1353 tem
= Ftry_completion (concat2 (Fbuffer_string (), build_string (" ")),
1354 Vminibuffer_completion_table
,
1355 Vminibuffer_completion_predicate
);
1358 if (XTYPE (tem
) == Lisp_String
)
1362 GCPRO1 (completion
);
1364 Ftry_completion (concat2 (Fbuffer_string (), build_string ("-")),
1365 Vminibuffer_completion_table
,
1366 Vminibuffer_completion_predicate
);
1369 if (XTYPE (tem
) == Lisp_String
)
1374 /* Now find first word-break in the stuff found by completion.
1375 i gets index in string of where to stop completing. */
1377 completion_string
= XSTRING (completion
)->data
;
1379 for (; i
< XSTRING (completion
)->size
; i
++)
1380 if (SYNTAX (completion_string
[i
]) != Sword
) break;
1381 if (i
< XSTRING (completion
)->size
)
1384 /* If got no characters, print help for user. */
1389 Fminibuffer_completion_help ();
1393 /* Otherwise insert in minibuffer the chars we got */
1396 insert_from_string (completion
, 0, i
, 1);
1400 DEFUN ("display-completion-list", Fdisplay_completion_list
, Sdisplay_completion_list
,
1402 "Display the list of completions, COMPLETIONS, using `standard-output'.\n\
1403 Each element may be just a symbol or string\n\
1404 or may be a list of two strings to be printed as if concatenated.\n\
1405 `standard-output' must be a buffer.\n\
1406 At the end, run the normal hook `completion-setup-hook'.\n\
1407 It can find the completion buffer in `standard-output'.")
1409 Lisp_Object completions
;
1411 register Lisp_Object tail
, elt
;
1414 /* No GCPRO needed, since (when it matters) every variable
1415 points to a non-string that is pointed to by COMPLETIONS. */
1416 struct buffer
*old
= current_buffer
;
1417 if (XTYPE (Vstandard_output
) == Lisp_Buffer
)
1418 set_buffer_internal (XBUFFER (Vstandard_output
));
1420 if (NILP (completions
))
1421 write_string ("There are no possible completions of what you have typed.",
1425 write_string ("Possible completions are:", -1);
1426 for (tail
= completions
, i
= 0; !NILP (tail
); tail
= Fcdr (tail
), i
++)
1428 /* this needs fixing for the case of long completions
1429 and/or narrow windows */
1430 /* Sadly, the window it will appear in is not known
1431 until after the text has been made. */
1434 if (XTYPE (Vstandard_output
) == Lisp_Buffer
)
1435 Findent_to (make_number (35), make_number (1));
1440 write_string (" ", -1);
1443 while (column
< 35);
1454 if (XTYPE (Vstandard_output
) != Lisp_Buffer
)
1457 tem
= Flength (Fcar (elt
));
1458 column
+= XINT (tem
);
1459 tem
= Flength (Fcar (Fcdr (elt
)));
1460 column
+= XINT (tem
);
1462 Fprinc (Fcar (elt
), Qnil
);
1463 Fprinc (Fcar (Fcdr (elt
)), Qnil
);
1467 if (XTYPE (Vstandard_output
) != Lisp_Buffer
)
1470 tem
= Flength (elt
);
1471 column
+= XINT (tem
);
1478 if (XTYPE (Vstandard_output
) == Lisp_Buffer
)
1479 set_buffer_internal (old
);
1481 if (!NILP (Vrun_hooks
))
1482 call1 (Vrun_hooks
, intern ("completion-setup-hook"));
1487 DEFUN ("minibuffer-completion-help", Fminibuffer_completion_help
, Sminibuffer_completion_help
,
1489 "Display a list of possible completions of the current minibuffer contents.")
1492 Lisp_Object completions
;
1494 message ("Making completion list...");
1495 completions
= Fall_completions (Fbuffer_string (),
1496 Vminibuffer_completion_table
,
1497 Vminibuffer_completion_predicate
);
1498 echo_area_glyphs
= 0;
1500 if (NILP (completions
))
1503 temp_echo_area_glyphs (" [No completions]");
1506 internal_with_output_to_temp_buffer ("*Completions*",
1507 Fdisplay_completion_list
,
1508 Fsort (completions
, Qstring_lessp
));
1512 DEFUN ("self-insert-and-exit", Fself_insert_and_exit
, Sself_insert_and_exit
, 0, 0, "",
1513 "Terminate minibuffer input.")
1516 if (XTYPE (last_command_char
) == Lisp_Int
)
1517 internal_self_insert (last_command_char
, 0);
1521 Fthrow (Qexit
, Qnil
);
1524 DEFUN ("exit-minibuffer", Fexit_minibuffer
, Sexit_minibuffer
, 0, 0, "",
1525 "Terminate this minibuffer argument.")
1528 Fthrow (Qexit
, Qnil
);
1531 DEFUN ("minibuffer-depth", Fminibuffer_depth
, Sminibuffer_depth
, 0, 0, 0,
1532 "Return current depth of activations of minibuffer, a nonnegative integer.")
1535 return make_number (minibuf_level
);
1538 DEFUN ("minibuffer-prompt", Fminibuffer_prompt
, Sminibuffer_prompt
, 0, 0, 0,
1539 "Return the prompt string of the currently-active minibuffer.\n\
1540 If no minibuffer is active, return nil.")
1543 if (!minibuf_prompt
)
1545 return build_string (minibuf_prompt
);
1548 DEFUN ("minibuffer-prompt-width", Fminibuffer_prompt_width
,
1549 Sminibuffer_prompt_width
, 0, 0, 0,
1550 "Return the display width of the minibuffer prompt.")
1554 XFASTINT (width
) = minibuf_prompt_width
;
1558 init_minibuf_once ()
1560 Vminibuffer_list
= Qnil
;
1561 staticpro (&Vminibuffer_list
);
1568 minibuf_save_vector_size
= 5;
1569 minibuf_save_vector
= (struct minibuf_save_data
*) malloc (5 * sizeof (struct minibuf_save_data
));
1571 Qread_file_name_internal
= intern ("read-file-name-internal");
1572 staticpro (&Qread_file_name_internal
);
1574 Qminibuffer_completion_table
= intern ("minibuffer-completion-table");
1575 staticpro (&Qminibuffer_completion_table
);
1577 Qminibuffer_completion_confirm
= intern ("minibuffer-completion-confirm");
1578 staticpro (&Qminibuffer_completion_confirm
);
1580 Qminibuffer_completion_predicate
= intern ("minibuffer-completion-predicate");
1581 staticpro (&Qminibuffer_completion_predicate
);
1583 staticpro (&last_exact_completion
);
1584 last_exact_completion
= Qnil
;
1586 staticpro (&last_minibuf_string
);
1587 last_minibuf_string
= Qnil
;
1589 Quser_variable_p
= intern ("user-variable-p");
1590 staticpro (&Quser_variable_p
);
1592 Qminibuffer_history
= intern ("minibuffer-history");
1593 staticpro (&Qminibuffer_history
);
1595 Qminibuffer_setup_hook
= intern ("minibuffer-setup-hook");
1596 staticpro (&Qminibuffer_setup_hook
);
1598 Qminibuffer_exit_hook
= intern ("minibuffer-exit-hook");
1599 staticpro (&Qminibuffer_exit_hook
);
1601 DEFVAR_LISP ("minibuffer-setup-hook", &Vminibuffer_setup_hook
,
1602 "Normal hook run just after entry to minibuffer.");
1603 Vminibuffer_setup_hook
= Qnil
;
1605 DEFVAR_LISP ("minibuffer-exit-hook", &Vminibuffer_exit_hook
,
1606 "Normal hook run just after exit from minibuffer.");
1607 Vminibuffer_exit_hook
= Qnil
;
1609 DEFVAR_BOOL ("completion-auto-help", &auto_help
,
1610 "*Non-nil means automatically provide help for invalid completion input.");
1613 DEFVAR_BOOL ("completion-ignore-case", &completion_ignore_case
,
1614 "Non-nil means don't consider case significant in completion.");
1615 completion_ignore_case
= 0;
1617 DEFVAR_BOOL ("enable-recursive-minibuffers", &enable_recursive_minibuffers
,
1618 "*Non-nil means to allow minibuffer commands while in the minibuffer.\n\
1619 More precisely, this variable makes a difference when the minibuffer window\n\
1620 is the selected window. If you are in some other window, minibuffer commands\n\
1621 are allowed even if a minibuffer is active.");
1622 enable_recursive_minibuffers
= 0;
1624 DEFVAR_LISP ("minibuffer-completion-table", &Vminibuffer_completion_table
,
1625 "Alist or obarray used for completion in the minibuffer.\n\
1626 This becomes the ALIST argument to `try-completion' and `all-completion'.\n\
1628 The value may alternatively be a function, which is given three arguments:\n\
1629 STRING, the current buffer contents;\n\
1630 PREDICATE, the predicate for filtering possible matches;\n\
1631 CODE, which says what kind of things to do.\n\
1632 CODE can be nil, t or `lambda'.\n\
1633 nil means to return the best completion of STRING, or nil if there is none.\n\
1634 t means to return a list of all possible completions of STRING.\n\
1635 `lambda' means to return t if STRING is a valid completion as it stands.");
1636 Vminibuffer_completion_table
= Qnil
;
1638 DEFVAR_LISP ("minibuffer-completion-predicate", &Vminibuffer_completion_predicate
,
1639 "Within call to `completing-read', this holds the PREDICATE argument.");
1640 Vminibuffer_completion_predicate
= Qnil
;
1642 DEFVAR_LISP ("minibuffer-completion-confirm", &Vminibuffer_completion_confirm
,
1643 "Non-nil => demand confirmation of completion before exiting minibuffer.");
1644 Vminibuffer_completion_confirm
= Qnil
;
1646 DEFVAR_LISP ("minibuffer-help-form", &Vminibuffer_help_form
,
1647 "Value that `help-form' takes on inside the minibuffer.");
1648 Vminibuffer_help_form
= Qnil
;
1650 DEFVAR_LISP ("minibuffer-history-variable", &Vminibuffer_history_variable
,
1651 "History list symbol to add minibuffer values to.\n\
1652 Each minibuffer output is added with\n\
1653 (set minibuffer-history-variable\n\
1654 (cons STRING (symbol-value minibuffer-history-variable)))");
1655 XFASTINT (Vminibuffer_history_variable
) = 0;
1657 DEFVAR_LISP ("minibuffer-history-position", &Vminibuffer_history_position
,
1658 "Current position of redoing in the history list.");
1659 Vminibuffer_history_position
= Qnil
;
1661 DEFVAR_BOOL ("minibuffer-auto-raise", &minibuffer_auto_raise
,
1662 "*Non-nil means entering the minibuffer raises the minibuffer's frame.");
1663 minibuffer_auto_raise
= 0;
1665 DEFVAR_LISP ("completion-regexp-list", &Vcompletion_regexp_list
,
1666 "List of regexps that should restrict possible completions.");
1667 Vcompletion_regexp_list
= Qnil
;
1669 defsubr (&Sread_from_minibuffer
);
1670 defsubr (&Seval_minibuffer
);
1671 defsubr (&Sread_minibuffer
);
1672 defsubr (&Sread_string
);
1673 defsubr (&Sread_command
);
1674 defsubr (&Sread_variable
);
1675 defsubr (&Sread_buffer
);
1676 defsubr (&Sread_no_blanks_input
);
1677 defsubr (&Sminibuffer_depth
);
1678 defsubr (&Sminibuffer_prompt
);
1679 defsubr (&Sminibuffer_prompt_width
);
1681 defsubr (&Stry_completion
);
1682 defsubr (&Sall_completions
);
1683 defsubr (&Scompleting_read
);
1684 defsubr (&Sminibuffer_complete
);
1685 defsubr (&Sminibuffer_complete_word
);
1686 defsubr (&Sminibuffer_complete_and_exit
);
1687 defsubr (&Sdisplay_completion_list
);
1688 defsubr (&Sminibuffer_completion_help
);
1690 defsubr (&Sself_insert_and_exit
);
1691 defsubr (&Sexit_minibuffer
);
1697 initial_define_key (Vminibuffer_local_map
, Ctl ('g'),
1698 "abort-recursive-edit");
1699 initial_define_key (Vminibuffer_local_map
, Ctl ('m'),
1701 initial_define_key (Vminibuffer_local_map
, Ctl ('j'),
1704 initial_define_key (Vminibuffer_local_ns_map
, Ctl ('g'),
1705 "abort-recursive-edit");
1706 initial_define_key (Vminibuffer_local_ns_map
, Ctl ('m'),
1708 initial_define_key (Vminibuffer_local_ns_map
, Ctl ('j'),
1711 initial_define_key (Vminibuffer_local_ns_map
, ' ',
1713 initial_define_key (Vminibuffer_local_ns_map
, '\t',
1715 initial_define_key (Vminibuffer_local_ns_map
, '?',
1716 "self-insert-and-exit");
1718 initial_define_key (Vminibuffer_local_completion_map
, Ctl ('g'),
1719 "abort-recursive-edit");
1720 initial_define_key (Vminibuffer_local_completion_map
, Ctl ('m'),
1722 initial_define_key (Vminibuffer_local_completion_map
, Ctl ('j'),
1725 initial_define_key (Vminibuffer_local_completion_map
, '\t',
1726 "minibuffer-complete");
1727 initial_define_key (Vminibuffer_local_completion_map
, ' ',
1728 "minibuffer-complete-word");
1729 initial_define_key (Vminibuffer_local_completion_map
, '?',
1730 "minibuffer-completion-help");
1732 initial_define_key (Vminibuffer_local_must_match_map
, Ctl ('g'),
1733 "abort-recursive-edit");
1734 initial_define_key (Vminibuffer_local_must_match_map
, Ctl ('m'),
1735 "minibuffer-complete-and-exit");
1736 initial_define_key (Vminibuffer_local_must_match_map
, Ctl ('j'),
1737 "minibuffer-complete-and-exit");
1738 initial_define_key (Vminibuffer_local_must_match_map
, '\t',
1739 "minibuffer-complete");
1740 initial_define_key (Vminibuffer_local_must_match_map
, ' ',
1741 "minibuffer-complete-word");
1742 initial_define_key (Vminibuffer_local_must_match_map
, '?',
1743 "minibuffer-completion-help");