1 /* Minibuffer input and completion.
2 Copyright (C) 1985, 1986, 1993, 1994, 1995 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
36 invocation, the next element is used for a recursive minibuffer
37 invocation, etc. The list is extended at the end as deeper
38 minibuffer recursions are encountered. */
39 Lisp_Object Vminibuffer_list
;
41 /* Data to remember during recursive minibuffer invocations */
42 Lisp_Object minibuf_save_list
;
44 /* Depth in minibuffer invocations. */
47 /* Nonzero means display completion help for invalid input */
50 /* Fread_minibuffer leaves the input here as a string. */
51 Lisp_Object last_minibuf_string
;
53 /* Nonzero means let functions called when within a minibuffer
54 invoke recursive minibuffers (to read arguments, or whatever) */
55 int enable_recursive_minibuffers
;
57 /* help-form is bound to this while in the minibuffer. */
59 Lisp_Object Vminibuffer_help_form
;
61 /* Variable which is the history list to add minibuffer values to. */
63 Lisp_Object Vminibuffer_history_variable
;
65 /* Current position in the history list (adjusted by M-n and M-p). */
67 Lisp_Object Vminibuffer_history_position
;
69 Lisp_Object Qminibuffer_history
;
71 Lisp_Object Qread_file_name_internal
;
73 /* Normal hooks for entry to and exit from minibuffer. */
75 Lisp_Object Qminibuffer_setup_hook
, Vminibuffer_setup_hook
;
76 Lisp_Object Qminibuffer_exit_hook
, Vminibuffer_exit_hook
;
78 /* Nonzero means completion ignores case. */
80 int completion_ignore_case
;
82 /* List of regexps that should restrict possible completions. */
84 Lisp_Object Vcompletion_regexp_list
;
86 /* Nonzero means raise the minibuffer frame when the minibuffer
89 int minibuffer_auto_raise
;
91 /* If last completion attempt reported "Complete but not unique"
92 then this is the string completed then; otherwise this is nil. */
94 static Lisp_Object last_exact_completion
;
96 Lisp_Object Quser_variable_p
;
98 /* Non-nil means it is the window for C-M-v to scroll
99 when the minibuffer is selected. */
100 extern Lisp_Object Vminibuf_scroll_window
;
102 extern Lisp_Object Voverriding_local_map
;
104 /* Actual minibuffer invocation. */
106 void read_minibuf_unwind ();
107 Lisp_Object
get_minibuffer ();
108 Lisp_Object
read_minibuf ();
110 /* Read from the minibuffer using keymap MAP, initial contents INITIAL
111 (a string), putting point minus BACKUP_N chars from the end of INITIAL,
112 prompting with PROMPT (a string), using history list HISTVAR
113 with initial position HISTPOS. (BACKUP_N should be <= 0.)
115 Normally return the result as a string (the text that was read),
116 but if EXPFLAG is nonzero, read it and return the object read.
117 If HISTVAR is given, save the value read on that history only if it doesn't
118 match the front of that history list exactly. The value is pushed onto
119 the list as the string that was read. */
122 read_minibuf (map
, initial
, prompt
, backup_n
, expflag
, histvar
, histpos
)
126 Lisp_Object backup_n
;
132 int count
= specpdl_ptr
- specpdl
;
133 Lisp_Object mini_frame
;
134 struct gcpro gcpro1
, gcpro2
, gcpro3
;
141 /* Don't need to protect PROMPT, HISTVAR, and HISTPOS because we
142 store them away before we can GC. Don't need to protect
143 BACKUP_N because we use the value only if it is an integer. */
144 GCPRO3 (map
, initial
, val
);
146 if (!STRINGP (prompt
))
147 prompt
= build_string ("");
149 if (!enable_recursive_minibuffers
151 && (EQ (selected_window
, minibuf_window
)))
153 || selected_frame
!= XFRAME (WINDOW_FRAME (XWINDOW (minibuf_window
)))
155 error ("Command attempted to use minibuffer while in minibuffer");
157 /* Could we simply bind these variables instead? */
159 = Fcons (minibuf_prompt
,
160 Fcons (make_number (minibuf_prompt_width
),
162 Fcons (Vcurrent_prefix_arg
,
163 Fcons (Vminibuffer_history_position
,
164 Fcons (Vminibuffer_history_variable
,
165 Fcons (Voverriding_local_map
,
166 minibuf_save_list
)))))));
167 minibuf_prompt_width
= 0; /* xdisp.c puts in the right value. */
168 minibuf_prompt
= Fcopy_sequence (prompt
);
169 Vminibuffer_history_position
= histpos
;
170 Vminibuffer_history_variable
= histvar
;
172 record_unwind_protect (Fset_window_configuration
,
173 Fcurrent_window_configuration (Qnil
));
175 /* If the minibuffer window is on a different frame, save that
176 frame's configuration too. */
178 mini_frame
= WINDOW_FRAME (XWINDOW (minibuf_window
));
179 if (XFRAME (mini_frame
) != selected_frame
)
180 record_unwind_protect (Fset_window_configuration
,
181 Fcurrent_window_configuration (mini_frame
));
183 /* If the minibuffer is on an iconified or invisible frame,
184 make it visible now. */
185 Fmake_frame_visible (mini_frame
);
187 if (minibuffer_auto_raise
)
188 Fraise_frame (mini_frame
);
191 val
= current_buffer
->directory
;
192 Fset_buffer (get_minibuffer (minibuf_level
));
194 /* The current buffer's default directory is usually the right thing
195 for our minibuffer here. However, if you're typing a command at
196 a minibuffer-only frame when minibuf_level is zero, then buf IS
197 the current_buffer, so reset_buffer leaves buf's default
198 directory unchanged. This is a bummer when you've just started
199 up Emacs and buf's default directory is Qnil. Here's a hack; can
200 you think of something better to do? Find another buffer with a
201 better directory, and use that one instead. */
203 current_buffer
->directory
= val
;
206 Lisp_Object buf_list
;
208 for (buf_list
= Vbuffer_alist
;
210 buf_list
= XCONS (buf_list
)->cdr
)
212 Lisp_Object other_buf
;
214 other_buf
= XCONS (XCONS (buf_list
)->car
)->cdr
;
215 if (STRINGP (XBUFFER (other_buf
)->directory
))
217 current_buffer
->directory
= XBUFFER (other_buf
)->directory
;
224 if (XFRAME (mini_frame
) != selected_frame
)
225 Fredirect_frame_focus (Fselected_frame (), mini_frame
);
227 Fmake_local_variable (Qprint_escape_newlines
);
228 print_escape_newlines
= 1;
230 record_unwind_protect (read_minibuf_unwind
, Qnil
);
232 Vminibuf_scroll_window
= selected_window
;
233 Fset_window_buffer (minibuf_window
, Fcurrent_buffer ());
234 Fselect_window (minibuf_window
);
235 XSETFASTINT (XWINDOW (minibuf_window
)->hscroll
, 0);
242 Finsert (1, &initial
);
243 if (!NILP (backup_n
) && INTEGERP (backup_n
))
244 Fforward_char (backup_n
);
247 echo_area_glyphs
= 0;
248 /* This is in case the minibuffer-setup-hook calls Fsit_for. */
249 previous_echo_glyphs
= 0;
251 Vhelp_form
= Vminibuffer_help_form
;
252 current_buffer
->keymap
= map
;
254 /* Run our hook, but not if it is empty.
255 (run-hooks would do nothing if it is empty,
256 but it's important to save time here in the usual case. */
257 if (!NILP (Vminibuffer_setup_hook
) && !EQ (Vminibuffer_setup_hook
, Qunbound
)
258 && !NILP (Vrun_hooks
))
259 call1 (Vrun_hooks
, Qminibuffer_setup_hook
);
261 /* ??? MCC did redraw_screen here if switching screens. */
264 /* If cursor is on the minibuffer line,
265 show the user we have exited by putting it in column 0. */
266 if ((FRAME_CURSOR_Y (selected_frame
)
267 >= XFASTINT (XWINDOW (minibuf_window
)->top
))
270 FRAME_CURSOR_X (selected_frame
) = 0;
271 update_frame (selected_frame
, 1, 1);
274 /* Make minibuffer contents into a string */
275 val
= make_buffer_string (1, Z
);
276 bcopy (GAP_END_ADDR
, XSTRING (val
)->data
+ GPT
- BEG
, Z
- GPT
);
278 /* VAL is the string of minibuffer text. */
279 last_minibuf_string
= val
;
281 /* Add the value to the appropriate history list unless it is empty. */
282 if (XSTRING (val
)->size
!= 0
283 && SYMBOLP (Vminibuffer_history_variable
)
284 && ! EQ (XSYMBOL (Vminibuffer_history_variable
)->value
, Qunbound
))
286 /* If the caller wanted to save the value read on a history list,
287 then do so if the value is not already the front of the list. */
289 histval
= Fsymbol_value (Vminibuffer_history_variable
);
291 /* The value of the history variable must be a cons or nil. Other
292 values are unacceptable. We silently ignore these values. */
295 && NILP (Fequal (last_minibuf_string
, Fcar (histval
)))))
296 Fset (Vminibuffer_history_variable
,
297 Fcons (last_minibuf_string
, histval
));
300 /* If Lisp form desired instead of string, parse it. */
303 Lisp_Object expr_and_pos
;
306 expr_and_pos
= Fread_from_string (val
, Qnil
, Qnil
);
307 /* Ignore trailing whitespace; any other trailing junk is an error. */
308 for (p
= XSTRING (val
)->data
+ XINT (Fcdr (expr_and_pos
)); *p
; p
++)
309 if (*p
!= ' ' && *p
!= '\t' && *p
!= '\n')
310 error ("Trailing garbage following expression");
311 val
= Fcar (expr_and_pos
);
314 /* The appropriate frame will get selected
315 in set-window-configuration. */
316 RETURN_UNGCPRO (unbind_to (count
, val
));
319 /* Return a buffer to be used as the minibuffer at depth `depth'.
320 depth = 0 is the lowest allowed argument, and that is the value
321 used for nonrecursive minibuffer invocations */
324 get_minibuffer (depth
)
327 Lisp_Object tail
, num
, buf
;
329 extern Lisp_Object
nconc2 ();
331 XSETFASTINT (num
, depth
);
332 tail
= Fnthcdr (num
, Vminibuffer_list
);
335 tail
= Fcons (Qnil
, Qnil
);
336 Vminibuffer_list
= nconc2 (Vminibuffer_list
, tail
);
339 if (NILP (buf
) || NILP (XBUFFER (buf
)->name
))
341 sprintf (name
, " *Minibuf-%d*", depth
);
342 buf
= Fget_buffer_create (build_string (name
));
344 /* Although the buffer's name starts with a space, undo should be
346 Fbuffer_enable_undo (buf
);
348 XCONS (tail
)->car
= buf
;
352 int count
= specpdl_ptr
- specpdl
;
354 reset_buffer (XBUFFER (buf
));
355 record_unwind_protect (Fset_buffer
, Fcurrent_buffer ());
357 Fkill_all_local_variables ();
358 unbind_to (count
, Qnil
);
364 /* This function is called on exiting minibuffer, whether normally or not,
365 and it restores the current window, buffer, etc. */
368 read_minibuf_unwind (data
)
371 Lisp_Object old_deactivate_mark
;
373 /* We are exiting the minibuffer one way or the other,
375 if (!NILP (Vminibuffer_exit_hook
) && !EQ (Vminibuffer_exit_hook
, Qunbound
)
376 && !NILP (Vrun_hooks
))
377 call1 (Vrun_hooks
, Qminibuffer_exit_hook
);
379 /* Erase the minibuffer we were using at this level. */
380 Fset_buffer (XWINDOW (minibuf_window
)->buffer
);
382 /* Prevent error in erase-buffer. */
383 current_buffer
->read_only
= Qnil
;
385 old_deactivate_mark
= Vdeactivate_mark
;
387 Vdeactivate_mark
= old_deactivate_mark
;
389 /* If this was a recursive minibuffer,
390 tie the minibuffer window back to the outer level minibuffer buffer */
392 /* Make sure minibuffer window is erased, not ignored */
393 windows_or_buffers_changed
++;
394 XSETFASTINT (XWINDOW (minibuf_window
)->last_modified
, 0);
396 /* Restore prompt, etc from outer minibuffer */
397 minibuf_prompt
= Fcar (minibuf_save_list
);
398 minibuf_save_list
= Fcdr (minibuf_save_list
);
399 minibuf_prompt_width
= XFASTINT (Fcar (minibuf_save_list
));
400 minibuf_save_list
= Fcdr (minibuf_save_list
);
401 Vhelp_form
= Fcar (minibuf_save_list
);
402 minibuf_save_list
= Fcdr (minibuf_save_list
);
403 Vcurrent_prefix_arg
= Fcar (minibuf_save_list
);
404 minibuf_save_list
= Fcdr (minibuf_save_list
);
405 Vminibuffer_history_position
= Fcar (minibuf_save_list
);
406 minibuf_save_list
= Fcdr (minibuf_save_list
);
407 Vminibuffer_history_variable
= Fcar (minibuf_save_list
);
408 minibuf_save_list
= Fcdr (minibuf_save_list
);
409 Voverriding_local_map
= Fcar (minibuf_save_list
);
410 minibuf_save_list
= Fcdr (minibuf_save_list
);
414 /* This comment supplies the doc string for read-from-minibuffer,
415 for make-docfile to see. We cannot put this in the real DEFUN
416 due to limits in the Unix cpp.
418 DEFUN ("read-from-minibuffer", Fread_from_minibuffer, Sread_from_minibuffer, 1, 5, 0,
419 "Read a string from the minibuffer, prompting with string PROMPT.\n\
420 If optional second arg INITIAL-CONTENTS is non-nil, it is a string\n\
421 to be inserted into the minibuffer before reading input.\n\
422 If INITIAL-CONTENTS is (STRING . POSITION), the initial input\n\
423 is STRING, but point is placed POSITION characters into the string.\n\
424 Third arg KEYMAP is a keymap to use whilst reading;\n\
425 if omitted or nil, the default is `minibuffer-local-map'.\n\
426 If fourth arg READ is non-nil, then interpret the result as a lisp object\n\
427 and return that object:\n\
428 in other words, do `(car (read-from-string INPUT-STRING))'\n\
429 Fifth arg HIST, if non-nil, specifies a history list\n\
430 and optionally the initial position in the list.\n\
431 It can be a symbol, which is the history list variable to use,\n\
432 or it can be a cons cell (HISTVAR . HISTPOS).\n\
433 In that case, HISTVAR is the history list variable to use,\n\
434 and HISTPOS is the initial position (the position in the list\n\
435 which INITIAL-CONTENTS corresponds to).\n\
436 Positions are counted starting from 1 at the beginning of the list."
439 DEFUN ("read-from-minibuffer", Fread_from_minibuffer
, Sread_from_minibuffer
, 1, 5, 0,
440 0 /* See immediately above */)
441 (prompt
, initial_contents
, keymap
, read
, hist
)
442 Lisp_Object prompt
, initial_contents
, keymap
, read
, hist
;
445 Lisp_Object histvar
, histpos
, position
;
448 CHECK_STRING (prompt
, 0);
449 if (!NILP (initial_contents
))
451 if (CONSP (initial_contents
))
453 position
= Fcdr (initial_contents
);
454 initial_contents
= Fcar (initial_contents
);
456 CHECK_STRING (initial_contents
, 1);
457 if (!NILP (position
))
459 CHECK_NUMBER (position
, 0);
460 /* Convert to distance from end of input. */
461 pos
= XINT (position
) - 1 - XSTRING (initial_contents
)->size
;
466 keymap
= Vminibuffer_local_map
;
468 keymap
= get_keymap (keymap
,2);
477 histvar
= Fcar_safe (hist
);
478 histpos
= Fcdr_safe (hist
);
481 histvar
= Qminibuffer_history
;
483 XSETFASTINT (histpos
, 0);
485 return read_minibuf (keymap
, initial_contents
, prompt
,
486 make_number (pos
), !NILP (read
), histvar
, histpos
);
489 DEFUN ("read-minibuffer", Fread_minibuffer
, Sread_minibuffer
, 1, 2, 0,
490 "Return a Lisp object read using the minibuffer.\n\
491 Prompt with PROMPT. If non-nil, optional second arg INITIAL-CONTENTS\n\
492 is a string to insert in the minibuffer before reading.")
493 (prompt
, initial_contents
)
494 Lisp_Object prompt
, initial_contents
;
496 CHECK_STRING (prompt
, 0);
497 if (!NILP (initial_contents
))
498 CHECK_STRING (initial_contents
, 1);
499 return read_minibuf (Vminibuffer_local_map
, initial_contents
,
500 prompt
, Qnil
, 1, Qminibuffer_history
, make_number (0));
503 DEFUN ("eval-minibuffer", Feval_minibuffer
, Seval_minibuffer
, 1, 2, 0,
504 "Return value of Lisp expression read using the minibuffer.\n\
505 Prompt with PROMPT. If non-nil, optional second arg INITIAL-CONTENTS\n\
506 is a string to insert in the minibuffer before reading.")
507 (prompt
, initial_contents
)
508 Lisp_Object prompt
, initial_contents
;
510 return Feval (Fread_minibuffer (prompt
, initial_contents
));
513 /* Functions that use the minibuffer to read various things. */
515 DEFUN ("read-string", Fread_string
, Sread_string
, 1, 3, 0,
516 "Read a string from the minibuffer, prompting with string PROMPT.\n\
517 If non-nil, second arg INITIAL-INPUT is a string to insert before reading.\n\
518 The third arg HISTORY, if non-nil, specifies a history list\n\
519 and optionally the initial position in the list.\n\
520 See `read-from-minibuffer' for details of HISTORY argument.")
521 (prompt
, initial_input
, history
)
522 Lisp_Object prompt
, initial_input
, history
;
524 return Fread_from_minibuffer (prompt
, initial_input
, Qnil
, Qnil
, history
);
527 DEFUN ("read-no-blanks-input", Fread_no_blanks_input
, Sread_no_blanks_input
, 1, 2, 0,
528 "Args PROMPT and INIT, strings. Read a string from the terminal, not allowing blanks.\n\
529 Prompt with PROMPT, and provide INIT as an initial value of the input string.")
531 Lisp_Object prompt
, init
;
533 CHECK_STRING (prompt
, 0);
535 CHECK_STRING (init
, 1);
537 return read_minibuf (Vminibuffer_local_ns_map
, init
, prompt
, Qnil
, 0,
538 Qminibuffer_history
, make_number (0));
541 DEFUN ("read-command", Fread_command
, Sread_command
, 1, 1, 0,
542 "One arg PROMPT, a string. Read the name of a command and return as a symbol.\n\
543 Prompts with PROMPT.")
547 return Fintern (Fcompleting_read (prompt
, Vobarray
, Qcommandp
, Qt
, Qnil
, Qnil
),
552 DEFUN ("read-function", Fread_function
, Sread_function
, 1, 1, 0,
553 "One arg PROMPT, a string. Read the name of a function and return as a symbol.\n\
554 Prompts with PROMPT.")
558 return Fintern (Fcompleting_read (prompt
, Vobarray
, Qfboundp
, Qt
, Qnil
, Qnil
),
563 DEFUN ("read-variable", Fread_variable
, Sread_variable
, 1, 1, 0,
564 "One arg PROMPT, a string. Read the name of a user variable and return\n\
565 it as a symbol. Prompts with PROMPT.\n\
566 A user variable is one whose documentation starts with a `*' character.")
570 return Fintern (Fcompleting_read (prompt
, Vobarray
,
571 Quser_variable_p
, Qt
, Qnil
, Qnil
),
575 DEFUN ("read-buffer", Fread_buffer
, Sread_buffer
, 1, 3, 0,
576 "One arg PROMPT, a string. Read the name of a buffer and return as a string.\n\
577 Prompts with PROMPT.\n\
578 Optional second arg is value to return if user enters an empty line.\n\
579 If optional third arg REQUIRE-MATCH is non-nil, only existing buffer names are allowed.")
580 (prompt
, def
, require_match
)
581 Lisp_Object prompt
, def
, require_match
;
588 def
= XBUFFER (def
)->name
;
591 args
[0] = build_string ("%s(default %s) ");
594 prompt
= Fformat (3, args
);
597 tem
= Fcompleting_read (prompt
, Vbuffer_alist
, Qnil
, require_match
, Qnil
, Qnil
);
599 if (XSTRING (tem
)->size
)
604 DEFUN ("try-completion", Ftry_completion
, Stry_completion
, 2, 3, 0,
605 "Return common substring of all completions of STRING in ALIST.\n\
606 Each car of each element of ALIST is tested to see if it begins with STRING.\n\
607 All that match are compared together; the longest initial sequence\n\
608 common to all matches is returned as a string.\n\
609 If there is no match at all, nil is returned.\n\
610 For an exact match, t is returned.\n\
612 ALIST can be an obarray instead of an alist.\n\
613 Then the print names of all symbols in the obarray are the possible matches.\n\
615 ALIST can also be a function to do the completion itself.\n\
616 It receives three arguments: the values STRING, PREDICATE and nil.\n\
617 Whatever it returns becomes the value of `try-completion'.\n\
619 If optional third argument PREDICATE is non-nil,\n\
620 it is used to test each possible match.\n\
621 The match is a candidate only if PREDICATE returns non-nil.\n\
622 The argument given to PREDICATE is the alist element\n\
623 or the symbol from the obarray.")
624 (string
, alist
, pred
)
625 Lisp_Object string
, alist
, pred
;
627 Lisp_Object bestmatch
, tail
, elt
, eltstring
;
629 int compare
, matchsize
;
630 int list
= CONSP (alist
) || NILP (alist
);
633 Lisp_Object bucket
, zero
, end
, tem
;
634 struct gcpro gcpro1
, gcpro2
, gcpro3
, gcpro4
;
636 CHECK_STRING (string
, 0);
637 if (!list
&& !VECTORP (alist
))
638 return call3 (alist
, string
, pred
, Qnil
);
642 /* If ALIST is not a list, set TAIL just for gc pro. */
647 obsize
= XVECTOR (alist
)->size
;
648 bucket
= XVECTOR (alist
)->contents
[index
];
653 /* Get the next element of the alist or obarray. */
654 /* Exit the loop if the elements are all used up. */
655 /* elt gets the alist element or symbol.
656 eltstring gets the name to check as a completion. */
663 eltstring
= Fcar (elt
);
668 if (XFASTINT (bucket
) != 0)
671 eltstring
= Fsymbol_name (elt
);
672 if (XSYMBOL (bucket
)->next
)
673 XSETSYMBOL (bucket
, XSYMBOL (bucket
)->next
);
675 XSETFASTINT (bucket
, 0);
677 else if (++index
>= obsize
)
681 bucket
= XVECTOR (alist
)->contents
[index
];
686 /* Is this element a possible completion? */
688 if (STRINGP (eltstring
)
689 && XSTRING (string
)->size
<= XSTRING (eltstring
)->size
690 && 0 > scmp (XSTRING (eltstring
)->data
, XSTRING (string
)->data
,
691 XSTRING (string
)->size
))
696 XSETFASTINT (zero
, 0);
698 /* Ignore this element if it fails to match all the regexps. */
699 for (regexps
= Vcompletion_regexp_list
; CONSP (regexps
);
700 regexps
= XCONS (regexps
)->cdr
)
702 tem
= Fstring_match (XCONS (regexps
)->car
, eltstring
, zero
);
709 /* Ignore this element if there is a predicate
710 and the predicate doesn't like it. */
714 if (EQ (pred
, Qcommandp
))
715 tem
= Fcommandp (elt
);
718 GCPRO4 (tail
, string
, eltstring
, bestmatch
);
719 tem
= call1 (pred
, elt
);
722 if (NILP (tem
)) continue;
725 /* Update computation of how much all possible completions match */
728 if (NILP (bestmatch
))
729 bestmatch
= eltstring
, bestmatchsize
= XSTRING (eltstring
)->size
;
732 compare
= min (bestmatchsize
, XSTRING (eltstring
)->size
);
733 matchsize
= scmp (XSTRING (bestmatch
)->data
,
734 XSTRING (eltstring
)->data
,
738 if (completion_ignore_case
)
740 /* If this is an exact match except for case,
741 use it as the best match rather than one that is not an
742 exact match. This way, we get the case pattern
743 of the actual match. */
744 if ((matchsize
== XSTRING (eltstring
)->size
745 && matchsize
< XSTRING (bestmatch
)->size
)
747 /* If there is more than one exact match ignoring case,
748 and one of them is exact including case,
750 /* If there is no exact match ignoring case,
751 prefer a match that does not change the case
753 ((matchsize
== XSTRING (eltstring
)->size
)
755 (matchsize
== XSTRING (bestmatch
)->size
)
756 && !bcmp (XSTRING (eltstring
)->data
,
757 XSTRING (string
)->data
, XSTRING (string
)->size
)
758 && bcmp (XSTRING (bestmatch
)->data
,
759 XSTRING (string
)->data
, XSTRING (string
)->size
)))
760 bestmatch
= eltstring
;
762 bestmatchsize
= matchsize
;
767 if (NILP (bestmatch
))
768 return Qnil
; /* No completions found */
769 /* If we are ignoring case, and there is no exact match,
770 and no additional text was supplied,
771 don't change the case of what the user typed. */
772 if (completion_ignore_case
&& bestmatchsize
== XSTRING (string
)->size
773 && XSTRING (bestmatch
)->size
> bestmatchsize
)
776 /* Return t if the supplied string is an exact match (counting case);
777 it does not require any change to be made. */
778 if (matchcount
== 1 && bestmatchsize
== XSTRING (string
)->size
779 && !bcmp (XSTRING (bestmatch
)->data
, XSTRING (string
)->data
,
783 XSETFASTINT (zero
, 0); /* Else extract the part in which */
784 XSETFASTINT (end
, bestmatchsize
); /* all completions agree */
785 return Fsubstring (bestmatch
, zero
, end
);
788 /* Compare exactly LEN chars of strings at S1 and S2,
789 ignoring case if appropriate.
790 Return -1 if strings match,
791 else number of chars that match at the beginning. */
795 register unsigned char *s1
, *s2
;
798 register int l
= len
;
800 if (completion_ignore_case
)
802 while (l
&& DOWNCASE (*s1
++) == DOWNCASE (*s2
++))
807 while (l
&& *s1
++ == *s2
++)
816 DEFUN ("all-completions", Fall_completions
, Sall_completions
, 2, 4, 0,
817 "Search for partial matches to STRING in ALIST.\n\
818 Each car of each element of ALIST is tested to see if it begins with STRING.\n\
819 The value is a list of all the strings from ALIST that match.\n\
821 ALIST can be an obarray instead of an alist.\n\
822 Then the print names of all symbols in the obarray are the possible matches.\n\
824 ALIST can also be a function to do the completion itself.\n\
825 It receives three arguments: the values STRING, PREDICATE and t.\n\
826 Whatever it returns becomes the value of `all-completion'.\n\
828 If optional third argument PREDICATE is non-nil,\n\
829 it is used to test each possible match.\n\
830 The match is a candidate only if PREDICATE returns non-nil.\n\
831 The argument given to PREDICATE is the alist element\n\
832 or the symbol from the obarray.\n\
834 If the optional fourth argument HIDE-SPACES is non-nil,\n\
835 strings in ALIST that start with a space\n\
836 are ignored unless STRING itself starts with a space.")
837 (string
, alist
, pred
, hide_spaces
)
838 Lisp_Object string
, alist
, pred
, hide_spaces
;
840 Lisp_Object tail
, elt
, eltstring
;
841 Lisp_Object allmatches
;
842 int list
= CONSP (alist
) || NILP (alist
);
844 Lisp_Object bucket
, tem
;
845 struct gcpro gcpro1
, gcpro2
, gcpro3
, gcpro4
;
847 CHECK_STRING (string
, 0);
848 if (!list
&& !VECTORP (alist
))
850 return call3 (alist
, string
, pred
, Qt
);
854 /* If ALIST is not a list, set TAIL just for gc pro. */
859 obsize
= XVECTOR (alist
)->size
;
860 bucket
= XVECTOR (alist
)->contents
[index
];
865 /* Get the next element of the alist or obarray. */
866 /* Exit the loop if the elements are all used up. */
867 /* elt gets the alist element or symbol.
868 eltstring gets the name to check as a completion. */
875 eltstring
= Fcar (elt
);
880 if (XFASTINT (bucket
) != 0)
883 eltstring
= Fsymbol_name (elt
);
884 if (XSYMBOL (bucket
)->next
)
885 XSETSYMBOL (bucket
, XSYMBOL (bucket
)->next
);
887 XSETFASTINT (bucket
, 0);
889 else if (++index
>= obsize
)
893 bucket
= XVECTOR (alist
)->contents
[index
];
898 /* Is this element a possible completion? */
900 if (STRINGP (eltstring
)
901 && XSTRING (string
)->size
<= XSTRING (eltstring
)->size
902 /* If HIDE_SPACES, reject alternatives that start with space
903 unless the input starts with space. */
904 && ((XSTRING (string
)->size
> 0 && XSTRING (string
)->data
[0] == ' ')
905 || XSTRING (eltstring
)->data
[0] != ' '
906 || NILP (hide_spaces
))
907 && 0 > scmp (XSTRING (eltstring
)->data
, XSTRING (string
)->data
,
908 XSTRING (string
)->size
))
913 XSETFASTINT (zero
, 0);
915 /* Ignore this element if it fails to match all the regexps. */
916 for (regexps
= Vcompletion_regexp_list
; CONSP (regexps
);
917 regexps
= XCONS (regexps
)->cdr
)
919 tem
= Fstring_match (XCONS (regexps
)->car
, eltstring
, zero
);
926 /* Ignore this element if there is a predicate
927 and the predicate doesn't like it. */
931 if (EQ (pred
, Qcommandp
))
932 tem
= Fcommandp (elt
);
935 GCPRO4 (tail
, eltstring
, allmatches
, string
);
936 tem
= call1 (pred
, elt
);
939 if (NILP (tem
)) continue;
941 /* Ok => put it on the list. */
942 allmatches
= Fcons (eltstring
, allmatches
);
946 return Fnreverse (allmatches
);
949 Lisp_Object Vminibuffer_completion_table
, Qminibuffer_completion_table
;
950 Lisp_Object Vminibuffer_completion_predicate
, Qminibuffer_completion_predicate
;
951 Lisp_Object Vminibuffer_completion_confirm
, Qminibuffer_completion_confirm
;
953 /* This comment supplies the doc string for completing-read,
954 for make-docfile to see. We cannot put this in the real DEFUN
955 due to limits in the Unix cpp.
957 DEFUN ("completing-read", Fcompleting_read, Scompleting_read, 2, 6, 0,
958 "Read a string in the minibuffer, with completion.\n\
959 Args: PROMPT, TABLE, PREDICATE, REQUIRE-MATCH, INITIAL-INPUT, HIST.\n\
960 PROMPT is a string to prompt with; normally it ends in a colon and a space.\n\
961 TABLE is an alist whose elements' cars are strings, or an obarray.\n\
962 PREDICATE limits completion to a subset of TABLE.\n\
963 See `try-completion' and `all-completions' for more details
964 on completion, TABLE, and PREDICATE.\n\
966 If REQUIRE-MATCH is non-nil, the user is not allowed to exit unless\n\
967 the input is (or completes to) an element of TABLE or is null.\n\
968 If it is also not t, Return does not exit if it does non-null completion.\n\
969 If the input is null, `completing-read' returns nil,\n\
970 regardless of the value of REQUIRE-MATCH.\n\
972 If INITIAL-INPUT is non-nil, insert it in the minibuffer initially.\n\
973 If it is (STRING . POSITION), the initial input\n\
974 is STRING, but point is placed POSITION characters into the string.\n\
975 HIST, if non-nil, specifies a history list\n\
976 and optionally the initial position in the list.\n\
977 It can be a symbol, which is the history list variable to use,\n\
978 or it can be a cons cell (HISTVAR . HISTPOS).\n\
979 In that case, HISTVAR is the history list variable to use,\n\
980 and HISTPOS is the initial position (the position in the list\n\
981 which INITIAL-CONTENTS corresponds to).\n\
982 Positions are counted starting from 1 at the beginning of the list.\n\
983 Completion ignores case if the ambient value of\n\
984 `completion-ignore-case' is non-nil."
986 DEFUN ("completing-read", Fcompleting_read
, Scompleting_read
, 2, 6, 0,
987 0 /* See immediately above */)
988 (prompt
, table
, pred
, require_match
, init
, hist
)
989 Lisp_Object prompt
, table
, pred
, require_match
, init
, hist
;
991 Lisp_Object val
, histvar
, histpos
, position
;
993 int count
= specpdl_ptr
- specpdl
;
994 specbind (Qminibuffer_completion_table
, table
);
995 specbind (Qminibuffer_completion_predicate
, pred
);
996 specbind (Qminibuffer_completion_confirm
,
997 EQ (require_match
, Qt
) ? Qnil
: Qt
);
998 last_exact_completion
= Qnil
;
1005 position
= Fcdr (init
);
1008 CHECK_STRING (init
, 0);
1009 if (!NILP (position
))
1011 CHECK_NUMBER (position
, 0);
1012 /* Convert to distance from end of input. */
1013 pos
= XINT (position
) - XSTRING (init
)->size
;
1024 histvar
= Fcar_safe (hist
);
1025 histpos
= Fcdr_safe (hist
);
1028 histvar
= Qminibuffer_history
;
1030 XSETFASTINT (histpos
, 0);
1032 val
= read_minibuf (NILP (require_match
)
1033 ? Vminibuffer_local_completion_map
1034 : Vminibuffer_local_must_match_map
,
1035 init
, prompt
, make_number (pos
), 0,
1037 return unbind_to (count
, val
);
1040 /* Temporarily display the string M at the end of the current
1041 minibuffer contents. This is used to display things like
1042 "[No Match]" when the user requests a completion for a prefix
1043 that has no possible completions, and other quick, unobtrusive
1046 temp_echo_area_glyphs (m
)
1050 Lisp_Object oinhibit
;
1051 oinhibit
= Vinhibit_quit
;
1053 /* Clear out any old echo-area message to make way for our new thing. */
1060 Fsit_for (make_number (2), Qnil
, Qnil
);
1062 if (!NILP (Vquit_flag
))
1065 Vunread_command_events
= Fcons (make_number (quit_char
), Qnil
);
1067 Vinhibit_quit
= oinhibit
;
1070 Lisp_Object
Fminibuffer_completion_help ();
1071 Lisp_Object
assoc_for_completion ();
1072 /* A subroutine of Fintern_soft. */
1073 extern Lisp_Object
oblookup ();
1076 /* Test whether TXT is an exact completion. */
1078 test_completion (txt
)
1083 if (CONSP (Vminibuffer_completion_table
)
1084 || NILP (Vminibuffer_completion_table
))
1085 return assoc_for_completion (txt
, Vminibuffer_completion_table
);
1086 else if (VECTORP (Vminibuffer_completion_table
))
1088 /* Bypass intern-soft as that loses for nil */
1089 tem
= oblookup (Vminibuffer_completion_table
,
1090 XSTRING (txt
)->data
, XSTRING (txt
)->size
);
1093 else if (!NILP (Vminibuffer_completion_predicate
))
1094 return call1 (Vminibuffer_completion_predicate
, tem
);
1099 return call3 (Vminibuffer_completion_table
, txt
,
1100 Vminibuffer_completion_predicate
, Qlambda
);
1104 * 0 no possible completion
1105 * 1 was already an exact and unique completion
1106 * 3 was already an exact completion
1107 * 4 completed to an exact completion
1108 * 5 some completion happened
1109 * 6 no completion happened
1114 Lisp_Object completion
, tem
;
1117 struct gcpro gcpro1
, gcpro2
;
1119 completion
= Ftry_completion (Fbuffer_string (), Vminibuffer_completion_table
,
1120 Vminibuffer_completion_predicate
);
1121 last
= last_exact_completion
;
1122 last_exact_completion
= Qnil
;
1124 GCPRO2 (completion
, last
);
1126 if (NILP (completion
))
1129 temp_echo_area_glyphs (" [No match]");
1134 if (EQ (completion
, Qt
)) /* exact and unique match */
1141 tem
= Fstring_equal (completion
, Fbuffer_string());
1142 if (completedp
= NILP (tem
))
1144 Ferase_buffer (); /* Some completion happened */
1145 Finsert (1, &completion
);
1148 /* It did find a match. Do we match some possibility exactly now? */
1149 tem
= test_completion (Fbuffer_string ());
1152 /* not an exact match */
1157 Fminibuffer_completion_help ();
1159 temp_echo_area_glyphs (" [Next char not unique]");
1162 else if (completedp
)
1167 /* If the last exact completion and this one were the same,
1168 it means we've already given a "Complete but not unique"
1169 message and the user's hit TAB again, so now we give him help. */
1170 last_exact_completion
= completion
;
1173 tem
= Fbuffer_string ();
1174 if (!NILP (Fequal (tem
, last
)))
1175 Fminibuffer_completion_help ();
1181 /* Like assoc but assumes KEY is a string, and ignores case if appropriate. */
1184 assoc_for_completion (key
, list
)
1185 register Lisp_Object key
;
1188 register Lisp_Object tail
;
1190 if (completion_ignore_case
)
1191 key
= Fupcase (key
);
1193 for (tail
= list
; !NILP (tail
); tail
= Fcdr (tail
))
1195 register Lisp_Object elt
, tem
, thiscar
;
1197 if (!CONSP (elt
)) continue;
1198 thiscar
= Fcar (elt
);
1199 if (!STRINGP (thiscar
))
1201 if (completion_ignore_case
)
1202 thiscar
= Fupcase (thiscar
);
1203 tem
= Fequal (thiscar
, key
);
1204 if (!NILP (tem
)) return elt
;
1210 DEFUN ("minibuffer-complete", Fminibuffer_complete
, Sminibuffer_complete
, 0, 0, "",
1211 "Complete the minibuffer contents as far as possible.\n\
1212 Return nil if there is no valid completion, else t.\n\
1213 If no characters can be completed, display a list of possible completions.\n\
1214 If you repeat this command after it displayed such a list,\n\
1215 scroll the window of possible completions.")
1219 Lisp_Object window
, tem
;
1221 /* If the previous command was not this, then mark the completion
1223 if (! EQ (last_command
, this_command
))
1224 Vminibuf_scroll_window
= Qnil
;
1226 window
= Vminibuf_scroll_window
;
1227 /* If there's a fresh completion window with a live buffer,
1228 and this command is repeated, scroll that window. */
1229 if (! NILP (window
) && ! NILP (XWINDOW (window
)->buffer
)
1230 && !NILP (XBUFFER (XWINDOW (window
)->buffer
)->name
))
1232 struct buffer
*obuf
= current_buffer
;
1234 Fset_buffer (XWINDOW (window
)->buffer
);
1235 tem
= Fpos_visible_in_window_p (make_number (ZV
), window
);
1237 /* If end is in view, scroll up to the beginning. */
1238 Fset_window_start (window
, BEGV
, Qnil
);
1240 /* Else scroll down one screen. */
1241 Fscroll_other_window (Qnil
);
1243 set_buffer_internal (obuf
);
1247 i
= do_completion ();
1254 temp_echo_area_glyphs (" [Sole completion]");
1258 temp_echo_area_glyphs (" [Complete, but not unique]");
1265 /* Subroutines of Fminibuffer_complete_and_exit. */
1267 /* This one is called by internal_condition_case to do the real work. */
1270 complete_and_exit_1 ()
1272 return make_number (do_completion ());
1275 /* This one is called by internal_condition_case if an error happens.
1276 Pretend the current value is an exact match. */
1279 complete_and_exit_2 (ignore
)
1282 return make_number (1);
1285 DEFUN ("minibuffer-complete-and-exit", Fminibuffer_complete_and_exit
,
1286 Sminibuffer_complete_and_exit
, 0, 0, "",
1287 "If the minibuffer contents is a valid completion then exit.\n\
1288 Otherwise try to complete it. If completion leads to a valid completion,\n\
1289 a repetition of this command will exit.")
1295 /* Allow user to specify null string */
1299 if (!NILP (test_completion (Fbuffer_string ())))
1302 /* Call do_completion, but ignore errors. */
1303 val
= internal_condition_case (complete_and_exit_1
, Qerror
,
1304 complete_and_exit_2
);
1314 if (!NILP (Vminibuffer_completion_confirm
))
1316 temp_echo_area_glyphs (" [Confirm]");
1326 Fthrow (Qexit
, Qnil
);
1330 DEFUN ("minibuffer-complete-word", Fminibuffer_complete_word
, Sminibuffer_complete_word
,
1332 "Complete the minibuffer contents at most a single word.\n\
1333 After one word is completed as much as possible, a space or hyphen\n\
1334 is added, provided that matches some possible completion.\n\
1335 Return nil if there is no valid completion, else t.")
1338 Lisp_Object completion
, tem
;
1340 register unsigned char *completion_string
;
1341 struct gcpro gcpro1
, gcpro2
;
1343 /* We keep calling Fbuffer_string rather than arrange for GC to
1344 hold onto a pointer to one of the strings thus made. */
1346 completion
= Ftry_completion (Fbuffer_string (),
1347 Vminibuffer_completion_table
,
1348 Vminibuffer_completion_predicate
);
1349 if (NILP (completion
))
1352 temp_echo_area_glyphs (" [No match]");
1355 if (EQ (completion
, Qt
))
1358 #if 0 /* How the below code used to look, for reference. */
1359 tem
= Fbuffer_string ();
1360 b
= XSTRING (tem
)->data
;
1361 i
= ZV
- 1 - XSTRING (completion
)->size
;
1362 p
= XSTRING (completion
)->data
;
1364 0 <= scmp (b
, p
, ZV
- 1))
1367 /* Set buffer to longest match of buffer tail and completion head. */
1368 while (0 <= scmp (b
+ i
, p
, ZV
- 1 - i
))
1370 del_range (1, i
+ 1);
1373 #else /* Rewritten code */
1375 register unsigned char *buffer_string
;
1376 int buffer_length
, completion_length
;
1378 tem
= Fbuffer_string ();
1379 GCPRO2 (completion
, tem
);
1380 /* If reading a file name,
1381 expand any $ENVVAR refs in the buffer and in TEM. */
1382 if (EQ (Vminibuffer_completion_table
, Qread_file_name_internal
))
1384 Lisp_Object substituted
;
1385 substituted
= Fsubstitute_in_file_name (tem
);
1386 if (! EQ (substituted
, tem
))
1390 insert_from_string (tem
, 0, XSTRING (tem
)->size
, 0);
1393 buffer_string
= XSTRING (tem
)->data
;
1394 completion_string
= XSTRING (completion
)->data
;
1395 buffer_length
= XSTRING (tem
)->size
; /* ie ZV - BEGV */
1396 completion_length
= XSTRING (completion
)->size
;
1397 i
= buffer_length
- completion_length
;
1398 /* Mly: I don't understand what this is supposed to do AT ALL */
1400 0 <= scmp (buffer_string
, completion_string
, buffer_length
))
1402 /* Set buffer to longest match of buffer tail and completion head. */
1406 while (0 <= scmp (buffer_string
++, completion_string
, buffer_length
--))
1408 del_range (1, i
+ 1);
1413 #endif /* Rewritten code */
1416 /* If completion finds next char not unique,
1417 consider adding a space or a hyphen. */
1418 if (i
== XSTRING (completion
)->size
)
1420 GCPRO1 (completion
);
1421 tem
= Ftry_completion (concat2 (Fbuffer_string (), build_string (" ")),
1422 Vminibuffer_completion_table
,
1423 Vminibuffer_completion_predicate
);
1430 GCPRO1 (completion
);
1432 Ftry_completion (concat2 (Fbuffer_string (), build_string ("-")),
1433 Vminibuffer_completion_table
,
1434 Vminibuffer_completion_predicate
);
1442 /* Now find first word-break in the stuff found by completion.
1443 i gets index in string of where to stop completing. */
1445 completion_string
= XSTRING (completion
)->data
;
1447 for (; i
< XSTRING (completion
)->size
; i
++)
1448 if (SYNTAX (completion_string
[i
]) != Sword
) break;
1449 if (i
< XSTRING (completion
)->size
)
1452 /* If got no characters, print help for user. */
1457 Fminibuffer_completion_help ();
1461 /* Otherwise insert in minibuffer the chars we got */
1464 insert_from_string (completion
, 0, i
, 1);
1468 DEFUN ("display-completion-list", Fdisplay_completion_list
, Sdisplay_completion_list
,
1470 "Display the list of completions, COMPLETIONS, using `standard-output'.\n\
1471 Each element may be just a symbol or string\n\
1472 or may be a list of two strings to be printed as if concatenated.\n\
1473 `standard-output' must be a buffer.\n\
1474 At the end, run the normal hook `completion-setup-hook'.\n\
1475 It can find the completion buffer in `standard-output'.")
1477 Lisp_Object completions
;
1479 register Lisp_Object tail
, elt
;
1482 struct gcpro gcpro1
;
1483 struct buffer
*old
= current_buffer
;
1486 /* Note that (when it matters) every variable
1487 points to a non-string that is pointed to by COMPLETIONS. */
1488 GCPRO1 (completions
);
1490 if (BUFFERP (Vstandard_output
))
1491 set_buffer_internal (XBUFFER (Vstandard_output
));
1493 if (NILP (completions
))
1494 write_string ("There are no possible completions of what you have typed.",
1498 write_string ("Possible completions are:", -1);
1499 for (tail
= completions
, i
= 0; !NILP (tail
); tail
= Fcdr (tail
), i
++)
1505 /* Compute the length of this element. */
1509 CHECK_STRING (tem
, 0);
1510 length
= XINT (XSTRING (tem
)->size
);
1512 tem
= Fcar (Fcdr (elt
));
1513 CHECK_STRING (tem
, 0);
1514 length
+= XINT (XSTRING (tem
)->size
);
1518 CHECK_STRING (elt
, 0);
1519 length
= XINT (XSTRING (elt
)->size
);
1522 /* This does a bad job for narrower than usual windows.
1523 Sadly, the window it will appear in is not known
1524 until after the text has been made. */
1526 /* If the previous completion was very wide,
1527 or we have two on this line already,
1528 don't put another on the same line. */
1529 if (column
> 33 || first
1530 /* If this is really wide, don't put it second on a line. */
1531 || column
> 0 && length
> 45)
1536 /* Otherwise advance to column 35. */
1539 if (BUFFERP (Vstandard_output
))
1541 tem
= Findent_to (make_number (35), make_number (2));
1542 column
= XINT (tem
);
1548 write_string (" ", -1);
1551 while (column
< 35);
1555 /* Output this element and update COLUMN. */
1558 Fprinc (Fcar (elt
), Qnil
);
1559 Fprinc (Fcar (Fcdr (elt
)), Qnil
);
1566 /* If output is to a buffer, recompute COLUMN in a way
1567 that takes account of character widths. */
1568 if (BUFFERP (Vstandard_output
))
1570 tem
= Fcurrent_column ();
1571 column
= XINT (tem
);
1580 if (BUFFERP (Vstandard_output
))
1581 set_buffer_internal (old
);
1583 if (!NILP (Vrun_hooks
))
1584 call1 (Vrun_hooks
, intern ("completion-setup-hook"));
1589 DEFUN ("minibuffer-completion-help", Fminibuffer_completion_help
, Sminibuffer_completion_help
,
1591 "Display a list of possible completions of the current minibuffer contents.")
1594 Lisp_Object completions
;
1596 message ("Making completion list...");
1597 completions
= Fall_completions (Fbuffer_string (),
1598 Vminibuffer_completion_table
,
1599 Vminibuffer_completion_predicate
,
1601 echo_area_glyphs
= 0;
1603 if (NILP (completions
))
1606 temp_echo_area_glyphs (" [No completions]");
1609 internal_with_output_to_temp_buffer ("*Completions*",
1610 Fdisplay_completion_list
,
1611 Fsort (completions
, Qstring_lessp
));
1615 DEFUN ("self-insert-and-exit", Fself_insert_and_exit
, Sself_insert_and_exit
, 0, 0, "",
1616 "Terminate minibuffer input.")
1619 if (INTEGERP (last_command_char
))
1620 internal_self_insert (last_command_char
, 0);
1624 Fthrow (Qexit
, Qnil
);
1627 DEFUN ("exit-minibuffer", Fexit_minibuffer
, Sexit_minibuffer
, 0, 0, "",
1628 "Terminate this minibuffer argument.")
1631 Fthrow (Qexit
, Qnil
);
1634 DEFUN ("minibuffer-depth", Fminibuffer_depth
, Sminibuffer_depth
, 0, 0, 0,
1635 "Return current depth of activations of minibuffer, a nonnegative integer.")
1638 return make_number (minibuf_level
);
1641 DEFUN ("minibuffer-prompt", Fminibuffer_prompt
, Sminibuffer_prompt
, 0, 0, 0,
1642 "Return the prompt string of the currently-active minibuffer.\n\
1643 If no minibuffer is active, return nil.")
1646 return Fcopy_sequence (minibuf_prompt
);
1649 DEFUN ("minibuffer-prompt-width", Fminibuffer_prompt_width
,
1650 Sminibuffer_prompt_width
, 0, 0, 0,
1651 "Return the display width of the minibuffer prompt.")
1655 XSETFASTINT (width
, minibuf_prompt_width
);
1659 init_minibuf_once ()
1661 Vminibuffer_list
= Qnil
;
1662 staticpro (&Vminibuffer_list
);
1668 minibuf_prompt
= Qnil
;
1669 staticpro (&minibuf_prompt
);
1671 minibuf_save_list
= Qnil
;
1672 staticpro (&minibuf_save_list
);
1674 Qread_file_name_internal
= intern ("read-file-name-internal");
1675 staticpro (&Qread_file_name_internal
);
1677 Qminibuffer_completion_table
= intern ("minibuffer-completion-table");
1678 staticpro (&Qminibuffer_completion_table
);
1680 Qminibuffer_completion_confirm
= intern ("minibuffer-completion-confirm");
1681 staticpro (&Qminibuffer_completion_confirm
);
1683 Qminibuffer_completion_predicate
= intern ("minibuffer-completion-predicate");
1684 staticpro (&Qminibuffer_completion_predicate
);
1686 staticpro (&last_exact_completion
);
1687 last_exact_completion
= Qnil
;
1689 staticpro (&last_minibuf_string
);
1690 last_minibuf_string
= Qnil
;
1692 Quser_variable_p
= intern ("user-variable-p");
1693 staticpro (&Quser_variable_p
);
1695 Qminibuffer_history
= intern ("minibuffer-history");
1696 staticpro (&Qminibuffer_history
);
1698 Qminibuffer_setup_hook
= intern ("minibuffer-setup-hook");
1699 staticpro (&Qminibuffer_setup_hook
);
1701 Qminibuffer_exit_hook
= intern ("minibuffer-exit-hook");
1702 staticpro (&Qminibuffer_exit_hook
);
1704 DEFVAR_LISP ("minibuffer-setup-hook", &Vminibuffer_setup_hook
,
1705 "Normal hook run just after entry to minibuffer.");
1706 Vminibuffer_setup_hook
= Qnil
;
1708 DEFVAR_LISP ("minibuffer-exit-hook", &Vminibuffer_exit_hook
,
1709 "Normal hook run just after exit from minibuffer.");
1710 Vminibuffer_exit_hook
= Qnil
;
1712 DEFVAR_BOOL ("completion-auto-help", &auto_help
,
1713 "*Non-nil means automatically provide help for invalid completion input.");
1716 DEFVAR_BOOL ("completion-ignore-case", &completion_ignore_case
,
1717 "Non-nil means don't consider case significant in completion.");
1718 completion_ignore_case
= 0;
1720 DEFVAR_BOOL ("enable-recursive-minibuffers", &enable_recursive_minibuffers
,
1721 "*Non-nil means to allow minibuffer commands while in the minibuffer.\n\
1722 More precisely, this variable makes a difference when the minibuffer window\n\
1723 is the selected window. If you are in some other window, minibuffer commands\n\
1724 are allowed even if a minibuffer is active.");
1725 enable_recursive_minibuffers
= 0;
1727 DEFVAR_LISP ("minibuffer-completion-table", &Vminibuffer_completion_table
,
1728 "Alist or obarray used for completion in the minibuffer.\n\
1729 This becomes the ALIST argument to `try-completion' and `all-completion'.\n\
1731 The value may alternatively be a function, which is given three arguments:\n\
1732 STRING, the current buffer contents;\n\
1733 PREDICATE, the predicate for filtering possible matches;\n\
1734 CODE, which says what kind of things to do.\n\
1735 CODE can be nil, t or `lambda'.\n\
1736 nil means to return the best completion of STRING, or nil if there is none.\n\
1737 t means to return a list of all possible completions of STRING.\n\
1738 `lambda' means to return t if STRING is a valid completion as it stands.");
1739 Vminibuffer_completion_table
= Qnil
;
1741 DEFVAR_LISP ("minibuffer-completion-predicate", &Vminibuffer_completion_predicate
,
1742 "Within call to `completing-read', this holds the PREDICATE argument.");
1743 Vminibuffer_completion_predicate
= Qnil
;
1745 DEFVAR_LISP ("minibuffer-completion-confirm", &Vminibuffer_completion_confirm
,
1746 "Non-nil => demand confirmation of completion before exiting minibuffer.");
1747 Vminibuffer_completion_confirm
= Qnil
;
1749 DEFVAR_LISP ("minibuffer-help-form", &Vminibuffer_help_form
,
1750 "Value that `help-form' takes on inside the minibuffer.");
1751 Vminibuffer_help_form
= Qnil
;
1753 DEFVAR_LISP ("minibuffer-history-variable", &Vminibuffer_history_variable
,
1754 "History list symbol to add minibuffer values to.\n\
1755 Each minibuffer output is added with\n\
1756 (set minibuffer-history-variable\n\
1757 (cons STRING (symbol-value minibuffer-history-variable)))");
1758 XSETFASTINT (Vminibuffer_history_variable
, 0);
1760 DEFVAR_LISP ("minibuffer-history-position", &Vminibuffer_history_position
,
1761 "Current position of redoing in the history list.");
1762 Vminibuffer_history_position
= Qnil
;
1764 DEFVAR_BOOL ("minibuffer-auto-raise", &minibuffer_auto_raise
,
1765 "*Non-nil means entering the minibuffer raises the minibuffer's frame.");
1766 minibuffer_auto_raise
= 0;
1768 DEFVAR_LISP ("completion-regexp-list", &Vcompletion_regexp_list
,
1769 "List of regexps that should restrict possible completions.");
1770 Vcompletion_regexp_list
= Qnil
;
1772 defsubr (&Sread_from_minibuffer
);
1773 defsubr (&Seval_minibuffer
);
1774 defsubr (&Sread_minibuffer
);
1775 defsubr (&Sread_string
);
1776 defsubr (&Sread_command
);
1777 defsubr (&Sread_variable
);
1778 defsubr (&Sread_buffer
);
1779 defsubr (&Sread_no_blanks_input
);
1780 defsubr (&Sminibuffer_depth
);
1781 defsubr (&Sminibuffer_prompt
);
1782 defsubr (&Sminibuffer_prompt_width
);
1784 defsubr (&Stry_completion
);
1785 defsubr (&Sall_completions
);
1786 defsubr (&Scompleting_read
);
1787 defsubr (&Sminibuffer_complete
);
1788 defsubr (&Sminibuffer_complete_word
);
1789 defsubr (&Sminibuffer_complete_and_exit
);
1790 defsubr (&Sdisplay_completion_list
);
1791 defsubr (&Sminibuffer_completion_help
);
1793 defsubr (&Sself_insert_and_exit
);
1794 defsubr (&Sexit_minibuffer
);
1800 initial_define_key (Vminibuffer_local_map
, Ctl ('g'),
1801 "abort-recursive-edit");
1802 initial_define_key (Vminibuffer_local_map
, Ctl ('m'),
1804 initial_define_key (Vminibuffer_local_map
, Ctl ('j'),
1807 initial_define_key (Vminibuffer_local_ns_map
, Ctl ('g'),
1808 "abort-recursive-edit");
1809 initial_define_key (Vminibuffer_local_ns_map
, Ctl ('m'),
1811 initial_define_key (Vminibuffer_local_ns_map
, Ctl ('j'),
1814 initial_define_key (Vminibuffer_local_ns_map
, ' ',
1816 initial_define_key (Vminibuffer_local_ns_map
, '\t',
1818 initial_define_key (Vminibuffer_local_ns_map
, '?',
1819 "self-insert-and-exit");
1821 initial_define_key (Vminibuffer_local_completion_map
, Ctl ('g'),
1822 "abort-recursive-edit");
1823 initial_define_key (Vminibuffer_local_completion_map
, Ctl ('m'),
1825 initial_define_key (Vminibuffer_local_completion_map
, Ctl ('j'),
1828 initial_define_key (Vminibuffer_local_completion_map
, '\t',
1829 "minibuffer-complete");
1830 initial_define_key (Vminibuffer_local_completion_map
, ' ',
1831 "minibuffer-complete-word");
1832 initial_define_key (Vminibuffer_local_completion_map
, '?',
1833 "minibuffer-completion-help");
1835 initial_define_key (Vminibuffer_local_must_match_map
, Ctl ('g'),
1836 "abort-recursive-edit");
1837 initial_define_key (Vminibuffer_local_must_match_map
, Ctl ('m'),
1838 "minibuffer-complete-and-exit");
1839 initial_define_key (Vminibuffer_local_must_match_map
, Ctl ('j'),
1840 "minibuffer-complete-and-exit");
1841 initial_define_key (Vminibuffer_local_must_match_map
, '\t',
1842 "minibuffer-complete");
1843 initial_define_key (Vminibuffer_local_must_match_map
, ' ',
1844 "minibuffer-complete-word");
1845 initial_define_key (Vminibuffer_local_must_match_map
, '?',
1846 "minibuffer-completion-help");