Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-345
[emacs.git] / src / minibuf.c
blobb47d075de4a3c3285e19db2bdd59a992df8ffd77
1 /* Minibuffer input and completion.
2 Copyright (C) 1985,86,93,94,95,96,97,98,99,2000,01,03,04,05
3 Free Software Foundation, Inc.
5 This file is part of GNU Emacs.
7 GNU Emacs is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
12 GNU Emacs is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GNU Emacs; see the file COPYING. If not, write to
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
23 #include <config.h>
24 #include <stdio.h>
26 #include "lisp.h"
27 #include "commands.h"
28 #include "buffer.h"
29 #include "charset.h"
30 #include "dispextern.h"
31 #include "keyboard.h"
32 #include "frame.h"
33 #include "window.h"
34 #include "syntax.h"
35 #include "intervals.h"
36 #include "keymap.h"
38 extern int quit_char;
40 /* List of buffers for use as minibuffers.
41 The first element of the list is used for the outermost minibuffer
42 invocation, the next element is used for a recursive minibuffer
43 invocation, etc. The list is extended at the end as deeper
44 minibuffer recursions are encountered. */
46 Lisp_Object Vminibuffer_list;
48 /* Data to remember during recursive minibuffer invocations */
50 Lisp_Object minibuf_save_list;
52 /* Depth in minibuffer invocations. */
54 int minibuf_level;
56 /* Nonzero means display completion help for invalid input. */
58 Lisp_Object Vcompletion_auto_help;
60 /* The maximum length of a minibuffer history. */
62 Lisp_Object Qhistory_length, Vhistory_length;
64 /* No duplicates in history. */
66 int history_delete_duplicates;
68 /* Fread_minibuffer leaves the input here as a string. */
70 Lisp_Object last_minibuf_string;
72 /* Nonzero means let functions called when within a minibuffer
73 invoke recursive minibuffers (to read arguments, or whatever) */
75 int enable_recursive_minibuffers;
77 /* Nonzero means don't ignore text properties
78 in Fread_from_minibuffer. */
80 int minibuffer_allow_text_properties;
82 /* help-form is bound to this while in the minibuffer. */
84 Lisp_Object Vminibuffer_help_form;
86 /* Variable which is the history list to add minibuffer values to. */
88 Lisp_Object Vminibuffer_history_variable;
90 /* Current position in the history list (adjusted by M-n and M-p). */
92 Lisp_Object Vminibuffer_history_position;
94 /* Text properties that are added to minibuffer prompts.
95 These are in addition to the basic `field' property, and stickiness
96 properties. */
98 Lisp_Object Vminibuffer_prompt_properties;
100 Lisp_Object Qminibuffer_history, Qbuffer_name_history;
102 Lisp_Object Qread_file_name_internal;
104 /* Normal hooks for entry to and exit from minibuffer. */
106 Lisp_Object Qminibuffer_setup_hook, Vminibuffer_setup_hook;
107 Lisp_Object Qminibuffer_exit_hook, Vminibuffer_exit_hook;
109 /* Function to call to read a buffer name. */
110 Lisp_Object Vread_buffer_function;
112 /* Nonzero means completion ignores case. */
114 int completion_ignore_case;
116 /* List of regexps that should restrict possible completions. */
118 Lisp_Object Vcompletion_regexp_list;
120 /* Nonzero means raise the minibuffer frame when the minibuffer
121 is entered. */
123 int minibuffer_auto_raise;
125 /* If last completion attempt reported "Complete but not unique"
126 then this is the string completed then; otherwise this is nil. */
128 static Lisp_Object last_exact_completion;
130 extern Lisp_Object Voverriding_local_map;
132 Lisp_Object Quser_variable_p;
134 Lisp_Object Qminibuffer_default;
136 Lisp_Object Qcurrent_input_method, Qactivate_input_method;
138 Lisp_Object Qcase_fold_search;
140 extern Lisp_Object Qmouse_face;
142 extern Lisp_Object Qfield;
144 /* Put minibuf on currently selected frame's minibuffer.
145 We do this whenever the user starts a new minibuffer
146 or when a minibuffer exits. */
148 void
149 choose_minibuf_frame ()
151 if (FRAMEP (selected_frame)
152 && FRAME_LIVE_P (XFRAME (selected_frame))
153 && !EQ (minibuf_window, XFRAME (selected_frame)->minibuffer_window))
155 struct frame *sf = XFRAME (selected_frame);
156 Lisp_Object buffer;
158 /* I don't think that any frames may validly have a null minibuffer
159 window anymore. */
160 if (NILP (sf->minibuffer_window))
161 abort ();
163 /* Under X, we come here with minibuf_window being the
164 minibuffer window of the unused termcap window created in
165 init_window_once. That window doesn't have a buffer. */
166 buffer = XWINDOW (minibuf_window)->buffer;
167 if (BUFFERP (buffer))
168 Fset_window_buffer (sf->minibuffer_window, buffer, Qnil);
169 minibuf_window = sf->minibuffer_window;
172 /* Make sure no other frame has a minibuffer as its selected window,
173 because the text would not be displayed in it, and that would be
174 confusing. Only allow the selected frame to do this,
175 and that only if the minibuffer is active. */
177 Lisp_Object tail, frame;
179 FOR_EACH_FRAME (tail, frame)
180 if (MINI_WINDOW_P (XWINDOW (FRAME_SELECTED_WINDOW (XFRAME (frame))))
181 && !(EQ (frame, selected_frame)
182 && minibuf_level > 0))
183 Fset_frame_selected_window (frame, Fframe_first_window (frame));
187 Lisp_Object
188 choose_minibuf_frame_1 (ignore)
189 Lisp_Object ignore;
191 choose_minibuf_frame ();
192 return Qnil;
195 DEFUN ("set-minibuffer-window", Fset_minibuffer_window,
196 Sset_minibuffer_window, 1, 1, 0,
197 doc: /* Specify which minibuffer window to use for the minibuffer.
198 This affects where the minibuffer is displayed if you put text in it
199 without invoking the usual minibuffer commands. */)
200 (window)
201 Lisp_Object window;
203 CHECK_WINDOW (window);
204 if (! MINI_WINDOW_P (XWINDOW (window)))
205 error ("Window is not a minibuffer window");
207 minibuf_window = window;
209 return window;
213 /* Actual minibuffer invocation. */
215 static Lisp_Object read_minibuf_unwind P_ ((Lisp_Object));
216 static Lisp_Object run_exit_minibuf_hook P_ ((Lisp_Object));
217 static Lisp_Object read_minibuf P_ ((Lisp_Object, Lisp_Object,
218 Lisp_Object, Lisp_Object,
219 int, Lisp_Object,
220 Lisp_Object, Lisp_Object,
221 int, int, int));
222 static Lisp_Object read_minibuf_noninteractive P_ ((Lisp_Object, Lisp_Object,
223 Lisp_Object, Lisp_Object,
224 int, Lisp_Object,
225 Lisp_Object, Lisp_Object,
226 int, int));
227 static Lisp_Object string_to_object P_ ((Lisp_Object, Lisp_Object));
230 /* Read a Lisp object from VAL and return it. If VAL is an empty
231 string, and DEFALT is a string, read from DEFALT instead of VAL. */
233 static Lisp_Object
234 string_to_object (val, defalt)
235 Lisp_Object val, defalt;
237 struct gcpro gcpro1, gcpro2;
238 Lisp_Object expr_and_pos;
239 int pos;
241 GCPRO2 (val, defalt);
243 if (STRINGP (val) && SCHARS (val) == 0
244 && STRINGP (defalt))
245 val = defalt;
247 expr_and_pos = Fread_from_string (val, Qnil, Qnil);
248 pos = XINT (Fcdr (expr_and_pos));
249 if (pos != SCHARS (val))
251 /* Ignore trailing whitespace; any other trailing junk
252 is an error. */
253 int i;
254 pos = string_char_to_byte (val, pos);
255 for (i = pos; i < SBYTES (val); i++)
257 int c = SREF (val, i);
258 if (c != ' ' && c != '\t' && c != '\n')
259 error ("Trailing garbage following expression");
263 val = Fcar (expr_and_pos);
264 RETURN_UNGCPRO (val);
268 /* Like read_minibuf but reading from stdin. This function is called
269 from read_minibuf to do the job if noninteractive. */
271 static Lisp_Object
272 read_minibuf_noninteractive (map, initial, prompt, backup_n, expflag,
273 histvar, histpos, defalt, allow_props,
274 inherit_input_method)
275 Lisp_Object map;
276 Lisp_Object initial;
277 Lisp_Object prompt;
278 Lisp_Object backup_n;
279 int expflag;
280 Lisp_Object histvar;
281 Lisp_Object histpos;
282 Lisp_Object defalt;
283 int allow_props;
284 int inherit_input_method;
286 int size, len;
287 char *line, *s;
288 Lisp_Object val;
290 fprintf (stdout, "%s", SDATA (prompt));
291 fflush (stdout);
293 val = Qnil;
294 size = 100;
295 len = 0;
296 line = (char *) xmalloc (size * sizeof *line);
297 while ((s = fgets (line + len, size - len, stdin)) != NULL
298 && (len = strlen (line),
299 len == size - 1 && line[len - 1] != '\n'))
301 size *= 2;
302 line = (char *) xrealloc (line, size);
305 if (s)
307 len = strlen (line);
309 if (len > 0 && line[len - 1] == '\n')
310 line[--len] = '\0';
312 val = build_string (line);
313 xfree (line);
315 else
317 xfree (line);
318 error ("Error reading from stdin");
321 /* If Lisp form desired instead of string, parse it. */
322 if (expflag)
323 val = string_to_object (val, defalt);
325 return val;
328 DEFUN ("minibufferp", Fminibufferp,
329 Sminibufferp, 0, 1, 0,
330 doc: /* Return t if BUFFER is a minibuffer.
331 No argument or nil as argument means use current buffer as BUFFER.
332 BUFFER can be a buffer or a buffer name. */)
333 (buffer)
334 Lisp_Object buffer;
336 Lisp_Object tem;
338 if (NILP (buffer))
339 buffer = Fcurrent_buffer ();
340 else if (STRINGP (buffer))
341 buffer = Fget_buffer (buffer);
342 else
343 CHECK_BUFFER (buffer);
345 tem = Fmemq (buffer, Vminibuffer_list);
346 return ! NILP (tem) ? Qt : Qnil;
349 DEFUN ("minibuffer-prompt-end", Fminibuffer_prompt_end,
350 Sminibuffer_prompt_end, 0, 0, 0,
351 doc: /* Return the buffer position of the end of the minibuffer prompt.
352 Return (point-min) if current buffer is not a mini-buffer. */)
355 /* This function is written to be most efficient when there's a prompt. */
356 Lisp_Object beg, end, tem;
357 beg = make_number (BEGV);
359 tem = Fmemq (Fcurrent_buffer (), Vminibuffer_list);
360 if (NILP (tem))
361 return beg;
363 end = Ffield_end (beg, Qnil, Qnil);
365 if (XINT (end) == ZV && NILP (Fget_char_property (beg, Qfield, Qnil)))
366 return beg;
367 else
368 return end;
371 DEFUN ("minibuffer-contents", Fminibuffer_contents,
372 Sminibuffer_contents, 0, 0, 0,
373 doc: /* Return the user input in a minibuffer as a string.
374 The current buffer must be a minibuffer. */)
377 int prompt_end = XINT (Fminibuffer_prompt_end ());
378 return make_buffer_string (prompt_end, ZV, 1);
381 DEFUN ("minibuffer-contents-no-properties", Fminibuffer_contents_no_properties,
382 Sminibuffer_contents_no_properties, 0, 0, 0,
383 doc: /* Return the user input in a minibuffer as a string, without text-properties.
384 The current buffer must be a minibuffer. */)
387 int prompt_end = XINT (Fminibuffer_prompt_end ());
388 return make_buffer_string (prompt_end, ZV, 0);
391 DEFUN ("delete-minibuffer-contents", Fdelete_minibuffer_contents,
392 Sdelete_minibuffer_contents, 0, 0, 0,
393 doc: /* Delete all user input in a minibuffer.
394 The current buffer must be a minibuffer. */)
397 int prompt_end = XINT (Fminibuffer_prompt_end ());
398 if (prompt_end < ZV)
399 del_range (prompt_end, ZV);
400 return Qnil;
403 /* Get the text in the minibuffer before point.
404 That is what completion commands operate on. */
406 Lisp_Object
407 minibuffer_completion_contents ()
409 int prompt_end = XINT (Fminibuffer_prompt_end ());
410 if (PT < prompt_end)
411 error ("Cannot do completion in the prompt");
412 return make_buffer_string (prompt_end, PT, 1);
415 /* Read from the minibuffer using keymap MAP and initial contents INITIAL,
416 putting point minus BACKUP_N bytes from the end of INITIAL,
417 prompting with PROMPT (a string), using history list HISTVAR
418 with initial position HISTPOS. INITIAL should be a string or a
419 cons of a string and an integer. BACKUP_N should be <= 0, or
420 Qnil, which is equivalent to 0. If INITIAL is a cons, BACKUP_N is
421 ignored and replaced with an integer that puts point at one-indexed
422 position N in INITIAL, where N is the CDR of INITIAL, or at the
423 beginning of INITIAL if N <= 0.
425 Normally return the result as a string (the text that was read),
426 but if EXPFLAG is nonzero, read it and return the object read.
427 If HISTVAR is given, save the value read on that history only if it doesn't
428 match the front of that history list exactly. The value is pushed onto
429 the list as the string that was read.
431 DEFALT specifies the default value for the sake of history commands.
433 If ALLOW_PROPS is nonzero, we do not throw away text properties.
435 if INHERIT_INPUT_METHOD is nonzero, the minibuffer inherits the
436 current input method. */
438 static Lisp_Object
439 read_minibuf (map, initial, prompt, backup_n, expflag,
440 histvar, histpos, defalt, allow_props, inherit_input_method,
441 keep_all)
442 Lisp_Object map;
443 Lisp_Object initial;
444 Lisp_Object prompt;
445 Lisp_Object backup_n;
446 int expflag;
447 Lisp_Object histvar;
448 Lisp_Object histpos;
449 Lisp_Object defalt;
450 int allow_props;
451 int inherit_input_method;
452 int keep_all;
454 Lisp_Object val;
455 int count = SPECPDL_INDEX ();
456 Lisp_Object mini_frame, ambient_dir, minibuffer, input_method;
457 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5;
458 Lisp_Object enable_multibyte;
459 int pos = INTEGERP (backup_n) ? XINT (backup_n) : 0;
461 /* String to add to the history. */
462 Lisp_Object histstring;
464 extern Lisp_Object Qfront_sticky;
465 extern Lisp_Object Qrear_nonsticky;
467 specbind (Qminibuffer_default, defalt);
469 single_kboard_state ();
470 #ifdef HAVE_X_WINDOWS
471 if (display_hourglass_p)
472 cancel_hourglass ();
473 #endif
475 if (!NILP (initial))
477 if (CONSP (initial))
479 backup_n = Fcdr (initial);
480 initial = Fcar (initial);
481 CHECK_STRING (initial);
482 if (!NILP (backup_n))
484 CHECK_NUMBER (backup_n);
485 /* Convert to distance from end of input. */
486 if (XINT (backup_n) < 1)
487 /* A number too small means the beginning of the string. */
488 pos = - SCHARS (initial);
489 else
490 pos = XINT (backup_n) - 1 - SCHARS (initial);
493 else
494 CHECK_STRING (initial);
496 val = Qnil;
497 ambient_dir = current_buffer->directory;
498 input_method = Qnil;
499 enable_multibyte = Qnil;
501 /* Don't need to protect PROMPT, HISTVAR, and HISTPOS because we
502 store them away before we can GC. Don't need to protect
503 BACKUP_N because we use the value only if it is an integer. */
504 GCPRO5 (map, initial, val, ambient_dir, input_method);
506 if (!STRINGP (prompt))
507 prompt = empty_string;
509 if (!enable_recursive_minibuffers
510 && minibuf_level > 0)
512 if (EQ (selected_window, minibuf_window))
513 error ("Command attempted to use minibuffer while in minibuffer");
514 else
515 /* If we're in another window, cancel the minibuffer that's active. */
516 Fthrow (Qexit,
517 build_string ("Command attempted to use minibuffer while in minibuffer"));
520 if (noninteractive)
522 val = read_minibuf_noninteractive (map, initial, prompt,
523 make_number (pos),
524 expflag, histvar, histpos, defalt,
525 allow_props, inherit_input_method);
526 UNGCPRO;
527 return unbind_to (count, val);
530 /* Choose the minibuffer window and frame, and take action on them. */
532 choose_minibuf_frame ();
534 record_unwind_protect (choose_minibuf_frame_1, Qnil);
536 record_unwind_protect (Fset_window_configuration,
537 Fcurrent_window_configuration (Qnil));
539 /* If the minibuffer window is on a different frame, save that
540 frame's configuration too. */
541 mini_frame = WINDOW_FRAME (XWINDOW (minibuf_window));
542 if (!EQ (mini_frame, selected_frame))
543 record_unwind_protect (Fset_window_configuration,
544 Fcurrent_window_configuration (mini_frame));
546 /* If the minibuffer is on an iconified or invisible frame,
547 make it visible now. */
548 Fmake_frame_visible (mini_frame);
550 if (minibuffer_auto_raise)
551 Fraise_frame (mini_frame);
553 /* We have to do this after saving the window configuration
554 since that is what restores the current buffer. */
556 /* Arrange to restore a number of minibuffer-related variables.
557 We could bind each variable separately, but that would use lots of
558 specpdl slots. */
559 minibuf_save_list
560 = Fcons (Voverriding_local_map,
561 Fcons (minibuf_window, minibuf_save_list));
562 minibuf_save_list
563 = Fcons (minibuf_prompt,
564 Fcons (make_number (minibuf_prompt_width),
565 Fcons (Vhelp_form,
566 Fcons (Vcurrent_prefix_arg,
567 Fcons (Vminibuffer_history_position,
568 Fcons (Vminibuffer_history_variable,
569 minibuf_save_list))))));
571 record_unwind_protect (read_minibuf_unwind, Qnil);
572 minibuf_level++;
573 /* We are exiting the minibuffer one way or the other, so run the hook.
574 It should be run before unwinding the minibuf settings. Do it
575 separately from read_minibuf_unwind because we need to make sure that
576 read_minibuf_unwind is fully executed even if exit-minibuffer-hook
577 signals an error. --Stef */
578 record_unwind_protect (run_exit_minibuf_hook, Qnil);
580 /* Now that we can restore all those variables, start changing them. */
582 minibuf_prompt_width = 0;
583 minibuf_prompt = Fcopy_sequence (prompt);
584 Vminibuffer_history_position = histpos;
585 Vminibuffer_history_variable = histvar;
586 Vhelp_form = Vminibuffer_help_form;
588 if (inherit_input_method)
590 /* `current-input-method' is buffer local. So, remember it in
591 INPUT_METHOD before changing the current buffer. */
592 input_method = Fsymbol_value (Qcurrent_input_method);
593 enable_multibyte = current_buffer->enable_multibyte_characters;
596 /* Switch to the minibuffer. */
598 minibuffer = get_minibuffer (minibuf_level);
599 Fset_buffer (minibuffer);
601 /* The current buffer's default directory is usually the right thing
602 for our minibuffer here. However, if you're typing a command at
603 a minibuffer-only frame when minibuf_level is zero, then buf IS
604 the current_buffer, so reset_buffer leaves buf's default
605 directory unchanged. This is a bummer when you've just started
606 up Emacs and buf's default directory is Qnil. Here's a hack; can
607 you think of something better to do? Find another buffer with a
608 better directory, and use that one instead. */
609 if (STRINGP (ambient_dir))
610 current_buffer->directory = ambient_dir;
611 else
613 Lisp_Object buf_list;
615 for (buf_list = Vbuffer_alist;
616 CONSP (buf_list);
617 buf_list = XCDR (buf_list))
619 Lisp_Object other_buf;
621 other_buf = XCDR (XCAR (buf_list));
622 if (STRINGP (XBUFFER (other_buf)->directory))
624 current_buffer->directory = XBUFFER (other_buf)->directory;
625 break;
630 if (!EQ (mini_frame, selected_frame))
631 Fredirect_frame_focus (selected_frame, mini_frame);
633 Vminibuf_scroll_window = selected_window;
634 if (minibuf_level == 1 || !EQ (minibuf_window, selected_window))
635 minibuf_selected_window = selected_window;
636 Fset_window_buffer (minibuf_window, Fcurrent_buffer (), Qnil);
637 Fselect_window (minibuf_window, Qnil);
638 XSETFASTINT (XWINDOW (minibuf_window)->hscroll, 0);
640 Fmake_local_variable (Qprint_escape_newlines);
641 print_escape_newlines = 1;
643 /* Erase the buffer. */
645 int count1 = SPECPDL_INDEX ();
646 specbind (Qinhibit_read_only, Qt);
647 specbind (Qinhibit_modification_hooks, Qt);
648 Ferase_buffer ();
649 unbind_to (count1, Qnil);
652 if (!NILP (current_buffer->enable_multibyte_characters)
653 && ! STRING_MULTIBYTE (minibuf_prompt))
654 minibuf_prompt = Fstring_make_multibyte (minibuf_prompt);
656 /* Insert the prompt, record where it ends. */
657 Finsert (1, &minibuf_prompt);
658 if (PT > BEG)
660 Fput_text_property (make_number (BEG), make_number (PT),
661 Qfront_sticky, Qt, Qnil);
662 Fput_text_property (make_number (BEG), make_number (PT),
663 Qrear_nonsticky, Qt, Qnil);
664 Fput_text_property (make_number (BEG), make_number (PT),
665 Qfield, Qt, Qnil);
666 Fadd_text_properties (make_number (BEG), make_number (PT),
667 Vminibuffer_prompt_properties, Qnil);
670 minibuf_prompt_width = (int) current_column (); /* iftc */
672 /* If appropriate, copy enable-multibyte-characters into the minibuffer. */
673 if (inherit_input_method)
674 current_buffer->enable_multibyte_characters = enable_multibyte;
676 /* Put in the initial input. */
677 if (!NILP (initial))
679 Finsert (1, &initial);
680 Fforward_char (make_number (pos));
683 clear_message (1, 1);
684 current_buffer->keymap = map;
686 /* Turn on an input method stored in INPUT_METHOD if any. */
687 if (STRINGP (input_method) && !NILP (Ffboundp (Qactivate_input_method)))
688 call1 (Qactivate_input_method, input_method);
690 /* Run our hook, but not if it is empty.
691 (run-hooks would do nothing if it is empty,
692 but it's important to save time here in the usual case.) */
693 if (!NILP (Vminibuffer_setup_hook) && !EQ (Vminibuffer_setup_hook, Qunbound)
694 && !NILP (Vrun_hooks))
695 call1 (Vrun_hooks, Qminibuffer_setup_hook);
697 /* Don't allow the user to undo past this point. */
698 current_buffer->undo_list = Qnil;
700 recursive_edit_1 ();
702 /* If cursor is on the minibuffer line,
703 show the user we have exited by putting it in column 0. */
704 if (XWINDOW (minibuf_window)->cursor.vpos >= 0
705 && !noninteractive)
707 XWINDOW (minibuf_window)->cursor.hpos = 0;
708 XWINDOW (minibuf_window)->cursor.x = 0;
709 XWINDOW (minibuf_window)->must_be_updated_p = 1;
710 update_frame (XFRAME (selected_frame), 1, 1);
711 if (rif && rif->flush_display)
712 rif->flush_display (XFRAME (XWINDOW (minibuf_window)->frame));
715 /* Make minibuffer contents into a string. */
716 Fset_buffer (minibuffer);
717 if (allow_props)
718 val = Fminibuffer_contents ();
719 else
720 val = Fminibuffer_contents_no_properties ();
722 /* VAL is the string of minibuffer text. */
724 last_minibuf_string = val;
726 /* Choose the string to add to the history. */
727 if (SCHARS (val) != 0 || keep_all)
728 histstring = val;
729 else if (STRINGP (defalt))
730 histstring = defalt;
731 else
732 histstring = Qnil;
734 /* Add the value to the appropriate history list, if any. */
735 if (SYMBOLP (Vminibuffer_history_variable)
736 && !NILP (histstring))
738 /* If the caller wanted to save the value read on a history list,
739 then do so if the value is not already the front of the list. */
740 Lisp_Object histval;
742 /* If variable is unbound, make it nil. */
743 if (EQ (SYMBOL_VALUE (Vminibuffer_history_variable), Qunbound))
744 Fset (Vminibuffer_history_variable, Qnil);
746 histval = Fsymbol_value (Vminibuffer_history_variable);
748 /* The value of the history variable must be a cons or nil. Other
749 values are unacceptable. We silently ignore these values. */
751 if (NILP (histval)
752 || (CONSP (histval)
753 /* Don't duplicate the most recent entry in the history. */
754 && (keep_all
755 || NILP (Fequal (histstring, Fcar (histval))))))
757 Lisp_Object length;
759 if (history_delete_duplicates) Fdelete (histstring, histval);
760 histval = Fcons (histstring, histval);
761 Fset (Vminibuffer_history_variable, histval);
763 /* Truncate if requested. */
764 length = Fget (Vminibuffer_history_variable, Qhistory_length);
765 if (NILP (length)) length = Vhistory_length;
766 if (INTEGERP (length))
768 if (XINT (length) <= 0)
769 Fset (Vminibuffer_history_variable, Qnil);
770 else
772 Lisp_Object temp;
774 temp = Fnthcdr (Fsub1 (length), histval);
775 if (CONSP (temp)) Fsetcdr (temp, Qnil);
781 /* If Lisp form desired instead of string, parse it. */
782 if (expflag)
783 val = string_to_object (val, defalt);
785 /* The appropriate frame will get selected
786 in set-window-configuration. */
787 UNGCPRO;
788 return unbind_to (count, val);
791 /* Return a buffer to be used as the minibuffer at depth `depth'.
792 depth = 0 is the lowest allowed argument, and that is the value
793 used for nonrecursive minibuffer invocations */
795 Lisp_Object
796 get_minibuffer (depth)
797 int depth;
799 Lisp_Object tail, num, buf;
800 char name[24];
801 extern Lisp_Object nconc2 ();
803 XSETFASTINT (num, depth);
804 tail = Fnthcdr (num, Vminibuffer_list);
805 if (NILP (tail))
807 tail = Fcons (Qnil, Qnil);
808 Vminibuffer_list = nconc2 (Vminibuffer_list, tail);
810 buf = Fcar (tail);
811 if (NILP (buf) || NILP (XBUFFER (buf)->name))
813 sprintf (name, " *Minibuf-%d*", depth);
814 buf = Fget_buffer_create (build_string (name));
816 /* Although the buffer's name starts with a space, undo should be
817 enabled in it. */
818 Fbuffer_enable_undo (buf);
820 XSETCAR (tail, buf);
822 else
824 int count = SPECPDL_INDEX ();
825 /* `reset_buffer' blindly sets the list of overlays to NULL, so we
826 have to empty the list, otherwise we end up with overlays that
827 think they belong to this buffer while the buffer doesn't know about
828 them any more. */
829 delete_all_overlays (XBUFFER (buf));
830 reset_buffer (XBUFFER (buf));
831 record_unwind_protect (Fset_buffer, Fcurrent_buffer ());
832 Fset_buffer (buf);
833 Fkill_all_local_variables ();
834 unbind_to (count, Qnil);
837 return buf;
840 static Lisp_Object
841 run_exit_minibuf_hook (data)
842 Lisp_Object data;
844 if (!NILP (Vminibuffer_exit_hook) && !EQ (Vminibuffer_exit_hook, Qunbound)
845 && !NILP (Vrun_hooks))
846 safe_run_hooks (Qminibuffer_exit_hook);
848 return Qnil;
851 /* This function is called on exiting minibuffer, whether normally or
852 not, and it restores the current window, buffer, etc. */
854 static Lisp_Object
855 read_minibuf_unwind (data)
856 Lisp_Object data;
858 Lisp_Object old_deactivate_mark;
859 Lisp_Object window;
861 /* If this was a recursive minibuffer,
862 tie the minibuffer window back to the outer level minibuffer buffer. */
863 minibuf_level--;
865 window = minibuf_window;
866 /* To keep things predictable, in case it matters, let's be in the
867 minibuffer when we reset the relevant variables. */
868 Fset_buffer (XWINDOW (window)->buffer);
870 /* Restore prompt, etc, from outer minibuffer level. */
871 minibuf_prompt = Fcar (minibuf_save_list);
872 minibuf_save_list = Fcdr (minibuf_save_list);
873 minibuf_prompt_width = XFASTINT (Fcar (minibuf_save_list));
874 minibuf_save_list = Fcdr (minibuf_save_list);
875 Vhelp_form = Fcar (minibuf_save_list);
876 minibuf_save_list = Fcdr (minibuf_save_list);
877 Vcurrent_prefix_arg = Fcar (minibuf_save_list);
878 minibuf_save_list = Fcdr (minibuf_save_list);
879 Vminibuffer_history_position = Fcar (minibuf_save_list);
880 minibuf_save_list = Fcdr (minibuf_save_list);
881 Vminibuffer_history_variable = Fcar (minibuf_save_list);
882 minibuf_save_list = Fcdr (minibuf_save_list);
883 Voverriding_local_map = Fcar (minibuf_save_list);
884 minibuf_save_list = Fcdr (minibuf_save_list);
885 #if 0
886 temp = Fcar (minibuf_save_list);
887 if (FRAME_LIVE_P (XFRAME (WINDOW_FRAME (XWINDOW (temp)))))
888 minibuf_window = temp;
889 #endif
890 minibuf_save_list = Fcdr (minibuf_save_list);
892 /* Erase the minibuffer we were using at this level. */
894 int count = SPECPDL_INDEX ();
895 /* Prevent error in erase-buffer. */
896 specbind (Qinhibit_read_only, Qt);
897 specbind (Qinhibit_modification_hooks, Qt);
898 old_deactivate_mark = Vdeactivate_mark;
899 Ferase_buffer ();
900 Vdeactivate_mark = old_deactivate_mark;
901 unbind_to (count, Qnil);
904 /* When we get to the outmost level, make sure we resize the
905 mini-window back to its normal size. */
906 if (minibuf_level == 0)
907 resize_mini_window (XWINDOW (window), 0);
909 /* Make sure minibuffer window is erased, not ignored. */
910 windows_or_buffers_changed++;
911 XSETFASTINT (XWINDOW (window)->last_modified, 0);
912 XSETFASTINT (XWINDOW (window)->last_overlay_modified, 0);
913 return Qnil;
917 DEFUN ("read-from-minibuffer", Fread_from_minibuffer, Sread_from_minibuffer, 1, 8, 0,
918 doc: /* Read a string from the minibuffer, prompting with string PROMPT.
919 The optional second arg INITIAL-CONTENTS is an obsolete alternative to
920 DEFAULT-VALUE. It normally should be nil in new code, except when
921 HIST is a cons. It is discussed in more detail below.
922 Third arg KEYMAP is a keymap to use whilst reading;
923 if omitted or nil, the default is `minibuffer-local-map'.
924 If fourth arg READ is non-nil, then interpret the result as a Lisp object
925 and return that object:
926 in other words, do `(car (read-from-string INPUT-STRING))'
927 Fifth arg HIST, if non-nil, specifies a history list and optionally
928 the initial position in the list. It can be a symbol, which is the
929 history list variable to use, or it can be a cons cell
930 (HISTVAR . HISTPOS). In that case, HISTVAR is the history list variable
931 to use, and HISTPOS is the initial position for use by the minibuffer
932 history commands. For consistency, you should also specify that
933 element of the history as the value of INITIAL-CONTENTS. Positions
934 are counted starting from 1 at the beginning of the list.
935 Sixth arg DEFAULT-VALUE is the default value. If non-nil, it is available
936 for history commands; but, unless READ is non-nil, `read-from-minibuffer'
937 does NOT return DEFAULT-VALUE if the user enters empty input! It returns
938 the empty string.
939 Seventh arg INHERIT-INPUT-METHOD, if non-nil, means the minibuffer inherits
940 the current input method and the setting of `enable-multibyte-characters'.
941 Eight arg KEEP-ALL, if non-nil, says to put all inputs in the history list,
942 even empty or duplicate inputs.
943 If the variable `minibuffer-allow-text-properties' is non-nil,
944 then the string which is returned includes whatever text properties
945 were present in the minibuffer. Otherwise the value has no text properties.
947 The remainder of this documentation string describes the
948 INITIAL-CONTENTS argument in more detail. It is only relevant when
949 studying existing code, or when HIST is a cons. If non-nil,
950 INITIAL-CONTENTS is a string to be inserted into the minibuffer before
951 reading input. Normally, point is put at the end of that string.
952 However, if INITIAL-CONTENTS is \(STRING . POSITION), the initial
953 input is STRING, but point is placed at _one-indexed_ position
954 POSITION in the minibuffer. Any integer value less than or equal to
955 one puts point at the beginning of the string. *Note* that this
956 behavior differs from the way such arguments are used in `completing-read'
957 and some related functions, which use zero-indexing for POSITION. */)
958 (prompt, initial_contents, keymap, read, hist, default_value, inherit_input_method, keep_all)
959 Lisp_Object prompt, initial_contents, keymap, read, hist, default_value;
960 Lisp_Object inherit_input_method, keep_all;
962 Lisp_Object histvar, histpos, val;
963 struct gcpro gcpro1;
965 CHECK_STRING (prompt);
966 if (NILP (keymap))
967 keymap = Vminibuffer_local_map;
968 else
969 keymap = get_keymap (keymap, 1, 0);
971 if (SYMBOLP (hist))
973 histvar = hist;
974 histpos = Qnil;
976 else
978 histvar = Fcar_safe (hist);
979 histpos = Fcdr_safe (hist);
981 if (NILP (histvar))
982 histvar = Qminibuffer_history;
983 if (NILP (histpos))
984 XSETFASTINT (histpos, 0);
986 GCPRO1 (default_value);
987 val = read_minibuf (keymap, initial_contents, prompt,
988 Qnil, !NILP (read),
989 histvar, histpos, default_value,
990 minibuffer_allow_text_properties,
991 !NILP (inherit_input_method),
992 !NILP (keep_all));
993 UNGCPRO;
994 return val;
997 DEFUN ("read-minibuffer", Fread_minibuffer, Sread_minibuffer, 1, 2, 0,
998 doc: /* Return a Lisp object read using the minibuffer, unevaluated.
999 Prompt with PROMPT. If non-nil, optional second arg INITIAL-CONTENTS
1000 is a string to insert in the minibuffer before reading.
1001 \(INITIAL-CONTENTS can also be a cons of a string and an integer. Such
1002 arguments are used as in `read-from-minibuffer') */)
1003 (prompt, initial_contents)
1004 Lisp_Object prompt, initial_contents;
1006 CHECK_STRING (prompt);
1007 return read_minibuf (Vminibuffer_local_map, initial_contents,
1008 prompt, Qnil, 1, Qminibuffer_history,
1009 make_number (0), Qnil, 0, 0, 0);
1012 DEFUN ("eval-minibuffer", Feval_minibuffer, Seval_minibuffer, 1, 2, 0,
1013 doc: /* Return value of Lisp expression read using the minibuffer.
1014 Prompt with PROMPT. If non-nil, optional second arg INITIAL-CONTENTS
1015 is a string to insert in the minibuffer before reading.
1016 \(INITIAL-CONTENTS can also be a cons of a string and an integer. Such
1017 arguments are used as in `read-from-minibuffer') */)
1018 (prompt, initial_contents)
1019 Lisp_Object prompt, initial_contents;
1021 return Feval (Fread_minibuffer (prompt, initial_contents));
1024 /* Functions that use the minibuffer to read various things. */
1026 DEFUN ("read-string", Fread_string, Sread_string, 1, 5, 0,
1027 doc: /* Read a string from the minibuffer, prompting with string PROMPT.
1028 If non-nil, second arg INITIAL-INPUT is a string to insert before reading.
1029 This argument has been superseded by DEFAULT-VALUE and should normally
1030 be nil in new code. It behaves as in `read-from-minibuffer'. See the
1031 documentation string of that function for details.
1032 The third arg HISTORY, if non-nil, specifies a history list
1033 and optionally the initial position in the list.
1034 See `read-from-minibuffer' for details of HISTORY argument.
1035 Fourth arg DEFAULT-VALUE is the default value. If non-nil, it is used
1036 for history commands, and as the value to return if the user enters
1037 the empty string.
1038 Fifth arg INHERIT-INPUT-METHOD, if non-nil, means the minibuffer inherits
1039 the current input method and the setting of `enable-multibyte-characters'. */)
1040 (prompt, initial_input, history, default_value, inherit_input_method)
1041 Lisp_Object prompt, initial_input, history, default_value;
1042 Lisp_Object inherit_input_method;
1044 Lisp_Object val;
1045 val = Fread_from_minibuffer (prompt, initial_input, Qnil,
1046 Qnil, history, default_value,
1047 inherit_input_method, Qnil);
1048 if (STRINGP (val) && SCHARS (val) == 0 && ! NILP (default_value))
1049 val = default_value;
1050 return val;
1053 DEFUN ("read-no-blanks-input", Fread_no_blanks_input, Sread_no_blanks_input, 1, 3, 0,
1054 doc: /* Read a string from the terminal, not allowing blanks.
1055 Prompt with PROMPT. Whitespace terminates the input. If INITIAL is
1056 non-nil, it should be a string, which is used as initial input, with
1057 point positioned at the end, so that SPACE will accept the input.
1058 \(Actually, INITIAL can also be a cons of a string and an integer.
1059 Such values are treated as in `read-from-minibuffer', but are normally
1060 not useful in this function.)
1061 Third arg INHERIT-INPUT-METHOD, if non-nil, means the minibuffer inherits
1062 the current input method and the setting of`enable-multibyte-characters'. */)
1063 (prompt, initial, inherit_input_method)
1064 Lisp_Object prompt, initial, inherit_input_method;
1066 CHECK_STRING (prompt);
1067 return read_minibuf (Vminibuffer_local_ns_map, initial, prompt, Qnil,
1068 0, Qminibuffer_history, make_number (0), Qnil, 0,
1069 !NILP (inherit_input_method), 0);
1072 DEFUN ("read-command", Fread_command, Sread_command, 1, 2, 0,
1073 doc: /* Read the name of a command and return as a symbol.
1074 Prompt with PROMPT. By default, return DEFAULT-VALUE. */)
1075 (prompt, default_value)
1076 Lisp_Object prompt, default_value;
1078 Lisp_Object name, default_string;
1080 if (NILP (default_value))
1081 default_string = Qnil;
1082 else if (SYMBOLP (default_value))
1083 default_string = SYMBOL_NAME (default_value);
1084 else
1085 default_string = default_value;
1087 name = Fcompleting_read (prompt, Vobarray, Qcommandp, Qt,
1088 Qnil, Qnil, default_string, Qnil);
1089 if (NILP (name))
1090 return name;
1091 return Fintern (name, Qnil);
1094 #ifdef NOTDEF
1095 DEFUN ("read-function", Fread_function, Sread_function, 1, 1, 0,
1096 doc: /* One arg PROMPT, a string. Read the name of a function and return as a symbol.
1097 Prompt with PROMPT. */)
1098 (prompt)
1099 Lisp_Object prompt;
1101 return Fintern (Fcompleting_read (prompt, Vobarray, Qfboundp, Qt, Qnil, Qnil, Qnil, Qnil),
1102 Qnil);
1104 #endif /* NOTDEF */
1106 DEFUN ("read-variable", Fread_variable, Sread_variable, 1, 2, 0,
1107 doc: /* Read the name of a user variable and return it as a symbol.
1108 Prompt with PROMPT. By default, return DEFAULT-VALUE.
1109 A user variable is one for which `user-variable-p' returns non-nil. */)
1110 (prompt, default_value)
1111 Lisp_Object prompt, default_value;
1113 Lisp_Object name, default_string;
1115 if (NILP (default_value))
1116 default_string = Qnil;
1117 else if (SYMBOLP (default_value))
1118 default_string = SYMBOL_NAME (default_value);
1119 else
1120 default_string = default_value;
1122 name = Fcompleting_read (prompt, Vobarray,
1123 Quser_variable_p, Qt,
1124 Qnil, Qnil, default_string, Qnil);
1125 if (NILP (name))
1126 return name;
1127 return Fintern (name, Qnil);
1130 DEFUN ("read-buffer", Fread_buffer, Sread_buffer, 1, 3, 0,
1131 doc: /* Read the name of a buffer and return as a string.
1132 Prompt with PROMPT.
1133 Optional second arg DEF is value to return if user enters an empty line.
1134 If optional third arg REQUIRE-MATCH is non-nil,
1135 only existing buffer names are allowed. */)
1136 (prompt, def, require_match)
1137 Lisp_Object prompt, def, require_match;
1139 Lisp_Object args[4];
1141 if (BUFFERP (def))
1142 def = XBUFFER (def)->name;
1144 if (NILP (Vread_buffer_function))
1146 if (!NILP (def))
1148 args[0] = build_string ("%s(default %s) ");
1149 args[1] = prompt;
1150 args[2] = def;
1151 prompt = Fformat (3, args);
1154 return Fcompleting_read (prompt, Vbuffer_alist, Qnil,
1155 require_match, Qnil, Qbuffer_name_history,
1156 def, Qnil);
1158 else
1160 args[0] = Vread_buffer_function;
1161 args[1] = prompt;
1162 args[2] = def;
1163 args[3] = require_match;
1164 return Ffuncall(4, args);
1168 static Lisp_Object
1169 minibuf_conform_representation (string, basis)
1170 Lisp_Object string, basis;
1172 if (STRING_MULTIBYTE (string) == STRING_MULTIBYTE (basis))
1173 return string;
1175 if (STRING_MULTIBYTE (string))
1176 return Fstring_make_unibyte (string);
1177 else
1178 return Fstring_make_multibyte (string);
1181 DEFUN ("try-completion", Ftry_completion, Stry_completion, 2, 3, 0,
1182 doc: /* Return common substring of all completions of STRING in ALIST.
1183 Each car of each element of ALIST (or each element if it is not a cons cell)
1184 is tested to see if it begins with STRING. The possible matches may be
1185 strings or symbols. Symbols are converted to strings before testing,
1186 see `symbol-name'.
1187 All that match are compared together; the longest initial sequence
1188 common to all matches is returned as a string.
1189 If there is no match at all, nil is returned.
1190 For a unique match which is exact, t is returned.
1192 If ALIST is a hash-table, all the string and symbol keys are the
1193 possible matches.
1194 If ALIST is an obarray, the names of all symbols in the obarray
1195 are the possible matches.
1197 ALIST can also be a function to do the completion itself.
1198 It receives three arguments: the values STRING, PREDICATE and nil.
1199 Whatever it returns becomes the value of `try-completion'.
1201 If optional third argument PREDICATE is non-nil,
1202 it is used to test each possible match.
1203 The match is a candidate only if PREDICATE returns non-nil.
1204 The argument given to PREDICATE is the alist element
1205 or the symbol from the obarray. If ALIST is a hash-table,
1206 predicate is called with two arguments: the key and the value.
1207 Additionally to this predicate, `completion-regexp-list'
1208 is used to further constrain the set of candidates. */)
1209 (string, alist, predicate)
1210 Lisp_Object string, alist, predicate;
1212 Lisp_Object bestmatch, tail, elt, eltstring;
1213 /* Size in bytes of BESTMATCH. */
1214 int bestmatchsize = 0;
1215 /* These are in bytes, too. */
1216 int compare, matchsize;
1217 int type = HASH_TABLE_P (alist) ? 3
1218 : VECTORP (alist) ? 2
1219 : NILP (alist) || (CONSP (alist)
1220 && (!SYMBOLP (XCAR (alist))
1221 || NILP (XCAR (alist))));
1222 int index = 0, obsize = 0;
1223 int matchcount = 0;
1224 int bindcount = -1;
1225 Lisp_Object bucket, zero, end, tem;
1226 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
1228 CHECK_STRING (string);
1229 if (type == 0)
1230 return call3 (alist, string, predicate, Qnil);
1232 bestmatch = bucket = Qnil;
1233 zero = make_number (0);
1235 /* If ALIST is not a list, set TAIL just for gc pro. */
1236 tail = alist;
1237 if (type == 2)
1239 obsize = XVECTOR (alist)->size;
1240 bucket = XVECTOR (alist)->contents[index];
1243 while (1)
1245 /* Get the next element of the alist, obarray, or hash-table. */
1246 /* Exit the loop if the elements are all used up. */
1247 /* elt gets the alist element or symbol.
1248 eltstring gets the name to check as a completion. */
1250 if (type == 1)
1252 if (!CONSP (tail))
1253 break;
1254 elt = XCAR (tail);
1255 eltstring = CONSP (elt) ? XCAR (elt) : elt;
1256 tail = XCDR (tail);
1258 else if (type == 2)
1260 if (!EQ (bucket, zero))
1262 elt = bucket;
1263 eltstring = elt;
1264 if (XSYMBOL (bucket)->next)
1265 XSETSYMBOL (bucket, XSYMBOL (bucket)->next);
1266 else
1267 XSETFASTINT (bucket, 0);
1269 else if (++index >= obsize)
1270 break;
1271 else
1273 bucket = XVECTOR (alist)->contents[index];
1274 continue;
1277 else /* if (type == 3) */
1279 while (index < HASH_TABLE_SIZE (XHASH_TABLE (alist))
1280 && NILP (HASH_HASH (XHASH_TABLE (alist), index)))
1281 index++;
1282 if (index >= HASH_TABLE_SIZE (XHASH_TABLE (alist)))
1283 break;
1284 else
1285 elt = eltstring = HASH_KEY (XHASH_TABLE (alist), index++);
1288 /* Is this element a possible completion? */
1290 if (SYMBOLP (eltstring))
1291 eltstring = Fsymbol_name (eltstring);
1293 if (STRINGP (eltstring)
1294 && SCHARS (string) <= SCHARS (eltstring)
1295 && (tem = Fcompare_strings (eltstring, zero,
1296 make_number (SCHARS (string)),
1297 string, zero, Qnil,
1298 completion_ignore_case ? Qt : Qnil),
1299 EQ (Qt, tem)))
1301 /* Yes. */
1302 Lisp_Object regexps;
1304 /* Ignore this element if it fails to match all the regexps. */
1306 for (regexps = Vcompletion_regexp_list; CONSP (regexps);
1307 regexps = XCDR (regexps))
1309 if (bindcount < 0) {
1310 bindcount = SPECPDL_INDEX ();
1311 specbind (Qcase_fold_search,
1312 completion_ignore_case ? Qt : Qnil);
1314 tem = Fstring_match (XCAR (regexps), eltstring, zero);
1315 if (NILP (tem))
1316 break;
1318 if (CONSP (regexps))
1319 continue;
1322 /* Ignore this element if there is a predicate
1323 and the predicate doesn't like it. */
1325 if (!NILP (predicate))
1327 if (EQ (predicate, Qcommandp))
1328 tem = Fcommandp (elt, Qnil);
1329 else
1331 if (bindcount >= 0) {
1332 unbind_to (bindcount, Qnil);
1333 bindcount = -1;
1335 GCPRO4 (tail, string, eltstring, bestmatch);
1336 tem = type == 3
1337 ? call2 (predicate, elt,
1338 HASH_VALUE (XHASH_TABLE (alist), index - 1))
1339 : call1 (predicate, elt);
1340 UNGCPRO;
1342 if (NILP (tem)) continue;
1345 /* Update computation of how much all possible completions match */
1347 if (NILP (bestmatch))
1349 matchcount = 1;
1350 bestmatch = eltstring;
1351 bestmatchsize = SCHARS (eltstring);
1353 else
1355 compare = min (bestmatchsize, SCHARS (eltstring));
1356 tem = Fcompare_strings (bestmatch, zero,
1357 make_number (compare),
1358 eltstring, zero,
1359 make_number (compare),
1360 completion_ignore_case ? Qt : Qnil);
1361 if (EQ (tem, Qt))
1362 matchsize = compare;
1363 else if (XINT (tem) < 0)
1364 matchsize = - XINT (tem) - 1;
1365 else
1366 matchsize = XINT (tem) - 1;
1368 if (matchsize < 0)
1369 /* When can this happen ? -stef */
1370 matchsize = compare;
1371 if (completion_ignore_case)
1373 /* If this is an exact match except for case,
1374 use it as the best match rather than one that is not an
1375 exact match. This way, we get the case pattern
1376 of the actual match. */
1377 if ((matchsize == SCHARS (eltstring)
1378 && matchsize < SCHARS (bestmatch))
1380 /* If there is more than one exact match ignoring case,
1381 and one of them is exact including case,
1382 prefer that one. */
1383 /* If there is no exact match ignoring case,
1384 prefer a match that does not change the case
1385 of the input. */
1386 ((matchsize == SCHARS (eltstring))
1388 (matchsize == SCHARS (bestmatch))
1389 && (tem = Fcompare_strings (eltstring, zero,
1390 make_number (SCHARS (string)),
1391 string, zero,
1392 Qnil,
1393 Qnil),
1394 EQ (Qt, tem))
1395 && (tem = Fcompare_strings (bestmatch, zero,
1396 make_number (SCHARS (string)),
1397 string, zero,
1398 Qnil,
1399 Qnil),
1400 ! EQ (Qt, tem))))
1401 bestmatch = eltstring;
1403 if (bestmatchsize != SCHARS (eltstring)
1404 || bestmatchsize != matchsize)
1405 /* Don't count the same string multiple times. */
1406 matchcount++;
1407 bestmatchsize = matchsize;
1408 if (matchsize <= SCHARS (string)
1409 && matchcount > 1)
1410 /* No need to look any further. */
1411 break;
1416 if (bindcount >= 0) {
1417 unbind_to (bindcount, Qnil);
1418 bindcount = -1;
1421 if (NILP (bestmatch))
1422 return Qnil; /* No completions found */
1423 /* If we are ignoring case, and there is no exact match,
1424 and no additional text was supplied,
1425 don't change the case of what the user typed. */
1426 if (completion_ignore_case && bestmatchsize == SCHARS (string)
1427 && SCHARS (bestmatch) > bestmatchsize)
1428 return minibuf_conform_representation (string, bestmatch);
1430 /* Return t if the supplied string is an exact match (counting case);
1431 it does not require any change to be made. */
1432 if (matchcount == 1 && bestmatchsize == SCHARS (string)
1433 && (tem = Fcompare_strings (bestmatch, make_number (0),
1434 make_number (bestmatchsize),
1435 string, make_number (0),
1436 make_number (bestmatchsize),
1437 Qnil),
1438 EQ (Qt, tem)))
1439 return Qt;
1441 XSETFASTINT (zero, 0); /* Else extract the part in which */
1442 XSETFASTINT (end, bestmatchsize); /* all completions agree */
1443 return Fsubstring (bestmatch, zero, end);
1446 DEFUN ("all-completions", Fall_completions, Sall_completions, 2, 4, 0,
1447 doc: /* Search for partial matches to STRING in ALIST.
1448 Each car of each element of ALIST (or each element if it is not a cons cell)
1449 is tested to see if it begins with STRING. The possible matches may be
1450 strings or symbols. Symbols are converted to strings before testing,
1451 see `symbol-name'.
1452 The value is a list of all the strings from ALIST that match.
1454 If ALIST is a hash-table, all the string and symbol keys are the
1455 possible matches.
1456 If ALIST is an obarray, the names of all symbols in the obarray
1457 are the possible matches.
1459 ALIST can also be a function to do the completion itself.
1460 It receives three arguments: the values STRING, PREDICATE and t.
1461 Whatever it returns becomes the value of `all-completions'.
1463 If optional third argument PREDICATE is non-nil,
1464 it is used to test each possible match.
1465 The match is a candidate only if PREDICATE returns non-nil.
1466 The argument given to PREDICATE is the alist element
1467 or the symbol from the obarray. If ALIST is a hash-table,
1468 predicate is called with two arguments: the key and the value.
1469 Additionally to this predicate, `completion-regexp-list'
1470 is used to further constrain the set of candidates.
1472 If the optional fourth argument HIDE-SPACES is non-nil,
1473 strings in ALIST that start with a space
1474 are ignored unless STRING itself starts with a space. */)
1475 (string, alist, predicate, hide_spaces)
1476 Lisp_Object string, alist, predicate, hide_spaces;
1478 Lisp_Object tail, elt, eltstring;
1479 Lisp_Object allmatches;
1480 int type = HASH_TABLE_P (alist) ? 3
1481 : VECTORP (alist) ? 2
1482 : NILP (alist) || (CONSP (alist)
1483 && (!SYMBOLP (XCAR (alist))
1484 || NILP (XCAR (alist))));
1485 int index = 0, obsize = 0;
1486 int bindcount = -1;
1487 Lisp_Object bucket, tem, zero;
1488 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
1490 CHECK_STRING (string);
1491 if (type == 0)
1492 return call3 (alist, string, predicate, Qt);
1493 allmatches = bucket = Qnil;
1494 zero = make_number (0);
1496 /* If ALIST is not a list, set TAIL just for gc pro. */
1497 tail = alist;
1498 if (type == 2)
1500 obsize = XVECTOR (alist)->size;
1501 bucket = XVECTOR (alist)->contents[index];
1504 while (1)
1506 /* Get the next element of the alist, obarray, or hash-table. */
1507 /* Exit the loop if the elements are all used up. */
1508 /* elt gets the alist element or symbol.
1509 eltstring gets the name to check as a completion. */
1511 if (type == 1)
1513 if (!CONSP (tail))
1514 break;
1515 elt = XCAR (tail);
1516 eltstring = CONSP (elt) ? XCAR (elt) : elt;
1517 tail = XCDR (tail);
1519 else if (type == 2)
1521 if (!EQ (bucket, zero))
1523 elt = bucket;
1524 eltstring = elt;
1525 if (XSYMBOL (bucket)->next)
1526 XSETSYMBOL (bucket, XSYMBOL (bucket)->next);
1527 else
1528 XSETFASTINT (bucket, 0);
1530 else if (++index >= obsize)
1531 break;
1532 else
1534 bucket = XVECTOR (alist)->contents[index];
1535 continue;
1538 else /* if (type == 3) */
1540 while (index < HASH_TABLE_SIZE (XHASH_TABLE (alist))
1541 && NILP (HASH_HASH (XHASH_TABLE (alist), index)))
1542 index++;
1543 if (index >= HASH_TABLE_SIZE (XHASH_TABLE (alist)))
1544 break;
1545 else
1546 elt = eltstring = HASH_KEY (XHASH_TABLE (alist), index++);
1549 /* Is this element a possible completion? */
1551 if (SYMBOLP (eltstring))
1552 eltstring = Fsymbol_name (eltstring);
1554 if (STRINGP (eltstring)
1555 && SCHARS (string) <= SCHARS (eltstring)
1556 /* If HIDE_SPACES, reject alternatives that start with space
1557 unless the input starts with space. */
1558 && ((SBYTES (string) > 0
1559 && SREF (string, 0) == ' ')
1560 || SREF (eltstring, 0) != ' '
1561 || NILP (hide_spaces))
1562 && (tem = Fcompare_strings (eltstring, zero,
1563 make_number (SCHARS (string)),
1564 string, zero,
1565 make_number (SCHARS (string)),
1566 completion_ignore_case ? Qt : Qnil),
1567 EQ (Qt, tem)))
1569 /* Yes. */
1570 Lisp_Object regexps;
1571 Lisp_Object zero;
1572 XSETFASTINT (zero, 0);
1574 /* Ignore this element if it fails to match all the regexps. */
1576 for (regexps = Vcompletion_regexp_list; CONSP (regexps);
1577 regexps = XCDR (regexps))
1579 if (bindcount < 0) {
1580 bindcount = SPECPDL_INDEX ();
1581 specbind (Qcase_fold_search,
1582 completion_ignore_case ? Qt : Qnil);
1584 tem = Fstring_match (XCAR (regexps), eltstring, zero);
1585 if (NILP (tem))
1586 break;
1588 if (CONSP (regexps))
1589 continue;
1592 /* Ignore this element if there is a predicate
1593 and the predicate doesn't like it. */
1595 if (!NILP (predicate))
1597 if (EQ (predicate, Qcommandp))
1598 tem = Fcommandp (elt, Qnil);
1599 else
1601 if (bindcount >= 0) {
1602 unbind_to (bindcount, Qnil);
1603 bindcount = -1;
1605 GCPRO4 (tail, eltstring, allmatches, string);
1606 tem = type == 3
1607 ? call2 (predicate, elt,
1608 HASH_VALUE (XHASH_TABLE (alist), index - 1))
1609 : call1 (predicate, elt);
1610 UNGCPRO;
1612 if (NILP (tem)) continue;
1614 /* Ok => put it on the list. */
1615 allmatches = Fcons (eltstring, allmatches);
1619 if (bindcount >= 0) {
1620 unbind_to (bindcount, Qnil);
1621 bindcount = -1;
1624 return Fnreverse (allmatches);
1627 Lisp_Object Vminibuffer_completion_table, Qminibuffer_completion_table;
1628 Lisp_Object Vminibuffer_completion_predicate, Qminibuffer_completion_predicate;
1629 Lisp_Object Vminibuffer_completion_confirm, Qminibuffer_completion_confirm;
1630 Lisp_Object Vminibuffer_completing_file_name;
1632 DEFUN ("completing-read", Fcompleting_read, Scompleting_read, 2, 8, 0,
1633 doc: /* Read a string in the minibuffer, with completion.
1634 PROMPT is a string to prompt with; normally it ends in a colon and a space.
1635 TABLE can be an list of strings, an alist, an obarray or a hash table.
1636 TABLE can also be a function to do the completion itself.
1637 PREDICATE limits completion to a subset of TABLE.
1638 See `try-completion' and `all-completions' for more details
1639 on completion, TABLE, and PREDICATE.
1641 If REQUIRE-MATCH is non-nil, the user is not allowed to exit unless
1642 the input is (or completes to) an element of TABLE or is null.
1643 If it is also not t, typing RET does not exit if it does non-null completion.
1644 If the input is null, `completing-read' returns DEF, or an empty string
1645 if DEF is nil, regardless of the value of REQUIRE-MATCH.
1647 If INITIAL-INPUT is non-nil, insert it in the minibuffer initially,
1648 with point positioned at the end.
1649 If it is (STRING . POSITION), the initial input is STRING, but point
1650 is placed at _zero-indexed_ position POSITION in STRING. (*Note*
1651 that this is different from `read-from-minibuffer' and related
1652 functions, which use one-indexing for POSITION.) This feature is
1653 deprecated--it is best to pass nil for INITIAL-INPUT and supply the
1654 default value DEF instead. The user can yank the default value into
1655 the minibuffer easily using \\[next-history-element].
1657 HIST, if non-nil, specifies a history list and optionally the initial
1658 position in the list. It can be a symbol, which is the history list
1659 variable to use, or it can be a cons cell (HISTVAR . HISTPOS). In
1660 that case, HISTVAR is the history list variable to use, and HISTPOS
1661 is the initial position (the position in the list used by the
1662 minibuffer history commands). For consistency, you should also
1663 specify that element of the history as the value of
1664 INITIAL-INPUT. (This is the only case in which you should use
1665 INITIAL-INPUT instead of DEF.) Positions are counted starting from
1666 1 at the beginning of the list. The variable `history-length'
1667 controls the maximum length of a history list.
1669 DEF, if non-nil, is the default value.
1671 If INHERIT-INPUT-METHOD is non-nil, the minibuffer inherits
1672 the current input method and the setting of `enable-multibyte-characters'.
1674 Completion ignores case if the ambient value of
1675 `completion-ignore-case' is non-nil. */)
1676 (prompt, table, predicate, require_match, initial_input, hist, def, inherit_input_method)
1677 Lisp_Object prompt, table, predicate, require_match, initial_input;
1678 Lisp_Object hist, def, inherit_input_method;
1680 Lisp_Object val, histvar, histpos, position;
1681 Lisp_Object init;
1682 int pos = 0;
1683 int count = SPECPDL_INDEX ();
1684 struct gcpro gcpro1;
1686 init = initial_input;
1687 GCPRO1 (def);
1689 specbind (Qminibuffer_completion_table, table);
1690 specbind (Qminibuffer_completion_predicate, predicate);
1691 specbind (Qminibuffer_completion_confirm,
1692 EQ (require_match, Qt) ? Qnil : require_match);
1693 last_exact_completion = Qnil;
1695 position = Qnil;
1696 if (!NILP (init))
1698 if (CONSP (init))
1700 position = Fcdr (init);
1701 init = Fcar (init);
1703 CHECK_STRING (init);
1704 if (!NILP (position))
1706 CHECK_NUMBER (position);
1707 /* Convert to distance from end of input. */
1708 pos = XINT (position) - SCHARS (init);
1712 if (SYMBOLP (hist))
1714 histvar = hist;
1715 histpos = Qnil;
1717 else
1719 histvar = Fcar_safe (hist);
1720 histpos = Fcdr_safe (hist);
1722 if (NILP (histvar))
1723 histvar = Qminibuffer_history;
1724 if (NILP (histpos))
1725 XSETFASTINT (histpos, 0);
1727 val = read_minibuf (NILP (require_match)
1728 ? Vminibuffer_local_completion_map
1729 : Vminibuffer_local_must_match_map,
1730 init, prompt, make_number (pos), 0,
1731 histvar, histpos, def, 0,
1732 !NILP (inherit_input_method), 0);
1734 if (STRINGP (val) && SCHARS (val) == 0 && ! NILP (def))
1735 val = def;
1737 RETURN_UNGCPRO (unbind_to (count, val));
1740 Lisp_Object Fminibuffer_completion_help ();
1741 Lisp_Object Fassoc_string ();
1743 /* Test whether TXT is an exact completion. */
1744 DEFUN ("test-completion", Ftest_completion, Stest_completion, 2, 3, 0,
1745 doc: /* Return non-nil if STRING is a valid completion.
1746 Takes the same arguments as `all-completions' and `try-completion'.
1747 If ALIST is a function, it is called with three arguments:
1748 the values STRING, PREDICATE and `lambda'. */)
1749 (string, alist, predicate)
1750 Lisp_Object string, alist, predicate;
1752 Lisp_Object regexps, tail, tem = Qnil;
1753 int i = 0;
1755 CHECK_STRING (string);
1757 if ((CONSP (alist) && (!SYMBOLP (XCAR (alist)) || NILP (XCAR (alist))))
1758 || NILP (alist))
1760 tem = Fassoc_string (string, alist, completion_ignore_case ? Qt : Qnil);
1761 if NILP (tem)
1762 return Qnil;
1764 else if (VECTORP (alist))
1766 /* Bypass intern-soft as that loses for nil. */
1767 tem = oblookup (alist,
1768 SDATA (string),
1769 SCHARS (string),
1770 SBYTES (string));
1771 if (!SYMBOLP (tem))
1773 if (STRING_MULTIBYTE (string))
1774 string = Fstring_make_unibyte (string);
1775 else
1776 string = Fstring_make_multibyte (string);
1778 tem = oblookup (alist,
1779 SDATA (string),
1780 SCHARS (string),
1781 SBYTES (string));
1784 if (completion_ignore_case && !SYMBOLP (tem))
1786 for (i = XVECTOR (alist)->size - 1; i >= 0; i--)
1788 tail = XVECTOR (alist)->contents[i];
1789 if (SYMBOLP (tail))
1790 while (1)
1792 if (EQ((Fcompare_strings (string, make_number (0), Qnil,
1793 Fsymbol_name (tail),
1794 make_number (0) , Qnil, Qt)),
1795 Qt))
1797 tem = tail;
1798 break;
1800 if (XSYMBOL (tail)->next == 0)
1801 break;
1802 XSETSYMBOL (tail, XSYMBOL (tail)->next);
1807 if (!SYMBOLP (tem))
1808 return Qnil;
1810 else if (HASH_TABLE_P (alist))
1812 struct Lisp_Hash_Table *h = XHASH_TABLE (alist);
1813 i = hash_lookup (h, string, NULL);
1814 if (i >= 0)
1815 tem = HASH_KEY (h, i);
1816 else
1817 for (i = 0; i < HASH_TABLE_SIZE (h); ++i)
1818 if (!NILP (HASH_HASH (h, i)) &&
1819 EQ (Fcompare_strings (string, make_number (0), Qnil,
1820 HASH_KEY (h, i), make_number (0) , Qnil,
1821 completion_ignore_case ? Qt : Qnil),
1822 Qt))
1824 tem = HASH_KEY (h, i);
1825 break;
1827 if (!STRINGP (tem))
1828 return Qnil;
1830 else
1831 return call3 (alist, string, predicate, Qlambda);
1833 /* Reject this element if it fails to match all the regexps. */
1834 if (CONSP (Vcompletion_regexp_list))
1836 int count = SPECPDL_INDEX ();
1837 specbind (Qcase_fold_search, completion_ignore_case ? Qt : Qnil);
1838 for (regexps = Vcompletion_regexp_list; CONSP (regexps);
1839 regexps = XCDR (regexps))
1841 if (NILP (Fstring_match (XCAR (regexps),
1842 SYMBOLP (tem) ? string : tem,
1843 Qnil)))
1844 return unbind_to (count, Qnil);
1846 unbind_to (count, Qnil);
1849 /* Finally, check the predicate. */
1850 if (!NILP (predicate))
1852 return HASH_TABLE_P (alist)
1853 ? call2 (predicate, tem, HASH_VALUE (XHASH_TABLE (alist), i))
1854 : call1 (predicate, tem);
1856 else
1857 return Qt;
1860 /* returns:
1861 * 0 no possible completion
1862 * 1 was already an exact and unique completion
1863 * 3 was already an exact completion
1864 * 4 completed to an exact completion
1865 * 5 some completion happened
1866 * 6 no completion happened
1869 do_completion ()
1871 Lisp_Object completion, string, tem;
1872 int completedp;
1873 Lisp_Object last;
1874 struct gcpro gcpro1, gcpro2;
1876 completion = Ftry_completion (minibuffer_completion_contents (),
1877 Vminibuffer_completion_table,
1878 Vminibuffer_completion_predicate);
1879 last = last_exact_completion;
1880 last_exact_completion = Qnil;
1882 GCPRO2 (completion, last);
1884 if (NILP (completion))
1886 bitch_at_user ();
1887 temp_echo_area_glyphs (build_string (" [No match]"));
1888 UNGCPRO;
1889 return 0;
1892 if (EQ (completion, Qt)) /* exact and unique match */
1894 UNGCPRO;
1895 return 1;
1898 string = minibuffer_completion_contents ();
1900 /* COMPLETEDP should be true if some completion was done, which
1901 doesn't include simply changing the case of the entered string.
1902 However, for appearance, the string is rewritten if the case
1903 changes. */
1904 tem = Fcompare_strings (completion, Qnil, Qnil, string, Qnil, Qnil, Qt);
1905 completedp = !EQ (tem, Qt);
1907 tem = Fcompare_strings (completion, Qnil, Qnil, string, Qnil, Qnil, Qnil);
1908 if (!EQ (tem, Qt))
1909 /* Rewrite the user's input. */
1911 int prompt_end = XINT (Fminibuffer_prompt_end ());
1912 /* Some completion happened */
1914 if (! NILP (Vminibuffer_completing_file_name)
1915 && SREF (completion, SBYTES (completion) - 1) == '/'
1916 && PT < ZV
1917 && FETCH_CHAR (PT_BYTE) == '/')
1919 del_range (prompt_end, PT + 1);
1921 else
1922 del_range (prompt_end, PT);
1924 Finsert (1, &completion);
1926 if (! completedp)
1927 /* The case of the string changed, but that's all. We're not
1928 sure whether this is a unique completion or not, so try again
1929 using the real case (this shouldn't recurse again, because
1930 the next time try-completion will return either `t' or the
1931 exact string). */
1933 UNGCPRO;
1934 return do_completion ();
1938 /* It did find a match. Do we match some possibility exactly now? */
1939 tem = Ftest_completion (Fminibuffer_contents (),
1940 Vminibuffer_completion_table,
1941 Vminibuffer_completion_predicate);
1942 if (NILP (tem))
1944 /* not an exact match */
1945 UNGCPRO;
1946 if (completedp)
1947 return 5;
1948 else if (!NILP (Vcompletion_auto_help))
1949 Fminibuffer_completion_help ();
1950 else
1951 temp_echo_area_glyphs (build_string (" [Next char not unique]"));
1952 return 6;
1954 else if (completedp)
1956 UNGCPRO;
1957 return 4;
1959 /* If the last exact completion and this one were the same,
1960 it means we've already given a "Complete but not unique"
1961 message and the user's hit TAB again, so now we give him help. */
1962 last_exact_completion = completion;
1963 if (!NILP (last))
1965 tem = minibuffer_completion_contents ();
1966 if (!NILP (Fequal (tem, last)))
1967 Fminibuffer_completion_help ();
1969 UNGCPRO;
1970 return 3;
1973 /* Like assoc but assumes KEY is a string, and ignores case if appropriate. */
1975 DEFUN ("assoc-string", Fassoc_string, Sassoc_string, 2, 3, 0,
1976 doc: /* Like `assoc' but specifically for strings.
1977 Unibyte strings are converted to multibyte for comparison.
1978 And case is ignored if CASE-FOLD is non-nil.
1979 As opposed to `assoc', it will also match an entry consisting of a single
1980 string rather than a cons cell whose car is a string. */)
1981 (key, list, case_fold)
1982 register Lisp_Object key;
1983 Lisp_Object list, case_fold;
1985 register Lisp_Object tail;
1987 for (tail = list; !NILP (tail); tail = Fcdr (tail))
1989 register Lisp_Object elt, tem, thiscar;
1990 elt = Fcar (tail);
1991 thiscar = CONSP (elt) ? XCAR (elt) : elt;
1992 if (!STRINGP (thiscar))
1993 continue;
1994 tem = Fcompare_strings (thiscar, make_number (0), Qnil,
1995 key, make_number (0), Qnil,
1996 case_fold);
1997 if (EQ (tem, Qt))
1998 return elt;
1999 QUIT;
2001 return Qnil;
2004 DEFUN ("minibuffer-complete", Fminibuffer_complete, Sminibuffer_complete, 0, 0, "",
2005 doc: /* Complete the minibuffer contents as far as possible.
2006 Return nil if there is no valid completion, else t.
2007 If no characters can be completed, display a list of possible completions.
2008 If you repeat this command after it displayed such a list,
2009 scroll the window of possible completions. */)
2012 register int i;
2013 Lisp_Object window, tem;
2015 /* If the previous command was not this,
2016 mark the completion buffer obsolete. */
2017 if (! EQ (current_kboard->Vlast_command, Vthis_command))
2018 Vminibuf_scroll_window = Qnil;
2020 window = Vminibuf_scroll_window;
2021 /* If there's a fresh completion window with a live buffer,
2022 and this command is repeated, scroll that window. */
2023 if (! NILP (window) && ! NILP (XWINDOW (window)->buffer)
2024 && !NILP (XBUFFER (XWINDOW (window)->buffer)->name))
2026 struct buffer *obuf = current_buffer;
2028 Fset_buffer (XWINDOW (window)->buffer);
2029 tem = Fpos_visible_in_window_p (make_number (ZV), window, Qnil);
2030 if (! NILP (tem))
2031 /* If end is in view, scroll up to the beginning. */
2032 Fset_window_start (window, make_number (BEGV), Qnil);
2033 else
2034 /* Else scroll down one screen. */
2035 Fscroll_other_window (Qnil);
2037 set_buffer_internal (obuf);
2038 return Qnil;
2041 i = do_completion ();
2042 switch (i)
2044 case 0:
2045 return Qnil;
2047 case 1:
2048 if (PT != ZV)
2049 Fgoto_char (make_number (ZV));
2050 temp_echo_area_glyphs (build_string (" [Sole completion]"));
2051 break;
2053 case 3:
2054 if (PT != ZV)
2055 Fgoto_char (make_number (ZV));
2056 temp_echo_area_glyphs (build_string (" [Complete, but not unique]"));
2057 break;
2060 return Qt;
2063 /* Subroutines of Fminibuffer_complete_and_exit. */
2065 /* This one is called by internal_condition_case to do the real work. */
2067 Lisp_Object
2068 complete_and_exit_1 ()
2070 return make_number (do_completion ());
2073 /* This one is called by internal_condition_case if an error happens.
2074 Pretend the current value is an exact match. */
2076 Lisp_Object
2077 complete_and_exit_2 (ignore)
2078 Lisp_Object ignore;
2080 return make_number (1);
2083 EXFUN (Fexit_minibuffer, 0) NO_RETURN;
2085 DEFUN ("minibuffer-complete-and-exit", Fminibuffer_complete_and_exit,
2086 Sminibuffer_complete_and_exit, 0, 0, "",
2087 doc: /* If the minibuffer contents is a valid completion then exit.
2088 Otherwise try to complete it. If completion leads to a valid completion,
2089 a repetition of this command will exit. */)
2092 register int i;
2093 Lisp_Object val;
2095 /* Allow user to specify null string */
2096 if (XINT (Fminibuffer_prompt_end ()) == ZV)
2097 goto exit;
2099 val = Fminibuffer_contents ();
2100 if (!NILP (Ftest_completion (val,
2101 Vminibuffer_completion_table,
2102 Vminibuffer_completion_predicate)))
2104 if (completion_ignore_case)
2105 { /* Fixup case of the field, if necessary. */
2106 Lisp_Object compl
2107 = Ftry_completion (val,
2108 Vminibuffer_completion_table,
2109 Vminibuffer_completion_predicate);
2110 if (STRINGP (compl)
2111 /* If it weren't for this piece of paranoia, I'd replace
2112 the whole thing with a call to do_completion. */
2113 && EQ (Flength (val), Flength (compl)))
2115 del_range (XINT (Fminibuffer_prompt_end ()), ZV);
2116 Finsert (1, &compl);
2119 goto exit;
2122 /* Call do_completion, but ignore errors. */
2123 SET_PT (ZV);
2124 val = internal_condition_case (complete_and_exit_1, Qerror,
2125 complete_and_exit_2);
2127 i = XFASTINT (val);
2128 switch (i)
2130 case 1:
2131 case 3:
2132 goto exit;
2134 case 4:
2135 if (!NILP (Vminibuffer_completion_confirm))
2137 temp_echo_area_glyphs (build_string (" [Confirm]"));
2138 return Qnil;
2140 else
2141 goto exit;
2143 default:
2144 return Qnil;
2146 exit:
2147 return Fexit_minibuffer ();
2148 /* NOTREACHED */
2151 DEFUN ("minibuffer-complete-word", Fminibuffer_complete_word, Sminibuffer_complete_word,
2152 0, 0, "",
2153 doc: /* Complete the minibuffer contents at most a single word.
2154 After one word is completed as much as possible, a space or hyphen
2155 is added, provided that matches some possible completion.
2156 Return nil if there is no valid completion, else t. */)
2159 Lisp_Object completion, tem, tem1;
2160 register int i, i_byte;
2161 register const unsigned char *completion_string;
2162 struct gcpro gcpro1, gcpro2;
2163 int prompt_end_charpos = XINT (Fminibuffer_prompt_end ());
2165 /* We keep calling Fbuffer_string rather than arrange for GC to
2166 hold onto a pointer to one of the strings thus made. */
2168 completion = Ftry_completion (minibuffer_completion_contents (),
2169 Vminibuffer_completion_table,
2170 Vminibuffer_completion_predicate);
2171 if (NILP (completion))
2173 bitch_at_user ();
2174 temp_echo_area_glyphs (build_string (" [No match]"));
2175 return Qnil;
2177 if (EQ (completion, Qt))
2178 return Qnil;
2180 #if 0 /* How the below code used to look, for reference. */
2181 tem = Fminibuffer_contents ();
2182 b = SDATA (tem);
2183 i = ZV - 1 - SCHARS (completion);
2184 p = SDATA (completion);
2185 if (i > 0 ||
2186 0 <= scmp (b, p, ZV - 1))
2188 i = 1;
2189 /* Set buffer to longest match of buffer tail and completion head. */
2190 while (0 <= scmp (b + i, p, ZV - 1 - i))
2191 i++;
2192 del_range (1, i + 1);
2193 SET_PT (ZV);
2195 #else /* Rewritten code */
2197 int buffer_nchars, completion_nchars;
2199 CHECK_STRING (completion);
2200 tem = minibuffer_completion_contents ();
2201 GCPRO2 (completion, tem);
2202 /* If reading a file name,
2203 expand any $ENVVAR refs in the buffer and in TEM. */
2204 if (! NILP (Vminibuffer_completing_file_name))
2206 Lisp_Object substituted;
2207 substituted = Fsubstitute_in_file_name (tem);
2208 if (! EQ (substituted, tem))
2210 tem = substituted;
2211 del_range (prompt_end_charpos, PT);
2212 Finsert (1, &tem);
2215 buffer_nchars = SCHARS (tem); /* # chars in what we completed. */
2216 completion_nchars = SCHARS (completion);
2217 i = buffer_nchars - completion_nchars;
2218 if (i > 0
2220 (tem1 = Fcompare_strings (tem, make_number (0),
2221 make_number (buffer_nchars),
2222 completion, make_number (0),
2223 make_number (buffer_nchars),
2224 completion_ignore_case ? Qt : Qnil),
2225 ! EQ (tem1, Qt)))
2227 int start_pos;
2229 /* Make buffer (before point) contain the longest match
2230 of TEM's tail and COMPLETION's head. */
2231 if (i <= 0) i = 1;
2232 start_pos= i;
2233 buffer_nchars -= i;
2234 while (i > 0)
2236 tem1 = Fcompare_strings (tem, make_number (start_pos), Qnil,
2237 completion, make_number (0),
2238 make_number (buffer_nchars),
2239 completion_ignore_case ? Qt : Qnil);
2240 start_pos++;
2241 if (EQ (tem1, Qt))
2242 break;
2243 i++;
2244 buffer_nchars--;
2246 del_range (start_pos, start_pos + buffer_nchars);
2248 UNGCPRO;
2250 #endif /* Rewritten code */
2253 int prompt_end_bytepos;
2254 prompt_end_bytepos = CHAR_TO_BYTE (prompt_end_charpos);
2255 i = PT - prompt_end_charpos;
2256 i_byte = PT_BYTE - prompt_end_bytepos;
2259 /* If completion finds next char not unique,
2260 consider adding a space or a hyphen. */
2261 if (i == SCHARS (completion))
2263 GCPRO1 (completion);
2264 tem = Ftry_completion (concat2 (minibuffer_completion_contents (),
2265 build_string (" ")),
2266 Vminibuffer_completion_table,
2267 Vminibuffer_completion_predicate);
2268 UNGCPRO;
2270 if (STRINGP (tem))
2271 completion = tem;
2272 else
2274 GCPRO1 (completion);
2275 tem =
2276 Ftry_completion (concat2 (minibuffer_completion_contents (),
2277 build_string ("-")),
2278 Vminibuffer_completion_table,
2279 Vminibuffer_completion_predicate);
2280 UNGCPRO;
2282 if (STRINGP (tem))
2283 completion = tem;
2287 /* Now find first word-break in the stuff found by completion.
2288 i gets index in string of where to stop completing. */
2290 int len, c;
2291 int bytes = SBYTES (completion);
2292 completion_string = SDATA (completion);
2293 for (; i_byte < SBYTES (completion); i_byte += len, i++)
2295 c = STRING_CHAR_AND_LENGTH (completion_string + i_byte,
2296 bytes - i_byte,
2297 len);
2298 if (SYNTAX (c) != Sword)
2300 i_byte += len;
2301 i++;
2302 break;
2307 /* If got no characters, print help for user. */
2309 if (i == PT - prompt_end_charpos)
2311 if (!NILP (Vcompletion_auto_help))
2312 Fminibuffer_completion_help ();
2313 return Qnil;
2316 /* Otherwise insert in minibuffer the chars we got */
2318 if (! NILP (Vminibuffer_completing_file_name)
2319 && SREF (completion, SBYTES (completion) - 1) == '/'
2320 && PT < ZV
2321 && FETCH_CHAR (PT_BYTE) == '/')
2323 del_range (prompt_end_charpos, PT + 1);
2325 else
2326 del_range (prompt_end_charpos, PT);
2328 insert_from_string (completion, 0, 0, i, i_byte, 1);
2329 return Qt;
2332 DEFUN ("display-completion-list", Fdisplay_completion_list, Sdisplay_completion_list,
2333 1, 1, 0,
2334 doc: /* Display the list of completions, COMPLETIONS, using `standard-output'.
2335 Each element may be just a symbol or string
2336 or may be a list of two strings to be printed as if concatenated.
2337 If it is a list of two strings, the first is the actual completion
2338 alternative, the second serves as annotation.
2339 `standard-output' must be a buffer.
2340 The actual completion alternatives, as inserted, are given `mouse-face'
2341 properties of `highlight'.
2342 At the end, this runs the normal hook `completion-setup-hook'.
2343 It can find the completion buffer in `standard-output'. */)
2344 (completions)
2345 Lisp_Object completions;
2347 Lisp_Object tail, elt;
2348 register int i;
2349 int column = 0;
2350 struct gcpro gcpro1, gcpro2;
2351 struct buffer *old = current_buffer;
2352 int first = 1;
2354 /* Note that (when it matters) every variable
2355 points to a non-string that is pointed to by COMPLETIONS,
2356 except for ELT. ELT can be pointing to a string
2357 when terpri or Findent_to calls a change hook. */
2358 elt = Qnil;
2359 GCPRO2 (completions, elt);
2361 if (BUFFERP (Vstandard_output))
2362 set_buffer_internal (XBUFFER (Vstandard_output));
2364 if (NILP (completions))
2365 write_string ("There are no possible completions of what you have typed.",
2366 -1);
2367 else
2369 write_string ("Possible completions are:", -1);
2370 for (tail = completions, i = 0; !NILP (tail); tail = Fcdr (tail), i++)
2372 Lisp_Object tem, string;
2373 int length;
2374 Lisp_Object startpos, endpos;
2376 startpos = Qnil;
2378 elt = Fcar (tail);
2379 if (SYMBOLP (elt))
2380 elt = SYMBOL_NAME (elt);
2381 /* Compute the length of this element. */
2382 if (CONSP (elt))
2384 tem = XCAR (elt);
2385 CHECK_STRING (tem);
2386 length = SCHARS (tem);
2388 tem = Fcar (XCDR (elt));
2389 CHECK_STRING (tem);
2390 length += SCHARS (tem);
2392 else
2394 CHECK_STRING (elt);
2395 length = SCHARS (elt);
2398 /* This does a bad job for narrower than usual windows.
2399 Sadly, the window it will appear in is not known
2400 until after the text has been made. */
2402 if (BUFFERP (Vstandard_output))
2403 XSETINT (startpos, BUF_PT (XBUFFER (Vstandard_output)));
2405 /* If the previous completion was very wide,
2406 or we have two on this line already,
2407 don't put another on the same line. */
2408 if (column > 33 || first
2409 /* If this is really wide, don't put it second on a line. */
2410 || (column > 0 && length > 45))
2412 Fterpri (Qnil);
2413 column = 0;
2415 /* Otherwise advance to column 35. */
2416 else
2418 if (BUFFERP (Vstandard_output))
2420 tem = Findent_to (make_number (35), make_number (2));
2422 column = XINT (tem);
2424 else
2428 write_string (" ", -1);
2429 column++;
2431 while (column < 35);
2435 if (BUFFERP (Vstandard_output))
2437 XSETINT (endpos, BUF_PT (XBUFFER (Vstandard_output)));
2438 Fset_text_properties (startpos, endpos,
2439 Qnil, Vstandard_output);
2442 /* Output this element.
2443 If necessary, convert it to unibyte or to multibyte first. */
2444 if (CONSP (elt))
2445 string = Fcar (elt);
2446 else
2447 string = elt;
2448 if (NILP (current_buffer->enable_multibyte_characters)
2449 && STRING_MULTIBYTE (string))
2450 string = Fstring_make_unibyte (string);
2451 else if (!NILP (current_buffer->enable_multibyte_characters)
2452 && !STRING_MULTIBYTE (string))
2453 string = Fstring_make_multibyte (string);
2455 if (BUFFERP (Vstandard_output))
2457 XSETINT (startpos, BUF_PT (XBUFFER (Vstandard_output)));
2459 Fprinc (string, Qnil);
2461 XSETINT (endpos, BUF_PT (XBUFFER (Vstandard_output)));
2463 Fput_text_property (startpos, endpos,
2464 Qmouse_face, intern ("highlight"),
2465 Vstandard_output);
2467 else
2469 Fprinc (string, Qnil);
2472 /* Output the annotation for this element. */
2473 if (CONSP (elt))
2475 if (BUFFERP (Vstandard_output))
2477 XSETINT (startpos, BUF_PT (XBUFFER (Vstandard_output)));
2479 Fprinc (Fcar (Fcdr (elt)), Qnil);
2481 XSETINT (endpos, BUF_PT (XBUFFER (Vstandard_output)));
2483 Fset_text_properties (startpos, endpos, Qnil,
2484 Vstandard_output);
2486 else
2488 Fprinc (Fcar (Fcdr (elt)), Qnil);
2493 /* Update COLUMN for what we have output. */
2494 column += length;
2496 /* If output is to a buffer, recompute COLUMN in a way
2497 that takes account of character widths. */
2498 if (BUFFERP (Vstandard_output))
2500 tem = Fcurrent_column ();
2501 column = XINT (tem);
2504 first = 0;
2508 UNGCPRO;
2510 if (BUFFERP (Vstandard_output))
2511 set_buffer_internal (old);
2513 if (!NILP (Vrun_hooks))
2514 call1 (Vrun_hooks, intern ("completion-setup-hook"));
2516 return Qnil;
2519 DEFUN ("minibuffer-completion-help", Fminibuffer_completion_help, Sminibuffer_completion_help,
2520 0, 0, "",
2521 doc: /* Display a list of possible completions of the current minibuffer contents. */)
2524 Lisp_Object completions;
2526 message ("Making completion list...");
2527 completions = Fall_completions (minibuffer_completion_contents (),
2528 Vminibuffer_completion_table,
2529 Vminibuffer_completion_predicate,
2530 Qt);
2531 clear_message (1, 0);
2533 if (NILP (completions))
2535 bitch_at_user ();
2536 temp_echo_area_glyphs (build_string (" [No completions]"));
2538 else
2539 internal_with_output_to_temp_buffer ("*Completions*",
2540 Fdisplay_completion_list,
2541 Fsort (completions, Qstring_lessp));
2542 return Qnil;
2545 DEFUN ("self-insert-and-exit", Fself_insert_and_exit, Sself_insert_and_exit, 0, 0, "",
2546 doc: /* Terminate minibuffer input. */)
2549 if (INTEGERP (last_command_char))
2550 internal_self_insert (XINT (last_command_char), 0);
2551 else
2552 bitch_at_user ();
2554 return Fexit_minibuffer ();
2557 DEFUN ("exit-minibuffer", Fexit_minibuffer, Sexit_minibuffer, 0, 0, "",
2558 doc: /* Terminate this minibuffer argument. */)
2561 /* If the command that uses this has made modifications in the minibuffer,
2562 we don't want them to cause deactivation of the mark in the original
2563 buffer.
2564 A better solution would be to make deactivate-mark buffer-local
2565 (or to turn it into a list of buffers, ...), but in the mean time,
2566 this should do the trick in most cases. */
2567 Vdeactivate_mark = Qnil;
2568 Fthrow (Qexit, Qnil);
2571 DEFUN ("minibuffer-depth", Fminibuffer_depth, Sminibuffer_depth, 0, 0, 0,
2572 doc: /* Return current depth of activations of minibuffer, a nonnegative integer. */)
2575 return make_number (minibuf_level);
2578 DEFUN ("minibuffer-prompt", Fminibuffer_prompt, Sminibuffer_prompt, 0, 0, 0,
2579 doc: /* Return the prompt string of the currently-active minibuffer.
2580 If no minibuffer is active, return nil. */)
2583 return Fcopy_sequence (minibuf_prompt);
2587 /* Temporarily display STRING at the end of the current
2588 minibuffer contents. This is used to display things like
2589 "[No Match]" when the user requests a completion for a prefix
2590 that has no possible completions, and other quick, unobtrusive
2591 messages. */
2593 void
2594 temp_echo_area_glyphs (string)
2595 Lisp_Object string;
2597 int osize = ZV;
2598 int osize_byte = ZV_BYTE;
2599 int opoint = PT;
2600 int opoint_byte = PT_BYTE;
2601 Lisp_Object oinhibit;
2602 oinhibit = Vinhibit_quit;
2604 /* Clear out any old echo-area message to make way for our new thing. */
2605 message (0);
2607 SET_PT_BOTH (osize, osize_byte);
2608 insert_from_string (string, 0, 0, SCHARS (string), SBYTES (string), 0);
2609 SET_PT_BOTH (opoint, opoint_byte);
2610 Vinhibit_quit = Qt;
2611 Fsit_for (make_number (2), Qnil, Qnil);
2612 del_range_both (osize, osize_byte, ZV, ZV_BYTE, 1);
2613 SET_PT_BOTH (opoint, opoint_byte);
2614 if (!NILP (Vquit_flag))
2616 Vquit_flag = Qnil;
2617 Vunread_command_events = Fcons (make_number (quit_char), Qnil);
2619 Vinhibit_quit = oinhibit;
2622 DEFUN ("minibuffer-message", Fminibuffer_message, Sminibuffer_message,
2623 1, 1, 0,
2624 doc: /* Temporarily display STRING at the end of the minibuffer.
2625 The text is displayed for two seconds,
2626 or until the next input event arrives, whichever comes first. */)
2627 (string)
2628 Lisp_Object string;
2630 CHECK_STRING (string);
2631 temp_echo_area_glyphs (string);
2632 return Qnil;
2635 void
2636 init_minibuf_once ()
2638 Vminibuffer_list = Qnil;
2639 staticpro (&Vminibuffer_list);
2642 void
2643 syms_of_minibuf ()
2645 minibuf_level = 0;
2646 minibuf_prompt = Qnil;
2647 staticpro (&minibuf_prompt);
2649 minibuf_save_list = Qnil;
2650 staticpro (&minibuf_save_list);
2652 Qread_file_name_internal = intern ("read-file-name-internal");
2653 staticpro (&Qread_file_name_internal);
2655 Qminibuffer_default = intern ("minibuffer-default");
2656 staticpro (&Qminibuffer_default);
2657 Fset (Qminibuffer_default, Qnil);
2659 Qminibuffer_completion_table = intern ("minibuffer-completion-table");
2660 staticpro (&Qminibuffer_completion_table);
2662 Qminibuffer_completion_confirm = intern ("minibuffer-completion-confirm");
2663 staticpro (&Qminibuffer_completion_confirm);
2665 Qminibuffer_completion_predicate = intern ("minibuffer-completion-predicate");
2666 staticpro (&Qminibuffer_completion_predicate);
2668 staticpro (&last_exact_completion);
2669 last_exact_completion = Qnil;
2671 staticpro (&last_minibuf_string);
2672 last_minibuf_string = Qnil;
2674 Quser_variable_p = intern ("user-variable-p");
2675 staticpro (&Quser_variable_p);
2677 Qminibuffer_history = intern ("minibuffer-history");
2678 staticpro (&Qminibuffer_history);
2680 Qbuffer_name_history = intern ("buffer-name-history");
2681 staticpro (&Qbuffer_name_history);
2682 Fset (Qbuffer_name_history, Qnil);
2684 Qminibuffer_setup_hook = intern ("minibuffer-setup-hook");
2685 staticpro (&Qminibuffer_setup_hook);
2687 Qminibuffer_exit_hook = intern ("minibuffer-exit-hook");
2688 staticpro (&Qminibuffer_exit_hook);
2690 Qhistory_length = intern ("history-length");
2691 staticpro (&Qhistory_length);
2693 Qcurrent_input_method = intern ("current-input-method");
2694 staticpro (&Qcurrent_input_method);
2696 Qactivate_input_method = intern ("activate-input-method");
2697 staticpro (&Qactivate_input_method);
2699 Qcase_fold_search = intern ("case-fold-search");
2700 staticpro (&Qcase_fold_search);
2702 DEFVAR_LISP ("read-buffer-function", &Vread_buffer_function,
2703 doc: /* If this is non-nil, `read-buffer' does its work by calling this function. */);
2704 Vread_buffer_function = Qnil;
2706 DEFVAR_LISP ("minibuffer-setup-hook", &Vminibuffer_setup_hook,
2707 doc: /* Normal hook run just after entry to minibuffer. */);
2708 Vminibuffer_setup_hook = Qnil;
2710 DEFVAR_LISP ("minibuffer-exit-hook", &Vminibuffer_exit_hook,
2711 doc: /* Normal hook run just after exit from minibuffer. */);
2712 Vminibuffer_exit_hook = Qnil;
2714 DEFVAR_LISP ("history-length", &Vhistory_length,
2715 doc: /* *Maximum length for history lists before truncation takes place.
2716 A number means that length; t means infinite. Truncation takes place
2717 just after a new element is inserted. Setting the history-length
2718 property of a history variable overrides this default. */);
2719 XSETFASTINT (Vhistory_length, 30);
2721 DEFVAR_BOOL ("history-delete-duplicates", &history_delete_duplicates,
2722 doc: /* *Non-nil means to delete duplicates in history.
2723 If set to t when adding a new history element, all previous identical
2724 elements are deleted. */);
2725 history_delete_duplicates = 0;
2727 DEFVAR_LISP ("completion-auto-help", &Vcompletion_auto_help,
2728 doc: /* *Non-nil means automatically provide help for invalid completion input. */);
2729 Vcompletion_auto_help = Qt;
2731 DEFVAR_BOOL ("completion-ignore-case", &completion_ignore_case,
2732 doc: /* Non-nil means don't consider case significant in completion.
2734 For file-name completion, the variable `read-file-name-completion-ignore-case'
2735 controls the behavior, rather than this variable. */);
2736 completion_ignore_case = 0;
2738 DEFVAR_BOOL ("enable-recursive-minibuffers", &enable_recursive_minibuffers,
2739 doc: /* *Non-nil means to allow minibuffer commands while in the minibuffer.
2740 This variable makes a difference whenever the minibuffer window is active. */);
2741 enable_recursive_minibuffers = 0;
2743 DEFVAR_LISP ("minibuffer-completion-table", &Vminibuffer_completion_table,
2744 doc: /* Alist or obarray used for completion in the minibuffer.
2745 This becomes the ALIST argument to `try-completion' and `all-completions'.
2746 The value can also be a list of strings or a hash table.
2748 The value may alternatively be a function, which is given three arguments:
2749 STRING, the current buffer contents;
2750 PREDICATE, the predicate for filtering possible matches;
2751 CODE, which says what kind of things to do.
2752 CODE can be nil, t or `lambda'.
2753 nil means to return the best completion of STRING, or nil if there is none.
2754 t means to return a list of all possible completions of STRING.
2755 `lambda' means to return t if STRING is a valid completion as it stands. */);
2756 Vminibuffer_completion_table = Qnil;
2758 DEFVAR_LISP ("minibuffer-completion-predicate", &Vminibuffer_completion_predicate,
2759 doc: /* Within call to `completing-read', this holds the PREDICATE argument. */);
2760 Vminibuffer_completion_predicate = Qnil;
2762 DEFVAR_LISP ("minibuffer-completion-confirm", &Vminibuffer_completion_confirm,
2763 doc: /* Non-nil means to demand confirmation of completion before exiting minibuffer. */);
2764 Vminibuffer_completion_confirm = Qnil;
2766 DEFVAR_LISP ("minibuffer-completing-file-name",
2767 &Vminibuffer_completing_file_name,
2768 doc: /* Non-nil means completing file names. */);
2769 Vminibuffer_completing_file_name = Qnil;
2771 DEFVAR_LISP ("minibuffer-help-form", &Vminibuffer_help_form,
2772 doc: /* Value that `help-form' takes on inside the minibuffer. */);
2773 Vminibuffer_help_form = Qnil;
2775 DEFVAR_LISP ("minibuffer-history-variable", &Vminibuffer_history_variable,
2776 doc: /* History list symbol to add minibuffer values to.
2777 Each string of minibuffer input, as it appears on exit from the minibuffer,
2778 is added with
2779 (set minibuffer-history-variable
2780 (cons STRING (symbol-value minibuffer-history-variable))) */);
2781 XSETFASTINT (Vminibuffer_history_variable, 0);
2783 DEFVAR_LISP ("minibuffer-history-position", &Vminibuffer_history_position,
2784 doc: /* Current position of redoing in the history list. */);
2785 Vminibuffer_history_position = Qnil;
2787 DEFVAR_BOOL ("minibuffer-auto-raise", &minibuffer_auto_raise,
2788 doc: /* *Non-nil means entering the minibuffer raises the minibuffer's frame.
2789 Some uses of the echo area also raise that frame (since they use it too). */);
2790 minibuffer_auto_raise = 0;
2792 DEFVAR_LISP ("completion-regexp-list", &Vcompletion_regexp_list,
2793 doc: /* List of regexps that should restrict possible completions.
2794 The basic completion functions only consider a completion acceptable
2795 if it matches all regular expressions in this list, with
2796 `case-fold-search' bound to the value of `completion-ignore-case'.
2797 See Info node `(elisp)Basic Completion', for a description of these
2798 functions. */);
2799 Vcompletion_regexp_list = Qnil;
2801 DEFVAR_BOOL ("minibuffer-allow-text-properties",
2802 &minibuffer_allow_text_properties,
2803 doc: /* Non-nil means `read-from-minibuffer' should not discard text properties.
2804 This also affects `read-string', but it does not affect `read-minibuffer',
2805 `read-no-blanks-input', or any of the functions that do minibuffer input
2806 with completion; they always discard text properties. */);
2807 minibuffer_allow_text_properties = 0;
2809 DEFVAR_LISP ("minibuffer-prompt-properties", &Vminibuffer_prompt_properties,
2810 doc: /* Text properties that are added to minibuffer prompts.
2811 These are in addition to the basic `field' property, and stickiness
2812 properties. */);
2813 /* We use `intern' here instead of Qread_only to avoid
2814 initialization-order problems. */
2815 Vminibuffer_prompt_properties
2816 = Fcons (intern ("read-only"), Fcons (Qt, Qnil));
2818 defsubr (&Sset_minibuffer_window);
2819 defsubr (&Sread_from_minibuffer);
2820 defsubr (&Seval_minibuffer);
2821 defsubr (&Sread_minibuffer);
2822 defsubr (&Sread_string);
2823 defsubr (&Sread_command);
2824 defsubr (&Sread_variable);
2825 defsubr (&Sread_buffer);
2826 defsubr (&Sread_no_blanks_input);
2827 defsubr (&Sminibuffer_depth);
2828 defsubr (&Sminibuffer_prompt);
2830 defsubr (&Sminibufferp);
2831 defsubr (&Sminibuffer_prompt_end);
2832 defsubr (&Sminibuffer_contents);
2833 defsubr (&Sminibuffer_contents_no_properties);
2834 defsubr (&Sdelete_minibuffer_contents);
2836 defsubr (&Stry_completion);
2837 defsubr (&Sall_completions);
2838 defsubr (&Stest_completion);
2839 defsubr (&Sassoc_string);
2840 defsubr (&Scompleting_read);
2841 defsubr (&Sminibuffer_complete);
2842 defsubr (&Sminibuffer_complete_word);
2843 defsubr (&Sminibuffer_complete_and_exit);
2844 defsubr (&Sdisplay_completion_list);
2845 defsubr (&Sminibuffer_completion_help);
2847 defsubr (&Sself_insert_and_exit);
2848 defsubr (&Sexit_minibuffer);
2850 defsubr (&Sminibuffer_message);
2853 void
2854 keys_of_minibuf ()
2856 initial_define_key (Vminibuffer_local_map, Ctl ('g'),
2857 "abort-recursive-edit");
2858 initial_define_key (Vminibuffer_local_map, Ctl ('m'),
2859 "exit-minibuffer");
2860 initial_define_key (Vminibuffer_local_map, Ctl ('j'),
2861 "exit-minibuffer");
2863 initial_define_key (Vminibuffer_local_ns_map, ' ',
2864 "exit-minibuffer");
2865 initial_define_key (Vminibuffer_local_ns_map, '\t',
2866 "exit-minibuffer");
2867 initial_define_key (Vminibuffer_local_ns_map, '?',
2868 "self-insert-and-exit");
2870 initial_define_key (Vminibuffer_local_completion_map, '\t',
2871 "minibuffer-complete");
2872 initial_define_key (Vminibuffer_local_completion_map, ' ',
2873 "minibuffer-complete-word");
2874 initial_define_key (Vminibuffer_local_completion_map, '?',
2875 "minibuffer-completion-help");
2877 initial_define_key (Vminibuffer_local_must_match_map, Ctl ('m'),
2878 "minibuffer-complete-and-exit");
2879 initial_define_key (Vminibuffer_local_must_match_map, Ctl ('j'),
2880 "minibuffer-complete-and-exit");
2883 /* arch-tag: 8f69b601-fba3-484c-a6dd-ceaee54a7a73
2884 (do not change this comment) */