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))
32 /* List of buffers for use as minibuffers.
33 The first element of the list is used for the outermost minibuffer invocation,
34 the next element is used for a recursive minibuffer invocation, etc.
35 The list is extended at the end as deeped minibuffer recursions are encountered. */
36 Lisp_Object Vminibuffer_list
;
38 struct minibuf_save_data
42 Lisp_Object help_form
;
43 Lisp_Object current_prefix_arg
;
44 Lisp_Object history_position
;
45 Lisp_Object history_variable
;
48 int minibuf_save_vector_size
;
49 struct minibuf_save_data
*minibuf_save_vector
;
51 /* Depth in minibuffer invocations. */
54 /* Nonzero means display completion help for invalid input */
57 /* Fread_minibuffer leaves the input, as a string, here */
58 Lisp_Object last_minibuf_string
;
60 /* Nonzero means let functions called when within a minibuffer
61 invoke recursive minibuffers (to read arguments, or whatever) */
62 int enable_recursive_minibuffers
;
64 /* help-form is bound to this while in the minibuffer. */
66 Lisp_Object Vminibuffer_help_form
;
68 /* Variable which is the history list to add minibuffer values to. */
70 Lisp_Object Vminibuffer_history_variable
;
72 /* Current position in the history list (adjusted by M-n and M-p). */
74 Lisp_Object Vminibuffer_history_position
;
76 Lisp_Object Qminibuffer_history
;
78 /* Nonzero means completion ignores case. */
80 int completion_ignore_case
;
82 /* If last completion attempt reported "Complete but not unique"
83 then this is the string completed then; otherwise this is nil. */
85 static Lisp_Object last_exact_completion
;
87 Lisp_Object Quser_variable_p
;
90 /* Actual minibuffer invocation. */
92 void read_minibuf_unwind ();
93 Lisp_Object
get_minibuffer ();
94 Lisp_Object
read_minibuf ();
96 /* Read from the minibuffer using keymap MAP, initial contents INITIAL
97 (a string), putting point minus BACKUP_N chars from the end of INITIAL,
98 prompting with PROMPT (a string), using history list HISTVAR
99 with initial position HISTPOS. (BACKUP_N should be <= 0.)
101 Normally return the result as a string (the text that was read),
102 but if EXPFLAG is non-nil, read it and return the object read. */
105 read_minibuf (map
, initial
, prompt
, backup_n
, expflag
, histvar
, histpos
)
109 Lisp_Object backup_n
;
114 register Lisp_Object val
;
115 int count
= specpdl_ptr
- specpdl
;
116 Lisp_Object mini_frame
;
117 struct gcpro gcpro1
, gcpro2
;
119 if (XTYPE (prompt
) != Lisp_String
)
120 prompt
= build_string ("");
122 /* Emacs in -batch mode calls minibuffer: print the prompt. */
123 if (noninteractive
&& XTYPE (prompt
) == Lisp_String
)
124 printf ("%s", XSTRING (prompt
)->data
);
126 if (!enable_recursive_minibuffers
128 && (EQ (selected_window
, minibuf_window
)))
130 || selected_frame
!= XFRAME (WINDOW_FRAME (XWINDOW (minibuf_window
)))
132 error ("Command attempted to use minibuffer while in minibuffer");
134 if (minibuf_level
== minibuf_save_vector_size
)
135 minibuf_save_vector
=
136 (struct minibuf_save_data
*)
137 xrealloc (minibuf_save_vector
,
138 (minibuf_save_vector_size
*= 2)
139 * sizeof (struct minibuf_save_data
));
140 minibuf_save_vector
[minibuf_level
].prompt
= minibuf_prompt
;
141 minibuf_save_vector
[minibuf_level
].prompt_width
= minibuf_prompt_width
;
142 minibuf_prompt_width
= 0;
143 /* >> Why is this done this way rather than binding these variables? */
144 minibuf_save_vector
[minibuf_level
].help_form
= Vhelp_form
;
145 minibuf_save_vector
[minibuf_level
].current_prefix_arg
= Vcurrent_prefix_arg
;
146 minibuf_save_vector
[minibuf_level
].history_position
= Vminibuffer_history_position
;
147 minibuf_save_vector
[minibuf_level
].history_variable
= Vminibuffer_history_variable
;
148 GCPRO2 (minibuf_save_vector
[minibuf_level
].help_form
,
149 minibuf_save_vector
[minibuf_level
].current_prefix_arg
);
151 record_unwind_protect (Fset_window_configuration
,
152 Fcurrent_window_configuration (Qnil
));
154 /* If the minibuffer window is on a different frame, save that
155 frame's configuration too. */
157 XSET (mini_frame
, Lisp_Frame
, WINDOW_FRAME (XWINDOW (minibuf_window
)));
158 if (XFRAME (mini_frame
) != selected_frame
)
159 record_unwind_protect (Fset_window_configuration
,
160 Fcurrent_window_configuration (mini_frame
));
163 val
= current_buffer
->directory
;
164 Fset_buffer (get_minibuffer (minibuf_level
));
166 /* The current buffer's default directory is usually the right thing
167 for our minibuffer here. However, if you're typing a command at
168 a minibuffer-only frame when minibuf_level is zero, then buf IS
169 the current_buffer, so reset_buffer leaves buf's default
170 directory unchanged. This is a bummer when you've just started
171 up Emacs and buf's default directory is Qnil. Here's a hack; can
172 you think of something better to do? Find another buffer with a
173 better directory, and use that one instead. */
174 if (XTYPE (val
) == Lisp_String
)
175 current_buffer
->directory
= val
;
178 Lisp_Object buf_list
;
180 for (buf_list
= Vbuffer_alist
;
182 buf_list
= XCONS (buf_list
)->cdr
)
184 Lisp_Object other_buf
= XCONS (XCONS (buf_list
)->car
)->cdr
;
186 if (XTYPE (XBUFFER (other_buf
)->directory
) == Lisp_String
)
188 current_buffer
->directory
= XBUFFER (other_buf
)->directory
;
195 Fredirect_frame_focus (Fselected_frame (), mini_frame
);
197 Fmake_local_variable (Qprint_escape_newlines
);
198 print_escape_newlines
= 1;
200 record_unwind_protect (read_minibuf_unwind
, Qnil
);
202 Vminibuf_scroll_window
= selected_window
;
203 Fset_window_buffer (minibuf_window
, Fcurrent_buffer ());
204 Fselect_window (minibuf_window
);
205 XFASTINT (XWINDOW (minibuf_window
)->hscroll
) = 0;
212 Finsert (1, &initial
);
213 if (!NILP (backup_n
) && XTYPE (backup_n
) == Lisp_Int
)
214 Fforward_char (backup_n
);
217 minibuf_prompt
= (char *) alloca (XSTRING (prompt
)->size
+ 1);
218 bcopy (XSTRING (prompt
)->data
, minibuf_prompt
, XSTRING (prompt
)->size
+ 1);
219 echo_area_glyphs
= 0;
221 Vhelp_form
= Vminibuffer_help_form
;
222 current_buffer
->keymap
= map
;
223 Vminibuffer_history_position
= histpos
;
224 Vminibuffer_history_variable
= histvar
;
226 /* ??? MCC did redraw_screen here if switching screens. */
229 /* If cursor is on the minibuffer line,
230 show the user we have exited by putting it in column 0. */
231 if ((FRAME_CURSOR_Y (selected_frame
)
232 >= XFASTINT (XWINDOW (minibuf_window
)->top
))
235 FRAME_CURSOR_X (selected_frame
) = 0;
236 update_frame (selected_frame
, 1, 1);
239 /* Make minibuffer contents into a string */
240 val
= make_buffer_string (1, Z
);
241 bcopy (GAP_END_ADDR
, XSTRING (val
)->data
+ GPT
- BEG
, Z
- GPT
);
243 /* Add the value to the appropriate history list. */
244 if (XTYPE (Vminibuffer_history_variable
) == Lisp_Symbol
245 && ! EQ (XSYMBOL (Vminibuffer_history_variable
)->value
, Qunbound
))
246 Fset (Vminibuffer_history_variable
,
247 Fcons (val
, Fsymbol_value (Vminibuffer_history_variable
)));
249 unbind_to (count
, Qnil
); /* The appropriate frame will get selected
250 in set-window-configuration. */
254 /* VAL is the string of minibuffer text. */
255 last_minibuf_string
= val
;
257 /* If Lisp form desired instead of string, parse it */
264 /* Return a buffer to be used as the minibuffer at depth `depth'.
265 depth = 0 is the lowest allowed argument, and that is the value
266 used for nonrecursive minibuffer invocations */
269 get_minibuffer (depth
)
272 Lisp_Object tail
, num
, buf
;
274 extern Lisp_Object
nconc2 ();
276 XFASTINT (num
) = depth
;
277 tail
= Fnthcdr (num
, Vminibuffer_list
);
280 tail
= Fcons (Qnil
, Qnil
);
281 Vminibuffer_list
= nconc2 (Vminibuffer_list
, tail
);
284 if (NILP (buf
) || NILP (XBUFFER (buf
)->name
))
286 sprintf (name
, " *Minibuf-%d*", depth
);
287 buf
= Fget_buffer_create (build_string (name
));
289 /* Although the buffer's name starts with a space, undo should be
291 Fbuffer_enable_undo (buf
);
293 XCONS (tail
)->car
= buf
;
296 reset_buffer (XBUFFER (buf
));
301 /* This function is called on exiting minibuffer, whether normally or not,
302 and it restores the current window, buffer, etc. */
305 read_minibuf_unwind (data
)
308 /* Erase the minibuffer we were using at this level. */
309 Fset_buffer (XWINDOW (minibuf_window
)->buffer
);
311 /* Prevent error in erase-buffer. */
312 current_buffer
->read_only
= Qnil
;
315 /* If this was a recursive minibuffer,
316 tie the minibuffer window back to the outer level minibuffer buffer */
318 /* Make sure minibuffer window is erased, not ignored */
319 windows_or_buffers_changed
++;
320 XFASTINT (XWINDOW (minibuf_window
)->last_modified
) = 0;
322 /* Restore prompt from outer minibuffer */
323 minibuf_prompt
= minibuf_save_vector
[minibuf_level
].prompt
;
324 minibuf_prompt_width
= minibuf_save_vector
[minibuf_level
].prompt_width
;
325 Vhelp_form
= minibuf_save_vector
[minibuf_level
].help_form
;
326 Vcurrent_prefix_arg
= minibuf_save_vector
[minibuf_level
].current_prefix_arg
;
327 Vminibuffer_history_position
328 = minibuf_save_vector
[minibuf_level
].history_position
;
329 Vminibuffer_history_variable
330 = minibuf_save_vector
[minibuf_level
].history_variable
;
334 /* This comment supplies the doc string for read-from-minibuffer,
335 for make-docfile to see. We cannot put this in the real DEFUN
336 due to limits in the Unix cpp.
338 DEFUN ("read-from-minibuffer", Fread_from_minibuffer, Sread_from_minibuffer, 1, 5, 0,
339 "Read a string from the minibuffer, prompting with string PROMPT.\n\
340 If optional second arg INITIAL-CONTENTS is non-nil, it is a string\n\
341 to be inserted into the minibuffer before reading input.\n\
342 If INITIAL-CONTENTS is (STRING . POSITION), the initial input\n\
343 is STRING, but point is placed POSITION characters into the string.\n\
344 Third arg KEYMAP is a keymap to use whilst reading;\n\
345 if omitted or nil, the default is `minibuffer-local-map'.\n\
346 If fourth arg READ is non-nil, then interpret the result as a lisp object\n\
347 and return that object:\n\
348 in other words, do `(car (read-from-string INPUT-STRING))'\n\
349 Fifth arg HIST, if non-nil, specifies a history list\n\
350 and optionally the initial position in the list.\n\
351 It can be a symbol, which is the history list variable to use,\n\
352 or it can be a cons cell (HISTVAR . HISTPOS).\n\
353 In that case, HISTVAR is the history list variable to use,\n\
354 and HISTPOS is the initial position (the position in the list\n\
355 which INITIAL-CONTENTS corresponds to).\n\
356 Positions are counted starting from 1 at the beginning of the list."
359 DEFUN ("read-from-minibuffer", Fread_from_minibuffer
, Sread_from_minibuffer
, 1, 5, 0,
360 0 /* See immediately above */)
361 (prompt
, initial_input
, keymap
, read
, hist
)
362 Lisp_Object prompt
, initial_input
, keymap
, read
, hist
;
365 Lisp_Object histvar
, histpos
, position
;
368 CHECK_STRING (prompt
, 0);
369 if (!NILP (initial_input
))
371 if (XTYPE (initial_input
) == Lisp_Cons
)
373 position
= Fcdr (initial_input
);
374 initial_input
= Fcar (initial_input
);
376 CHECK_STRING (initial_input
, 1);
377 if (!NILP (position
))
379 CHECK_NUMBER (position
, 0);
380 /* Convert to distance from end of input. */
381 pos
= XINT (position
) - 1 - XSTRING (initial_input
)->size
;
386 keymap
= Vminibuffer_local_map
;
388 keymap
= get_keymap (keymap
,2);
390 if (XTYPE (hist
) == Lisp_Symbol
)
397 histvar
= Fcar_safe (hist
);
398 histpos
= Fcdr_safe (hist
);
401 histvar
= Qminibuffer_history
;
403 XFASTINT (histpos
) = 0;
405 return read_minibuf (keymap
, initial_input
, prompt
,
406 make_number (pos
), !NILP (read
), histvar
, histpos
);
409 DEFUN ("read-minibuffer", Fread_minibuffer
, Sread_minibuffer
, 1, 2, 0,
410 "Return a Lisp object read using the minibuffer.\n\
411 Prompt with PROMPT. If non-nil, optional second arg INITIAL-CONTENTS\n\
412 is a string to insert in the minibuffer before reading.")
413 (prompt
, initial_contents
)
414 Lisp_Object prompt
, initial_contents
;
416 CHECK_STRING (prompt
, 0);
417 if (!NILP (initial_contents
))
418 CHECK_STRING (initial_contents
, 1);
419 return read_minibuf (Vminibuffer_local_map
, initial_contents
,
420 prompt
, Qnil
, 1, Qminibuffer_history
, make_number (0));
423 DEFUN ("eval-minibuffer", Feval_minibuffer
, Seval_minibuffer
, 1, 2, 0,
424 "Return value of Lisp expression read using the minibuffer.\n\
425 Prompt with PROMPT. If non-nil, optional second arg INITIAL-CONTENTS\n\
426 is a string to insert in the minibuffer before reading.")
427 (prompt
, initial_contents
)
428 Lisp_Object prompt
, initial_contents
;
430 return Feval (Fread_minibuffer (prompt
, initial_contents
));
433 /* Functions that use the minibuffer to read various things. */
435 DEFUN ("read-string", Fread_string
, Sread_string
, 1, 2, 0,
436 "Read a string from the minibuffer, prompting with string PROMPT.\n\
437 If non-nil second arg INITIAL-INPUT is a string to insert before reading.")
438 (prompt
, initial_input
)
439 Lisp_Object prompt
, initial_input
;
441 return Fread_from_minibuffer (prompt
, initial_input
, Qnil
, Qnil
, Qnil
);
444 DEFUN ("read-no-blanks-input", Fread_no_blanks_input
, Sread_no_blanks_input
, 2, 2, 0,
445 "Args PROMPT and INIT, strings. Read a string from the terminal, not allowing blanks.\n\
446 Prompt with PROMPT, and provide INIT as an initial value of the input string.")
448 Lisp_Object prompt
, init
;
450 CHECK_STRING (prompt
, 0);
452 CHECK_STRING (init
, 1);
454 return read_minibuf (Vminibuffer_local_ns_map
, init
, prompt
, Qnil
, 0,
455 Qminibuffer_history
, make_number (0));
458 DEFUN ("read-command", Fread_command
, Sread_command
, 1, 1, 0,
459 "One arg PROMPT, a string. Read the name of a command and return as a symbol.\n\
460 Prompts with PROMPT.")
464 return Fintern (Fcompleting_read (prompt
, Vobarray
, Qcommandp
, Qt
, Qnil
, Qnil
),
469 DEFUN ("read-function", Fread_function
, Sread_function
, 1, 1, 0,
470 "One arg PROMPT, a string. Read the name of a function and return as a symbol.\n\
471 Prompts with PROMPT.")
475 return Fintern (Fcompleting_read (prompt
, Vobarray
, Qfboundp
, Qt
, Qnil
, Qnil
),
480 DEFUN ("read-variable", Fread_variable
, Sread_variable
, 1, 1, 0,
481 "One arg PROMPT, a string. Read the name of a user variable and return\n\
482 it as a symbol. Prompts with PROMPT.\n\
483 A user variable is one whose documentation starts with a `*' character.")
487 return Fintern (Fcompleting_read (prompt
, Vobarray
,
488 Quser_variable_p
, Qt
, Qnil
, Qnil
),
492 DEFUN ("read-buffer", Fread_buffer
, Sread_buffer
, 1, 3, 0,
493 "One arg PROMPT, a string. Read the name of a buffer and return as a string.\n\
494 Prompts with PROMPT.\n\
495 Optional second arg is value to return if user enters an empty line.\n\
496 If optional third arg REQUIRE-MATCH is non-nil, only existing buffer names are allowed.")
497 (prompt
, def
, require_match
)
498 Lisp_Object prompt
, def
, require_match
;
504 if (XTYPE (def
) == Lisp_Buffer
)
505 def
= XBUFFER (def
)->name
;
508 args
[0] = build_string ("%s(default %s) ");
511 prompt
= Fformat (3, args
);
514 tem
= Fcompleting_read (prompt
, Vbuffer_alist
, Qnil
, require_match
, Qnil
, Qnil
);
516 if (XSTRING (tem
)->size
)
521 DEFUN ("try-completion", Ftry_completion
, Stry_completion
, 2, 3, 0,
522 "Return common substring of all completions of STRING in ALIST.\n\
523 Each car of each element of ALIST is tested to see if it begins with STRING.\n\
524 All that match are compared together; the longest initial sequence\n\
525 common to all matches is returned as a string.\n\
526 If there is no match at all, nil is returned.\n\
527 For an exact match, t is returned.\n\
529 ALIST can be an obarray instead of an alist.\n\
530 Then the print names of all symbols in the obarray are the possible matches.\n\
532 ALIST can also be a function to do the completion itself.\n\
533 It receives three arguments: the values STRING, PREDICATE and nil.\n\
534 Whatever it returns becomes the value of `try-completion'.\n\
536 If optional third argument PREDICATE is non-nil,\n\
537 it is used to test each possible match.\n\
538 The match is a candidate only if PREDICATE returns non-nil.\n\
539 The argument given to PREDICATE is the alist element or the symbol from the obarray.")
540 (string
, alist
, pred
)
541 Lisp_Object string
, alist
, pred
;
543 Lisp_Object bestmatch
, tail
, elt
, eltstring
;
545 int compare
, matchsize
;
546 int list
= CONSP (alist
) || NILP (alist
);
549 Lisp_Object bucket
, zero
, end
, tem
;
550 struct gcpro gcpro1
, gcpro2
, gcpro3
, gcpro4
;
552 CHECK_STRING (string
, 0);
553 if (!list
&& XTYPE (alist
) != Lisp_Vector
)
554 return call3 (alist
, string
, pred
, Qnil
);
558 /* If ALIST is not a list, set TAIL just for gc pro. */
563 obsize
= XVECTOR (alist
)->size
;
564 bucket
= XVECTOR (alist
)->contents
[index
];
569 /* Get the next element of the alist or obarray. */
570 /* Exit the loop if the elements are all used up. */
571 /* elt gets the alist element or symbol.
572 eltstring gets the name to check as a completion. */
579 eltstring
= Fcar (elt
);
584 if (XFASTINT (bucket
) != 0)
587 eltstring
= Fsymbol_name (elt
);
588 if (XSYMBOL (bucket
)->next
)
589 XSETSYMBOL (bucket
, XSYMBOL (bucket
)->next
);
591 XFASTINT (bucket
) = 0;
593 else if (++index
>= obsize
)
597 bucket
= XVECTOR (alist
)->contents
[index
];
602 /* Is this element a possible completion? */
604 if (XTYPE (eltstring
) == Lisp_String
&&
605 XSTRING (string
)->size
<= XSTRING (eltstring
)->size
&&
606 0 > scmp (XSTRING (eltstring
)->data
, XSTRING (string
)->data
,
607 XSTRING (string
)->size
))
610 /* Ignore this element if there is a predicate
611 and the predicate doesn't like it. */
615 if (EQ (pred
, Qcommandp
))
616 tem
= Fcommandp (elt
);
619 GCPRO4 (tail
, string
, eltstring
, bestmatch
);
620 tem
= call1 (pred
, elt
);
623 if (NILP (tem
)) continue;
626 /* Update computation of how much all possible completions match */
629 if (NILP (bestmatch
))
630 bestmatch
= eltstring
, bestmatchsize
= XSTRING (eltstring
)->size
;
633 compare
= min (bestmatchsize
, XSTRING (eltstring
)->size
);
634 matchsize
= scmp (XSTRING (bestmatch
)->data
,
635 XSTRING (eltstring
)->data
,
639 if (completion_ignore_case
)
641 /* If this is an exact match except for case,
642 use it as the best match rather than one that is not an
643 exact match. This way, we get the case pattern
644 of the actual match. */
645 if ((matchsize
== XSTRING (eltstring
)->size
646 && matchsize
< XSTRING (bestmatch
)->size
)
648 /* If there is more than one exact match ignoring case,
649 and one of them is exact including case,
651 /* If there is no exact match ignoring case,
652 prefer a match that does not change the case
654 ((matchsize
== XSTRING (eltstring
)->size
)
656 (matchsize
== XSTRING (bestmatch
)->size
)
657 && !bcmp (XSTRING (eltstring
)->data
,
658 XSTRING (string
)->data
, XSTRING (string
)->size
)
659 && bcmp (XSTRING (bestmatch
)->data
,
660 XSTRING (string
)->data
, XSTRING (string
)->size
)))
661 bestmatch
= eltstring
;
663 bestmatchsize
= matchsize
;
668 if (NILP (bestmatch
))
669 return Qnil
; /* No completions found */
670 /* If we are ignoring case, and there is no exact match,
671 and no additional text was supplied,
672 don't change the case of what the user typed. */
673 if (completion_ignore_case
&& bestmatchsize
== XSTRING (string
)->size
674 && XSTRING (bestmatch
)->size
> bestmatchsize
)
677 /* Return t if the supplied string is an exact match (counting case);
678 it does not require any change to be made. */
679 if (matchcount
== 1 && bestmatchsize
== XSTRING (string
)->size
680 && !bcmp (XSTRING (bestmatch
)->data
, XSTRING (string
)->data
,
684 XFASTINT (zero
) = 0; /* Else extract the part in which */
685 XFASTINT (end
) = bestmatchsize
; /* all completions agree */
686 return Fsubstring (bestmatch
, zero
, end
);
689 /* Compare exactly LEN chars of strings at S1 and S2,
690 ignoring case if appropriate.
691 Return -1 if strings match,
692 else number of chars that match at the beginning. */
695 register char *s1
, *s2
;
698 register int l
= len
;
700 if (completion_ignore_case
)
702 while (l
&& DOWNCASE (*s1
++) == DOWNCASE (*s2
++))
707 while (l
&& *s1
++ == *s2
++)
715 DEFUN ("all-completions", Fall_completions
, Sall_completions
, 2, 3, 0,
716 "Search for partial matches to STRING in ALIST.\n\
717 Each car of each element of ALIST is tested to see if it begins with STRING.\n\
718 The value is a list of all the strings from ALIST that match.\n\
719 ALIST can be an obarray instead of an alist.\n\
720 Then the print names of all symbols in the obarray are the possible matches.\n\
722 ALIST can also be a function to do the completion itself.\n\
723 It receives three arguments: the values STRING, PREDICATE and t.\n\
724 Whatever it returns becomes the value of `all-completion'.\n\
726 If optional third argument PREDICATE is non-nil,\n\
727 it is used to test each possible match.\n\
728 The match is a candidate only if PREDICATE returns non-nil.\n\
729 The argument given to PREDICATE is the alist element or the symbol from the obarray.")
730 (string
, alist
, pred
)
731 Lisp_Object string
, alist
, pred
;
733 Lisp_Object tail
, elt
, eltstring
;
734 Lisp_Object allmatches
;
735 int list
= CONSP (alist
) || NILP (alist
);
737 Lisp_Object bucket
, tem
;
738 struct gcpro gcpro1
, gcpro2
, gcpro3
, gcpro4
;
740 CHECK_STRING (string
, 0);
741 if (!list
&& XTYPE (alist
) != Lisp_Vector
)
743 return call3 (alist
, string
, pred
, Qt
);
747 /* If ALIST is not a list, set TAIL just for gc pro. */
752 obsize
= XVECTOR (alist
)->size
;
753 bucket
= XVECTOR (alist
)->contents
[index
];
758 /* Get the next element of the alist or obarray. */
759 /* Exit the loop if the elements are all used up. */
760 /* elt gets the alist element or symbol.
761 eltstring gets the name to check as a completion. */
768 eltstring
= Fcar (elt
);
773 if (XFASTINT (bucket
) != 0)
776 eltstring
= Fsymbol_name (elt
);
777 if (XSYMBOL (bucket
)->next
)
778 XSETSYMBOL (bucket
, XSYMBOL (bucket
)->next
);
780 XFASTINT (bucket
) = 0;
782 else if (++index
>= obsize
)
786 bucket
= XVECTOR (alist
)->contents
[index
];
791 /* Is this element a possible completion? */
793 if (XTYPE (eltstring
) == Lisp_String
&&
794 XSTRING (string
)->size
<= XSTRING (eltstring
)->size
&&
795 XSTRING (eltstring
)->data
[0] != ' ' &&
796 0 > scmp (XSTRING (eltstring
)->data
, XSTRING (string
)->data
,
797 XSTRING (string
)->size
))
800 /* Ignore this element if there is a predicate
801 and the predicate doesn't like it. */
805 if (EQ (pred
, Qcommandp
))
806 tem
= Fcommandp (elt
);
809 GCPRO4 (tail
, eltstring
, allmatches
, string
);
810 tem
= call1 (pred
, elt
);
813 if (NILP (tem
)) continue;
815 /* Ok => put it on the list. */
816 allmatches
= Fcons (eltstring
, allmatches
);
820 return Fnreverse (allmatches
);
823 Lisp_Object Vminibuffer_completion_table
, Qminibuffer_completion_table
;
824 Lisp_Object Vminibuffer_completion_predicate
, Qminibuffer_completion_predicate
;
825 Lisp_Object Vminibuffer_completion_confirm
, Qminibuffer_completion_confirm
;
827 /* This comment supplies the doc string for completing-read,
828 for make-docfile to see. We cannot put this in the real DEFUN
829 due to limits in the Unix cpp.
831 DEFUN ("completing-read", Fcompleting_read, Scompleting_read, 2, 6, 0,
832 "Read a string in the minibuffer, with completion.\n\
833 Args: PROMPT, TABLE, PREDICATE, REQUIRE-MATCH, INITIAL-INPUT, HIST.\n\
834 PROMPT is a string to prompt with; normally it ends in a colon and a space.\n\
835 TABLE is an alist whose elements' cars are strings, or an obarray.\n\
836 PREDICATE limits completion to a subset of TABLE.\n\
837 See `try-completion' for more details on completion, TABLE, and PREDICATE.\n\
838 If REQUIRE-MATCH is non-nil, the user is not allowed to exit unless\n\
839 the input is (or completes to) an element of TABLE.\n\
840 If it is also not t, Return does not exit if it does non-null completion.\n\
841 If INITIAL-INPUT is non-nil, insert it in the minibuffer initially.\n\
842 If it is (STRING . POSITION), the initial input\n\
843 is STRING, but point is placed POSITION characters into the string.\n\
844 HIST, if non-nil, specifies a history list\n\
845 and optionally the initial position in the list.\n\
846 It can be a symbol, which is the history list variable to use,\n\
847 or it can be a cons cell (HISTVAR . HISTPOS).\n\
848 In that case, HISTVAR is the history list variable to use,\n\
849 and HISTPOS is the initial position (the position in the list\n\
850 which INITIAL-CONTENTS corresponds to).\n\
851 Positions are counted starting from 1 at the beginning of the list.\n\
852 Completion ignores case if the ambient value of\n\
853 `completion-ignore-case' is non-nil."
855 DEFUN ("completing-read", Fcompleting_read
, Scompleting_read
, 2, 6, 0,
856 0 /* See immediately above */)
857 (prompt
, table
, pred
, require_match
, init
, hist
)
858 Lisp_Object prompt
, table
, pred
, require_match
, init
, hist
;
860 Lisp_Object val
, histvar
, histpos
, position
;
862 int count
= specpdl_ptr
- specpdl
;
863 specbind (Qminibuffer_completion_table
, table
);
864 specbind (Qminibuffer_completion_predicate
, pred
);
865 specbind (Qminibuffer_completion_confirm
,
866 EQ (require_match
, Qt
) ? Qnil
: Qt
);
867 last_exact_completion
= Qnil
;
872 if (XTYPE (init
) == Lisp_Cons
)
874 position
= Fcdr (init
);
877 CHECK_STRING (init
, 0);
878 if (!NILP (position
))
880 CHECK_NUMBER (position
, 0);
881 /* Convert to distance from end of input. */
882 pos
= XINT (position
) - XSTRING (init
)->size
;
886 if (XTYPE (hist
) == Lisp_Symbol
)
893 histvar
= Fcar_safe (hist
);
894 histpos
= Fcdr_safe (hist
);
897 histvar
= Qminibuffer_history
;
899 XFASTINT (histpos
) = 0;
901 val
= read_minibuf (NILP (require_match
)
902 ? Vminibuffer_local_completion_map
903 : Vminibuffer_local_must_match_map
,
904 init
, prompt
, make_number (pos
), 0,
906 return unbind_to (count
, val
);
909 /* Temporarily display the string M at the end of the current
910 minibuffer contents. This is used to display things like
911 "[No Match]" when the user requests a completion for a prefix
912 that has no possible completions, and other quick, unobtrusive
915 temp_echo_area_glyphs (m
)
919 Lisp_Object oinhibit
;
920 oinhibit
= Vinhibit_quit
;
922 /* Clear out any old echo-area message to make way for our new thing. */
929 Fsit_for (make_number (2), Qnil
, Qnil
);
930 del_range (point
, ZV
);
931 if (!NILP (Vquit_flag
))
934 unread_command_events
= Fcons (make_number (Ctl ('g')), Qnil
);
936 Vinhibit_quit
= oinhibit
;
939 Lisp_Object
Fminibuffer_completion_help ();
940 Lisp_Object
assoc_for_completion ();
943 * 0 no possible completion
944 * 1 was already an exact and unique completion
945 * 3 was already an exact completion
946 * 4 completed to an exact completion
947 * 5 some completion happened
948 * 6 no completion happened
953 Lisp_Object completion
, tem
;
957 completion
= Ftry_completion (Fbuffer_string (), Vminibuffer_completion_table
,
958 Vminibuffer_completion_predicate
);
959 last
= last_exact_completion
;
960 last_exact_completion
= Qnil
;
962 if (NILP (completion
))
965 temp_echo_area_glyphs (" [No match]");
969 if (EQ (completion
, Qt
)) /* exact and unique match */
973 tem
= Fstring_equal (completion
, Fbuffer_string());
974 if (completedp
= NILP (tem
))
976 Ferase_buffer (); /* Some completion happened */
977 Finsert (1, &completion
);
980 /* It did find a match. Do we match some possibility exactly now? */
981 if (CONSP (Vminibuffer_completion_table
)
982 || NILP (Vminibuffer_completion_table
))
983 tem
= assoc_for_completion (Fbuffer_string (),
984 Vminibuffer_completion_table
);
985 else if (XTYPE (Vminibuffer_completion_table
) == Lisp_Vector
)
987 /* the primitive used by Fintern_soft */
988 extern Lisp_Object
oblookup ();
990 tem
= Fbuffer_string ();
991 /* Bypass intern-soft as that loses for nil */
992 tem
= oblookup (Vminibuffer_completion_table
,
993 XSTRING (tem
)->data
, XSTRING (tem
)->size
);
994 if (XTYPE (tem
) != Lisp_Symbol
)
996 else if (!NILP (Vminibuffer_completion_predicate
))
997 tem
= call1 (Vminibuffer_completion_predicate
, tem
);
1002 tem
= call3 (Vminibuffer_completion_table
,
1004 Vminibuffer_completion_predicate
,
1008 { /* not an exact match */
1012 Fminibuffer_completion_help ();
1014 temp_echo_area_glyphs (" [Next char not unique]");
1017 else if (completedp
)
1019 /* If the last exact completion and this one were the same,
1020 it means we've already given a "Complete but not unique"
1021 message and the user's hit TAB again, so now we give him help. */
1022 last_exact_completion
= completion
;
1025 tem
= Fbuffer_string ();
1026 if (!NILP (Fequal (tem
, last
)))
1027 Fminibuffer_completion_help ();
1032 /* Like assoc but assumes KEY is a string, and ignores case if appropriate. */
1035 assoc_for_completion (key
, list
)
1036 register Lisp_Object key
;
1039 register Lisp_Object tail
;
1041 if (completion_ignore_case
)
1042 key
= Fupcase (key
);
1044 for (tail
= list
; !NILP (tail
); tail
= Fcdr (tail
))
1046 register Lisp_Object elt
, tem
, thiscar
;
1048 if (!CONSP (elt
)) continue;
1049 thiscar
= Fcar (elt
);
1050 if (XTYPE (thiscar
) != Lisp_String
)
1052 if (completion_ignore_case
)
1053 thiscar
= Fupcase (thiscar
);
1054 tem
= Fequal (thiscar
, key
);
1055 if (!NILP (tem
)) return elt
;
1061 DEFUN ("minibuffer-complete", Fminibuffer_complete
, Sminibuffer_complete
, 0, 0, "",
1062 "Complete the minibuffer contents as far as possible.")
1065 register int i
= do_completion ();
1072 temp_echo_area_glyphs (" [Sole completion]");
1076 temp_echo_area_glyphs (" [Complete, but not unique]");
1083 DEFUN ("minibuffer-complete-and-exit", Fminibuffer_complete_and_exit
,
1084 Sminibuffer_complete_and_exit
, 0, 0, "",
1085 "Complete the minibuffer contents, and maybe exit.\n\
1086 Exit if the name is valid with no completion needed.\n\
1087 If name was completed to a valid match,\n\
1088 a repetition of this command will exit.")
1093 /* Allow user to specify null string */
1097 i
= do_completion ();
1105 if (!NILP (Vminibuffer_completion_confirm
))
1107 temp_echo_area_glyphs (" [Confirm]");
1117 Fthrow (Qexit
, Qnil
);
1121 DEFUN ("minibuffer-complete-word", Fminibuffer_complete_word
, Sminibuffer_complete_word
,
1123 "Complete the minibuffer contents at most a single word.\n\
1124 After one word is completed as much as possible, a space or hyphen\n\
1125 is added, provided that matches some possible completion.")
1128 Lisp_Object completion
, tem
;
1130 register unsigned char *completion_string
;
1131 /* We keep calling Fbuffer_string
1132 rather than arrange for GC to hold onto a pointer to
1133 one of the strings thus made. */
1135 completion
= Ftry_completion (Fbuffer_string (),
1136 Vminibuffer_completion_table
,
1137 Vminibuffer_completion_predicate
);
1138 if (NILP (completion
))
1141 temp_echo_area_glyphs (" [No match]");
1144 if (EQ (completion
, Qt
))
1147 #if 0 /* How the below code used to look, for reference */
1148 tem
= Fbuffer_string ();
1149 b
= XSTRING (tem
)->data
;
1150 i
= ZV
- 1 - XSTRING (completion
)->size
;
1151 p
= XSTRING (completion
)->data
;
1153 0 <= scmp (b
, p
, ZV
- 1))
1156 /* Set buffer to longest match of buffer tail and completion head. */
1157 while (0 <= scmp (b
+ i
, p
, ZV
- 1 - i
))
1159 del_range (1, i
+ 1);
1162 #else /* Rewritten code */
1164 register unsigned char *buffer_string
;
1165 int buffer_length
, completion_length
;
1167 tem
= Fbuffer_string ();
1168 buffer_string
= XSTRING (tem
)->data
;
1169 completion_string
= XSTRING (completion
)->data
;
1170 buffer_length
= XSTRING (tem
)->size
; /* ie ZV - BEGV */
1171 completion_length
= XSTRING (completion
)->size
;
1172 i
= buffer_length
- completion_length
;
1173 /* Mly: I don't understand what this is supposed to do AT ALL */
1175 0 <= scmp (buffer_string
, completion_string
, buffer_length
))
1177 /* Set buffer to longest match of buffer tail and completion head. */
1181 while (0 <= scmp (buffer_string
++, completion_string
, buffer_length
--))
1183 del_range (1, i
+ 1);
1187 #endif /* Rewritten code */
1190 /* If completion finds next char not unique,
1191 consider adding a space or a hyphen */
1192 if (i
== XSTRING (completion
)->size
)
1194 tem
= Ftry_completion (concat2 (Fbuffer_string (), build_string (" ")),
1195 Vminibuffer_completion_table
,
1196 Vminibuffer_completion_predicate
);
1197 if (XTYPE (tem
) == Lisp_String
)
1201 tem
= Ftry_completion (concat2 (Fbuffer_string (), build_string ("-")),
1202 Vminibuffer_completion_table
,
1203 Vminibuffer_completion_predicate
);
1204 if (XTYPE (tem
) == Lisp_String
)
1209 /* Now find first word-break in the stuff found by completion.
1210 i gets index in string of where to stop completing. */
1211 completion_string
= XSTRING (completion
)->data
;
1213 for (; i
< XSTRING (completion
)->size
; i
++)
1214 if (SYNTAX (completion_string
[i
]) != Sword
) break;
1215 if (i
< XSTRING (completion
)->size
)
1218 /* If got no characters, print help for user. */
1223 Fminibuffer_completion_help ();
1227 /* Otherwise insert in minibuffer the chars we got */
1230 insert_from_string (completion
, 0, i
);
1234 DEFUN ("display-completion-list", Fdisplay_completion_list
, Sdisplay_completion_list
,
1236 "Display the list of completions, COMPLETIONS, using `standard-output'.\n\
1237 Each element may be just a symbol or string\n\
1238 or may be a list of two strings to be printed as if concatenated.")
1240 Lisp_Object completions
;
1242 register Lisp_Object tail
, elt
;
1245 /* No GCPRO needed, since (when it matters) every variable
1246 points to a non-string that is pointed to by COMPLETIONS. */
1247 struct buffer
*old
= current_buffer
;
1248 if (XTYPE (Vstandard_output
) == Lisp_Buffer
)
1249 set_buffer_internal (XBUFFER (Vstandard_output
));
1251 if (NILP (completions
))
1252 write_string ("There are no possible completions of what you have typed.", -1);
1255 write_string ("Possible completions are:", -1);
1256 for (tail
= completions
, i
= 0; !NILP (tail
); tail
= Fcdr (tail
), i
++)
1258 /* this needs fixing for the case of long completions
1259 and/or narrow windows */
1260 /* Sadly, the window it will appear in is not known
1261 until after the text has been made. */
1264 if (XTYPE (Vstandard_output
) == Lisp_Buffer
)
1265 Findent_to (make_number (35), make_number (1));
1270 write_string (" ", -1);
1273 while (column
< 35);
1284 if (XTYPE (Vstandard_output
) != Lisp_Buffer
)
1287 tem
= Flength (Fcar (elt
));
1288 column
+= XINT (tem
);
1289 tem
= Flength (Fcar (Fcdr (elt
)));
1290 column
+= XINT (tem
);
1292 Fprinc (Fcar (elt
), Qnil
);
1293 Fprinc (Fcar (Fcdr (elt
)), Qnil
);
1297 if (XTYPE (Vstandard_output
) != Lisp_Buffer
)
1300 tem
= Flength (elt
);
1301 column
+= XINT (tem
);
1308 if (XTYPE (Vstandard_output
) == Lisp_Buffer
)
1309 set_buffer_internal (old
);
1313 DEFUN ("minibuffer-completion-help", Fminibuffer_completion_help
, Sminibuffer_completion_help
,
1315 "Display a list of possible completions of the current minibuffer contents.")
1318 Lisp_Object completions
;
1320 message ("Making completion list...");
1321 completions
= Fall_completions (Fbuffer_string (),
1322 Vminibuffer_completion_table
,
1323 Vminibuffer_completion_predicate
);
1324 echo_area_glyphs
= 0;
1326 if (NILP (completions
))
1329 temp_echo_area_glyphs (" [No completions]");
1332 internal_with_output_to_temp_buffer ("*Completions*",
1333 Fdisplay_completion_list
,
1334 Fsort (completions
, Qstring_lessp
));
1338 DEFUN ("self-insert-and-exit", Fself_insert_and_exit
, Sself_insert_and_exit
, 0, 0, "",
1339 "Terminate minibuffer input.")
1342 if (XTYPE (last_command_char
) == Lisp_Int
)
1343 internal_self_insert (last_command_char
, 0);
1347 Fthrow (Qexit
, Qnil
);
1350 DEFUN ("exit-minibuffer", Fexit_minibuffer
, Sexit_minibuffer
, 0, 0, "",
1351 "Terminate this minibuffer argument.")
1354 Fthrow (Qexit
, Qnil
);
1357 DEFUN ("minibuffer-depth", Fminibuffer_depth
, Sminibuffer_depth
, 0, 0, 0,
1358 "Return current depth of activations of minibuffer, a nonnegative integer.")
1361 return make_number (minibuf_level
);
1365 init_minibuf_once ()
1367 Vminibuffer_list
= Qnil
;
1368 staticpro (&Vminibuffer_list
);
1375 minibuf_save_vector_size
= 5;
1376 minibuf_save_vector
= (struct minibuf_save_data
*) malloc (5 * sizeof (struct minibuf_save_data
));
1378 Qminibuffer_completion_table
= intern ("minibuffer-completion-table");
1379 staticpro (&Qminibuffer_completion_table
);
1381 Qminibuffer_completion_confirm
= intern ("minibuffer-completion-confirm");
1382 staticpro (&Qminibuffer_completion_confirm
);
1384 Qminibuffer_completion_predicate
= intern ("minibuffer-completion-predicate");
1385 staticpro (&Qminibuffer_completion_predicate
);
1387 staticpro (&last_minibuf_string
);
1388 last_minibuf_string
= Qnil
;
1390 Quser_variable_p
= intern ("user-variable-p");
1391 staticpro (&Quser_variable_p
);
1393 Qminibuffer_history
= intern ("minibuffer-history");
1394 staticpro (&Qminibuffer_history
);
1396 DEFVAR_BOOL ("completion-auto-help", &auto_help
,
1397 "*Non-nil means automatically provide help for invalid completion input.");
1400 DEFVAR_BOOL ("completion-ignore-case", &completion_ignore_case
,
1401 "Non-nil means don't consider case significant in completion.");
1402 completion_ignore_case
= 0;
1404 DEFVAR_BOOL ("enable-recursive-minibuffers", &enable_recursive_minibuffers
,
1405 "*Non-nil means to allow minibuffer commands while in the minibuffer.\n\
1406 More precisely, this variable makes a difference when the minibuffer window\n\
1407 is the selected window. If you are in some other window, minibuffer commands\n\
1408 are allowed even if a minibuffer is active.");
1409 enable_recursive_minibuffers
= 0;
1411 DEFVAR_LISP ("minibuffer-completion-table", &Vminibuffer_completion_table
,
1412 "Alist or obarray used for completion in the minibuffer.\n\
1413 This becomes the ALIST argument to `try-completion' and `all-completion'.\n\
1415 The value may alternatively be a function, which is given three arguments:\n\
1416 STRING, the current buffer contents;\n\
1417 PREDICATE, the predicate for filtering possible matches;\n\
1418 CODE, which says what kind of things to do.\n\
1419 CODE can be nil, t or `lambda'.\n\
1420 nil means to return the best completion of STRING, or nil if there is none.\n\
1421 t means to return a list of all possible completions of STRING.\n\
1422 `lambda' means to return t if STRING is a valid completion as it stands.");
1423 Vminibuffer_completion_table
= Qnil
;
1425 DEFVAR_LISP ("minibuffer-completion-predicate", &Vminibuffer_completion_predicate
,
1426 "Within call to `completing-read', this holds the PREDICATE argument.");
1427 Vminibuffer_completion_predicate
= Qnil
;
1429 DEFVAR_LISP ("minibuffer-completion-confirm", &Vminibuffer_completion_confirm
,
1430 "Non-nil => demand confirmation of completion before exiting minibuffer.");
1431 Vminibuffer_completion_confirm
= Qnil
;
1433 DEFVAR_LISP ("minibuffer-help-form", &Vminibuffer_help_form
,
1434 "Value that `help-form' takes on inside the minibuffer.");
1435 Vminibuffer_help_form
= Qnil
;
1437 DEFVAR_LISP ("minibuffer-history-variable", &Vminibuffer_history_variable
,
1438 "History list symbol to add minibuffer values to.\n\
1439 Each minibuffer output is added with\n\
1440 (set minibuffer-history-variable\n\
1441 (cons STRING (symbol-value minibuffer-history-variable)))");
1442 XFASTINT (Vminibuffer_history_variable
) = 0;
1444 DEFVAR_LISP ("minibuffer-history-position", &Vminibuffer_history_position
,
1445 "Current position of redoing in the history list.");
1446 Vminibuffer_history_position
= Qnil
;
1448 defsubr (&Sread_from_minibuffer
);
1449 defsubr (&Seval_minibuffer
);
1450 defsubr (&Sread_minibuffer
);
1451 defsubr (&Sread_string
);
1452 defsubr (&Sread_command
);
1453 defsubr (&Sread_variable
);
1454 defsubr (&Sread_buffer
);
1455 defsubr (&Sread_no_blanks_input
);
1456 defsubr (&Sminibuffer_depth
);
1458 defsubr (&Stry_completion
);
1459 defsubr (&Sall_completions
);
1460 defsubr (&Scompleting_read
);
1461 defsubr (&Sminibuffer_complete
);
1462 defsubr (&Sminibuffer_complete_word
);
1463 defsubr (&Sminibuffer_complete_and_exit
);
1464 defsubr (&Sdisplay_completion_list
);
1465 defsubr (&Sminibuffer_completion_help
);
1467 defsubr (&Sself_insert_and_exit
);
1468 defsubr (&Sexit_minibuffer
);
1474 initial_define_key (Vminibuffer_local_map
, Ctl ('g'),
1475 "abort-recursive-edit");
1476 initial_define_key (Vminibuffer_local_map
, Ctl ('m'),
1478 initial_define_key (Vminibuffer_local_map
, Ctl ('j'),
1481 initial_define_key (Vminibuffer_local_ns_map
, Ctl ('g'),
1482 "abort-recursive-edit");
1483 initial_define_key (Vminibuffer_local_ns_map
, Ctl ('m'),
1485 initial_define_key (Vminibuffer_local_ns_map
, Ctl ('j'),
1488 initial_define_key (Vminibuffer_local_ns_map
, ' ',
1490 initial_define_key (Vminibuffer_local_ns_map
, '\t',
1492 initial_define_key (Vminibuffer_local_ns_map
, '?',
1493 "self-insert-and-exit");
1495 initial_define_key (Vminibuffer_local_completion_map
, Ctl ('g'),
1496 "abort-recursive-edit");
1497 initial_define_key (Vminibuffer_local_completion_map
, Ctl ('m'),
1499 initial_define_key (Vminibuffer_local_completion_map
, Ctl ('j'),
1502 initial_define_key (Vminibuffer_local_completion_map
, '\t',
1503 "minibuffer-complete");
1504 initial_define_key (Vminibuffer_local_completion_map
, ' ',
1505 "minibuffer-complete-word");
1506 initial_define_key (Vminibuffer_local_completion_map
, '?',
1507 "minibuffer-completion-help");
1509 initial_define_key (Vminibuffer_local_must_match_map
, Ctl ('g'),
1510 "abort-recursive-edit");
1511 initial_define_key (Vminibuffer_local_must_match_map
, Ctl ('m'),
1512 "minibuffer-complete-and-exit");
1513 initial_define_key (Vminibuffer_local_must_match_map
, Ctl ('j'),
1514 "minibuffer-complete-and-exit");
1515 initial_define_key (Vminibuffer_local_must_match_map
, '\t',
1516 "minibuffer-complete");
1517 initial_define_key (Vminibuffer_local_must_match_map
, ' ',
1518 "minibuffer-complete-word");
1519 initial_define_key (Vminibuffer_local_must_match_map
, '?',
1520 "minibuffer-completion-help");