(START_FILES, LIB_STANDARD): Override to
[emacs.git] / src / minibuf.c
blob58da5385728b685cdc0de28ae3ba1c7550f41efb
1 /* Minibuffer input and completion.
2 Copyright (C) 1985, 1986, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002, 2003, 2004, 2005,
4 2006 Free Software Foundation, Inc.
6 This file is part of GNU Emacs.
8 GNU Emacs is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
11 any later version.
13 GNU Emacs is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GNU Emacs; see the file COPYING. If not, write to
20 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21 Boston, MA 02110-1301, USA. */
24 #include <config.h>
25 #include <stdio.h>
27 #include "lisp.h"
28 #include "commands.h"
29 #include "buffer.h"
30 #include "charset.h"
31 #include "dispextern.h"
32 #include "keyboard.h"
33 #include "frame.h"
34 #include "window.h"
35 #include "syntax.h"
36 #include "intervals.h"
37 #include "keymap.h"
39 extern int quit_char;
41 /* List of buffers for use as minibuffers.
42 The first element of the list is used for the outermost minibuffer
43 invocation, the next element is used for a recursive minibuffer
44 invocation, etc. The list is extended at the end as deeper
45 minibuffer recursions are encountered. */
47 Lisp_Object Vminibuffer_list;
49 /* Data to remember during recursive minibuffer invocations */
51 Lisp_Object minibuf_save_list;
53 /* Depth in minibuffer invocations. */
55 int minibuf_level;
57 /* Nonzero means display completion help for invalid input. */
59 Lisp_Object Vcompletion_auto_help;
61 /* The maximum length of a minibuffer history. */
63 Lisp_Object Qhistory_length, Vhistory_length;
65 /* No duplicates in history. */
67 int history_delete_duplicates;
69 /* Non-nil means add new input to history. */
71 Lisp_Object Vhistory_add_new_input;
73 /* Fread_minibuffer leaves the input here as a string. */
75 Lisp_Object last_minibuf_string;
77 /* Nonzero means let functions called when within a minibuffer
78 invoke recursive minibuffers (to read arguments, or whatever) */
80 int enable_recursive_minibuffers;
82 /* Nonzero means don't ignore text properties
83 in Fread_from_minibuffer. */
85 int minibuffer_allow_text_properties;
87 /* help-form is bound to this while in the minibuffer. */
89 Lisp_Object Vminibuffer_help_form;
91 /* Variable which is the history list to add minibuffer values to. */
93 Lisp_Object Vminibuffer_history_variable;
95 /* Current position in the history list (adjusted by M-n and M-p). */
97 Lisp_Object Vminibuffer_history_position;
99 /* Text properties that are added to minibuffer prompts.
100 These are in addition to the basic `field' property, and stickiness
101 properties. */
103 Lisp_Object Vminibuffer_prompt_properties;
105 Lisp_Object Qminibuffer_history, Qbuffer_name_history;
107 Lisp_Object Qread_file_name_internal;
109 /* Normal hooks for entry to and exit from minibuffer. */
111 Lisp_Object Qminibuffer_setup_hook, Vminibuffer_setup_hook;
112 Lisp_Object Qminibuffer_exit_hook, Vminibuffer_exit_hook;
114 /* Function to call to read a buffer name. */
115 Lisp_Object Vread_buffer_function;
117 /* Nonzero means completion ignores case. */
119 int completion_ignore_case;
121 /* List of regexps that should restrict possible completions. */
123 Lisp_Object Vcompletion_regexp_list;
125 /* Nonzero means raise the minibuffer frame when the minibuffer
126 is entered. */
128 int minibuffer_auto_raise;
130 /* If last completion attempt reported "Complete but not unique"
131 then this is the string completed then; otherwise this is nil. */
133 static Lisp_Object last_exact_completion;
135 extern Lisp_Object Voverriding_local_map;
137 Lisp_Object Quser_variable_p;
139 Lisp_Object Qminibuffer_default;
141 Lisp_Object Qcurrent_input_method, Qactivate_input_method;
143 Lisp_Object Qcase_fold_search;
145 extern Lisp_Object Qmouse_face;
147 extern Lisp_Object Qfield;
149 /* Put minibuf on currently selected frame's minibuffer.
150 We do this whenever the user starts a new minibuffer
151 or when a minibuffer exits. */
153 void
154 choose_minibuf_frame ()
156 if (FRAMEP (selected_frame)
157 && FRAME_LIVE_P (XFRAME (selected_frame))
158 && !EQ (minibuf_window, XFRAME (selected_frame)->minibuffer_window))
160 struct frame *sf = XFRAME (selected_frame);
161 Lisp_Object buffer;
163 /* I don't think that any frames may validly have a null minibuffer
164 window anymore. */
165 if (NILP (sf->minibuffer_window))
166 abort ();
168 /* Under X, we come here with minibuf_window being the
169 minibuffer window of the unused termcap window created in
170 init_window_once. That window doesn't have a buffer. */
171 buffer = XWINDOW (minibuf_window)->buffer;
172 if (BUFFERP (buffer))
173 Fset_window_buffer (sf->minibuffer_window, buffer, Qnil);
174 minibuf_window = sf->minibuffer_window;
177 /* Make sure no other frame has a minibuffer as its selected window,
178 because the text would not be displayed in it, and that would be
179 confusing. Only allow the selected frame to do this,
180 and that only if the minibuffer is active. */
182 Lisp_Object tail, frame;
184 FOR_EACH_FRAME (tail, frame)
185 if (MINI_WINDOW_P (XWINDOW (FRAME_SELECTED_WINDOW (XFRAME (frame))))
186 && !(EQ (frame, selected_frame)
187 && minibuf_level > 0))
188 Fset_frame_selected_window (frame, Fframe_first_window (frame));
192 Lisp_Object
193 choose_minibuf_frame_1 (ignore)
194 Lisp_Object ignore;
196 choose_minibuf_frame ();
197 return Qnil;
200 DEFUN ("set-minibuffer-window", Fset_minibuffer_window,
201 Sset_minibuffer_window, 1, 1, 0,
202 doc: /* Specify which minibuffer window to use for the minibuffer.
203 This affects where the minibuffer is displayed if you put text in it
204 without invoking the usual minibuffer commands. */)
205 (window)
206 Lisp_Object window;
208 CHECK_WINDOW (window);
209 if (! MINI_WINDOW_P (XWINDOW (window)))
210 error ("Window is not a minibuffer window");
212 minibuf_window = window;
214 return window;
218 /* Actual minibuffer invocation. */
220 static Lisp_Object read_minibuf_unwind P_ ((Lisp_Object));
221 static Lisp_Object run_exit_minibuf_hook P_ ((Lisp_Object));
222 static Lisp_Object read_minibuf 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 read_minibuf_noninteractive P_ ((Lisp_Object, Lisp_Object,
228 Lisp_Object, Lisp_Object,
229 int, Lisp_Object,
230 Lisp_Object, Lisp_Object,
231 int, int));
232 static Lisp_Object string_to_object P_ ((Lisp_Object, Lisp_Object));
235 /* Read a Lisp object from VAL and return it. If VAL is an empty
236 string, and DEFALT is a string, read from DEFALT instead of VAL. */
238 static Lisp_Object
239 string_to_object (val, defalt)
240 Lisp_Object val, defalt;
242 struct gcpro gcpro1, gcpro2;
243 Lisp_Object expr_and_pos;
244 int pos;
246 GCPRO2 (val, defalt);
248 if (STRINGP (val) && SCHARS (val) == 0
249 && STRINGP (defalt))
250 val = defalt;
252 expr_and_pos = Fread_from_string (val, Qnil, Qnil);
253 pos = XINT (Fcdr (expr_and_pos));
254 if (pos != SCHARS (val))
256 /* Ignore trailing whitespace; any other trailing junk
257 is an error. */
258 int i;
259 pos = string_char_to_byte (val, pos);
260 for (i = pos; i < SBYTES (val); i++)
262 int c = SREF (val, i);
263 if (c != ' ' && c != '\t' && c != '\n')
264 error ("Trailing garbage following expression");
268 val = Fcar (expr_and_pos);
269 RETURN_UNGCPRO (val);
273 /* Like read_minibuf but reading from stdin. This function is called
274 from read_minibuf to do the job if noninteractive. */
276 static Lisp_Object
277 read_minibuf_noninteractive (map, initial, prompt, backup_n, expflag,
278 histvar, histpos, defalt, allow_props,
279 inherit_input_method)
280 Lisp_Object map;
281 Lisp_Object initial;
282 Lisp_Object prompt;
283 Lisp_Object backup_n;
284 int expflag;
285 Lisp_Object histvar;
286 Lisp_Object histpos;
287 Lisp_Object defalt;
288 int allow_props;
289 int inherit_input_method;
291 int size, len;
292 char *line, *s;
293 Lisp_Object val;
295 fprintf (stdout, "%s", SDATA (prompt));
296 fflush (stdout);
298 val = Qnil;
299 size = 100;
300 len = 0;
301 line = (char *) xmalloc (size * sizeof *line);
302 while ((s = fgets (line + len, size - len, stdin)) != NULL
303 && (len = strlen (line),
304 len == size - 1 && line[len - 1] != '\n'))
306 size *= 2;
307 line = (char *) xrealloc (line, size);
310 if (s)
312 len = strlen (line);
314 if (len > 0 && line[len - 1] == '\n')
315 line[--len] = '\0';
317 val = build_string (line);
318 xfree (line);
320 else
322 xfree (line);
323 error ("Error reading from stdin");
326 /* If Lisp form desired instead of string, parse it. */
327 if (expflag)
328 val = string_to_object (val, defalt);
330 return val;
333 DEFUN ("minibufferp", Fminibufferp,
334 Sminibufferp, 0, 1, 0,
335 doc: /* Return t if BUFFER is a minibuffer.
336 No argument or nil as argument means use current buffer as BUFFER.
337 BUFFER can be a buffer or a buffer name. */)
338 (buffer)
339 Lisp_Object buffer;
341 Lisp_Object tem;
343 if (NILP (buffer))
344 buffer = Fcurrent_buffer ();
345 else if (STRINGP (buffer))
346 buffer = Fget_buffer (buffer);
347 else
348 CHECK_BUFFER (buffer);
350 tem = Fmemq (buffer, Vminibuffer_list);
351 return ! NILP (tem) ? Qt : Qnil;
354 DEFUN ("minibuffer-prompt-end", Fminibuffer_prompt_end,
355 Sminibuffer_prompt_end, 0, 0, 0,
356 doc: /* Return the buffer position of the end of the minibuffer prompt.
357 Return (point-min) if current buffer is not a minibuffer. */)
360 /* This function is written to be most efficient when there's a prompt. */
361 Lisp_Object beg, end, tem;
362 beg = make_number (BEGV);
364 tem = Fmemq (Fcurrent_buffer (), Vminibuffer_list);
365 if (NILP (tem))
366 return beg;
368 end = Ffield_end (beg, Qnil, Qnil);
370 if (XINT (end) == ZV && NILP (Fget_char_property (beg, Qfield, Qnil)))
371 return beg;
372 else
373 return end;
376 DEFUN ("minibuffer-contents", Fminibuffer_contents,
377 Sminibuffer_contents, 0, 0, 0,
378 doc: /* Return the user input in a minibuffer as a string.
379 The current buffer must be a minibuffer. */)
382 int prompt_end = XINT (Fminibuffer_prompt_end ());
383 return make_buffer_string (prompt_end, ZV, 1);
386 DEFUN ("minibuffer-contents-no-properties", Fminibuffer_contents_no_properties,
387 Sminibuffer_contents_no_properties, 0, 0, 0,
388 doc: /* Return the user input in a minibuffer as a string, without text-properties.
389 The current buffer must be a minibuffer. */)
392 int prompt_end = XINT (Fminibuffer_prompt_end ());
393 return make_buffer_string (prompt_end, ZV, 0);
396 DEFUN ("minibuffer-completion-contents", Fminibuffer_completion_contents,
397 Sminibuffer_completion_contents, 0, 0, 0,
398 doc: /* Return the user input in a minibuffer before point as a string.
399 That is what completion commands operate on.
400 The current buffer must be a minibuffer. */)
403 int prompt_end = XINT (Fminibuffer_prompt_end ());
404 if (PT < prompt_end)
405 error ("Cannot do completion in the prompt");
406 return make_buffer_string (prompt_end, PT, 1);
409 DEFUN ("delete-minibuffer-contents", Fdelete_minibuffer_contents,
410 Sdelete_minibuffer_contents, 0, 0, 0,
411 doc: /* Delete all user input in a minibuffer.
412 The current buffer must be a minibuffer. */)
415 int prompt_end = XINT (Fminibuffer_prompt_end ());
416 if (prompt_end < ZV)
417 del_range (prompt_end, ZV);
418 return Qnil;
422 /* Read from the minibuffer using keymap MAP and initial contents INITIAL,
423 putting point minus BACKUP_N bytes from the end of INITIAL,
424 prompting with PROMPT (a string), using history list HISTVAR
425 with initial position HISTPOS. INITIAL should be a string or a
426 cons of a string and an integer. BACKUP_N should be <= 0, or
427 Qnil, which is equivalent to 0. If INITIAL is a cons, BACKUP_N is
428 ignored and replaced with an integer that puts point at one-indexed
429 position N in INITIAL, where N is the CDR of INITIAL, or at the
430 beginning of INITIAL if N <= 0.
432 Normally return the result as a string (the text that was read),
433 but if EXPFLAG is nonzero, read it and return the object read.
434 If HISTVAR is given, save the value read on that history only if it doesn't
435 match the front of that history list exactly. The value is pushed onto
436 the list as the string that was read.
438 DEFALT specifies the default value for the sake of history commands.
440 If ALLOW_PROPS is nonzero, we do not throw away text properties.
442 if INHERIT_INPUT_METHOD is nonzero, the minibuffer inherits the
443 current input method. */
445 static Lisp_Object
446 read_minibuf (map, initial, prompt, backup_n, expflag,
447 histvar, histpos, defalt, allow_props, inherit_input_method)
448 Lisp_Object map;
449 Lisp_Object initial;
450 Lisp_Object prompt;
451 Lisp_Object backup_n;
452 int expflag;
453 Lisp_Object histvar;
454 Lisp_Object histpos;
455 Lisp_Object defalt;
456 int allow_props;
457 int inherit_input_method;
459 Lisp_Object val;
460 int count = SPECPDL_INDEX ();
461 Lisp_Object mini_frame, ambient_dir, minibuffer, input_method;
462 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5;
463 Lisp_Object enable_multibyte;
464 int pos = INTEGERP (backup_n) ? XINT (backup_n) : 0;
466 /* String to add to the history. */
467 Lisp_Object histstring;
469 Lisp_Object empty_minibuf;
470 Lisp_Object dummy, frame;
472 extern Lisp_Object Qfront_sticky;
473 extern Lisp_Object Qrear_nonsticky;
475 specbind (Qminibuffer_default, defalt);
477 single_kboard_state ();
478 #ifdef HAVE_X_WINDOWS
479 if (display_hourglass_p)
480 cancel_hourglass ();
481 #endif
483 if (!NILP (initial))
485 if (CONSP (initial))
487 backup_n = Fcdr (initial);
488 initial = Fcar (initial);
489 CHECK_STRING (initial);
490 if (!NILP (backup_n))
492 CHECK_NUMBER (backup_n);
493 /* Convert to distance from end of input. */
494 if (XINT (backup_n) < 1)
495 /* A number too small means the beginning of the string. */
496 pos = - SCHARS (initial);
497 else
498 pos = XINT (backup_n) - 1 - SCHARS (initial);
501 else
502 CHECK_STRING (initial);
504 val = Qnil;
505 ambient_dir = current_buffer->directory;
506 input_method = Qnil;
507 enable_multibyte = Qnil;
509 /* Don't need to protect PROMPT, HISTVAR, and HISTPOS because we
510 store them away before we can GC. Don't need to protect
511 BACKUP_N because we use the value only if it is an integer. */
512 GCPRO5 (map, initial, val, ambient_dir, input_method);
514 if (!STRINGP (prompt))
515 prompt = empty_string;
517 if (!enable_recursive_minibuffers
518 && minibuf_level > 0)
520 if (EQ (selected_window, minibuf_window))
521 error ("Command attempted to use minibuffer while in minibuffer");
522 else
523 /* If we're in another window, cancel the minibuffer that's active. */
524 Fthrow (Qexit,
525 build_string ("Command attempted to use minibuffer while in minibuffer"));
528 if (noninteractive && NILP (Vexecuting_kbd_macro))
530 val = read_minibuf_noninteractive (map, initial, prompt,
531 make_number (pos),
532 expflag, histvar, histpos, defalt,
533 allow_props, inherit_input_method);
534 UNGCPRO;
535 return unbind_to (count, val);
538 /* Choose the minibuffer window and frame, and take action on them. */
540 choose_minibuf_frame ();
542 record_unwind_protect (choose_minibuf_frame_1, Qnil);
544 record_unwind_protect (Fset_window_configuration,
545 Fcurrent_window_configuration (Qnil));
547 /* If the minibuffer window is on a different frame, save that
548 frame's configuration too. */
549 mini_frame = WINDOW_FRAME (XWINDOW (minibuf_window));
550 if (!EQ (mini_frame, selected_frame))
551 record_unwind_protect (Fset_window_configuration,
552 Fcurrent_window_configuration (mini_frame));
554 /* If the minibuffer is on an iconified or invisible frame,
555 make it visible now. */
556 Fmake_frame_visible (mini_frame);
558 if (minibuffer_auto_raise)
559 Fraise_frame (mini_frame);
561 /* We have to do this after saving the window configuration
562 since that is what restores the current buffer. */
564 /* Arrange to restore a number of minibuffer-related variables.
565 We could bind each variable separately, but that would use lots of
566 specpdl slots. */
567 minibuf_save_list
568 = Fcons (Voverriding_local_map,
569 Fcons (minibuf_window, minibuf_save_list));
570 minibuf_save_list
571 = Fcons (minibuf_prompt,
572 Fcons (make_number (minibuf_prompt_width),
573 Fcons (Vhelp_form,
574 Fcons (Vcurrent_prefix_arg,
575 Fcons (Vminibuffer_history_position,
576 Fcons (Vminibuffer_history_variable,
577 minibuf_save_list))))));
579 record_unwind_protect (read_minibuf_unwind, Qnil);
580 minibuf_level++;
581 /* We are exiting the minibuffer one way or the other, so run the hook.
582 It should be run before unwinding the minibuf settings. Do it
583 separately from read_minibuf_unwind because we need to make sure that
584 read_minibuf_unwind is fully executed even if exit-minibuffer-hook
585 signals an error. --Stef */
586 record_unwind_protect (run_exit_minibuf_hook, Qnil);
588 /* Now that we can restore all those variables, start changing them. */
590 minibuf_prompt_width = 0;
591 minibuf_prompt = Fcopy_sequence (prompt);
592 Vminibuffer_history_position = histpos;
593 Vminibuffer_history_variable = histvar;
594 Vhelp_form = Vminibuffer_help_form;
596 if (inherit_input_method)
598 /* `current-input-method' is buffer local. So, remember it in
599 INPUT_METHOD before changing the current buffer. */
600 input_method = Fsymbol_value (Qcurrent_input_method);
601 enable_multibyte = current_buffer->enable_multibyte_characters;
604 /* Switch to the minibuffer. */
606 minibuffer = get_minibuffer (minibuf_level);
607 Fset_buffer (minibuffer);
609 /* If appropriate, copy enable-multibyte-characters into the minibuffer. */
610 if (inherit_input_method)
611 current_buffer->enable_multibyte_characters = enable_multibyte;
613 /* The current buffer's default directory is usually the right thing
614 for our minibuffer here. However, if you're typing a command at
615 a minibuffer-only frame when minibuf_level is zero, then buf IS
616 the current_buffer, so reset_buffer leaves buf's default
617 directory unchanged. This is a bummer when you've just started
618 up Emacs and buf's default directory is Qnil. Here's a hack; can
619 you think of something better to do? Find another buffer with a
620 better directory, and use that one instead. */
621 if (STRINGP (ambient_dir))
622 current_buffer->directory = ambient_dir;
623 else
625 Lisp_Object buf_list;
627 for (buf_list = Vbuffer_alist;
628 CONSP (buf_list);
629 buf_list = XCDR (buf_list))
631 Lisp_Object other_buf;
633 other_buf = XCDR (XCAR (buf_list));
634 if (STRINGP (XBUFFER (other_buf)->directory))
636 current_buffer->directory = XBUFFER (other_buf)->directory;
637 break;
642 if (!EQ (mini_frame, selected_frame))
643 Fredirect_frame_focus (selected_frame, mini_frame);
645 Vminibuf_scroll_window = selected_window;
646 if (minibuf_level == 1 || !EQ (minibuf_window, selected_window))
647 minibuf_selected_window = selected_window;
649 /* Empty out the minibuffers of all frames other than the one
650 where we are going to display one now.
651 Set them to point to ` *Minibuf-0*', which is always empty. */
652 empty_minibuf = Fget_buffer (build_string (" *Minibuf-0*"));
654 FOR_EACH_FRAME (dummy, frame)
656 Lisp_Object root_window = Fframe_root_window (frame);
657 Lisp_Object mini_window = XWINDOW (root_window)->next;
659 if (! NILP (mini_window) && ! EQ (mini_window, minibuf_window)
660 && !NILP (Fwindow_minibuffer_p (mini_window)))
661 Fset_window_buffer (mini_window, empty_minibuf, Qnil);
664 /* Display this minibuffer in the proper window. */
665 Fset_window_buffer (minibuf_window, Fcurrent_buffer (), Qnil);
666 Fselect_window (minibuf_window, Qnil);
667 XSETFASTINT (XWINDOW (minibuf_window)->hscroll, 0);
669 Fmake_local_variable (Qprint_escape_newlines);
670 print_escape_newlines = 1;
672 /* Erase the buffer. */
674 int count1 = SPECPDL_INDEX ();
675 specbind (Qinhibit_read_only, Qt);
676 specbind (Qinhibit_modification_hooks, Qt);
677 Ferase_buffer ();
678 unbind_to (count1, Qnil);
681 if (!NILP (current_buffer->enable_multibyte_characters)
682 && ! STRING_MULTIBYTE (minibuf_prompt))
683 minibuf_prompt = Fstring_make_multibyte (minibuf_prompt);
685 /* Insert the prompt, record where it ends. */
686 Finsert (1, &minibuf_prompt);
687 if (PT > BEG)
689 Fput_text_property (make_number (BEG), make_number (PT),
690 Qfront_sticky, Qt, Qnil);
691 Fput_text_property (make_number (BEG), make_number (PT),
692 Qrear_nonsticky, Qt, Qnil);
693 Fput_text_property (make_number (BEG), make_number (PT),
694 Qfield, Qt, Qnil);
695 Fadd_text_properties (make_number (BEG), make_number (PT),
696 Vminibuffer_prompt_properties, Qnil);
699 minibuf_prompt_width = (int) current_column (); /* iftc */
701 /* Put in the initial input. */
702 if (!NILP (initial))
704 Finsert (1, &initial);
705 Fforward_char (make_number (pos));
708 clear_message (1, 1);
709 current_buffer->keymap = map;
711 /* Turn on an input method stored in INPUT_METHOD if any. */
712 if (STRINGP (input_method) && !NILP (Ffboundp (Qactivate_input_method)))
713 call1 (Qactivate_input_method, input_method);
715 /* Run our hook, but not if it is empty.
716 (run-hooks would do nothing if it is empty,
717 but it's important to save time here in the usual case.) */
718 if (!NILP (Vminibuffer_setup_hook) && !EQ (Vminibuffer_setup_hook, Qunbound)
719 && !NILP (Vrun_hooks))
720 call1 (Vrun_hooks, Qminibuffer_setup_hook);
722 /* Don't allow the user to undo past this point. */
723 current_buffer->undo_list = Qnil;
725 recursive_edit_1 ();
727 /* If cursor is on the minibuffer line,
728 show the user we have exited by putting it in column 0. */
729 if (XWINDOW (minibuf_window)->cursor.vpos >= 0
730 && !noninteractive)
732 XWINDOW (minibuf_window)->cursor.hpos = 0;
733 XWINDOW (minibuf_window)->cursor.x = 0;
734 XWINDOW (minibuf_window)->must_be_updated_p = 1;
735 update_frame (XFRAME (selected_frame), 1, 1);
736 if (rif && rif->flush_display)
737 rif->flush_display (XFRAME (XWINDOW (minibuf_window)->frame));
740 /* Make minibuffer contents into a string. */
741 Fset_buffer (minibuffer);
742 if (allow_props)
743 val = Fminibuffer_contents ();
744 else
745 val = Fminibuffer_contents_no_properties ();
747 /* VAL is the string of minibuffer text. */
749 last_minibuf_string = val;
751 /* Choose the string to add to the history. */
752 if (SCHARS (val) != 0)
753 histstring = val;
754 else if (STRINGP (defalt))
755 histstring = defalt;
756 else
757 histstring = Qnil;
759 /* Add the value to the appropriate history list, if any. */
760 if (!NILP (Vhistory_add_new_input)
761 && SYMBOLP (Vminibuffer_history_variable)
762 && !NILP (histstring))
764 /* If the caller wanted to save the value read on a history list,
765 then do so if the value is not already the front of the list. */
766 Lisp_Object histval;
768 /* If variable is unbound, make it nil. */
769 if (EQ (SYMBOL_VALUE (Vminibuffer_history_variable), Qunbound))
770 Fset (Vminibuffer_history_variable, Qnil);
772 histval = Fsymbol_value (Vminibuffer_history_variable);
774 /* The value of the history variable must be a cons or nil. Other
775 values are unacceptable. We silently ignore these values. */
777 if (NILP (histval)
778 || (CONSP (histval)
779 /* Don't duplicate the most recent entry in the history. */
780 && (NILP (Fequal (histstring, Fcar (histval))))))
782 Lisp_Object length;
784 if (history_delete_duplicates) Fdelete (histstring, histval);
785 histval = Fcons (histstring, histval);
786 Fset (Vminibuffer_history_variable, histval);
788 /* Truncate if requested. */
789 length = Fget (Vminibuffer_history_variable, Qhistory_length);
790 if (NILP (length)) length = Vhistory_length;
791 if (INTEGERP (length))
793 if (XINT (length) <= 0)
794 Fset (Vminibuffer_history_variable, Qnil);
795 else
797 Lisp_Object temp;
799 temp = Fnthcdr (Fsub1 (length), histval);
800 if (CONSP (temp)) Fsetcdr (temp, Qnil);
806 /* If Lisp form desired instead of string, parse it. */
807 if (expflag)
808 val = string_to_object (val, defalt);
810 /* The appropriate frame will get selected
811 in set-window-configuration. */
812 UNGCPRO;
813 return unbind_to (count, val);
816 /* Return a buffer to be used as the minibuffer at depth `depth'.
817 depth = 0 is the lowest allowed argument, and that is the value
818 used for nonrecursive minibuffer invocations */
820 Lisp_Object
821 get_minibuffer (depth)
822 int depth;
824 Lisp_Object tail, num, buf;
825 char name[24];
826 extern Lisp_Object nconc2 ();
828 XSETFASTINT (num, depth);
829 tail = Fnthcdr (num, Vminibuffer_list);
830 if (NILP (tail))
832 tail = Fcons (Qnil, Qnil);
833 Vminibuffer_list = nconc2 (Vminibuffer_list, tail);
835 buf = Fcar (tail);
836 if (NILP (buf) || NILP (XBUFFER (buf)->name))
838 sprintf (name, " *Minibuf-%d*", depth);
839 buf = Fget_buffer_create (build_string (name));
841 /* Although the buffer's name starts with a space, undo should be
842 enabled in it. */
843 Fbuffer_enable_undo (buf);
845 XSETCAR (tail, buf);
847 else
849 int count = SPECPDL_INDEX ();
850 /* `reset_buffer' blindly sets the list of overlays to NULL, so we
851 have to empty the list, otherwise we end up with overlays that
852 think they belong to this buffer while the buffer doesn't know about
853 them any more. */
854 delete_all_overlays (XBUFFER (buf));
855 reset_buffer (XBUFFER (buf));
856 record_unwind_protect (Fset_buffer, Fcurrent_buffer ());
857 Fset_buffer (buf);
858 Fkill_all_local_variables ();
859 unbind_to (count, Qnil);
862 return buf;
865 static Lisp_Object
866 run_exit_minibuf_hook (data)
867 Lisp_Object data;
869 if (!NILP (Vminibuffer_exit_hook) && !EQ (Vminibuffer_exit_hook, Qunbound)
870 && !NILP (Vrun_hooks))
871 safe_run_hooks (Qminibuffer_exit_hook);
873 return Qnil;
876 /* This function is called on exiting minibuffer, whether normally or
877 not, and it restores the current window, buffer, etc. */
879 static Lisp_Object
880 read_minibuf_unwind (data)
881 Lisp_Object data;
883 Lisp_Object old_deactivate_mark;
884 Lisp_Object window;
886 /* If this was a recursive minibuffer,
887 tie the minibuffer window back to the outer level minibuffer buffer. */
888 minibuf_level--;
890 window = minibuf_window;
891 /* To keep things predictable, in case it matters, let's be in the
892 minibuffer when we reset the relevant variables. */
893 Fset_buffer (XWINDOW (window)->buffer);
895 /* Restore prompt, etc, from outer minibuffer level. */
896 minibuf_prompt = Fcar (minibuf_save_list);
897 minibuf_save_list = Fcdr (minibuf_save_list);
898 minibuf_prompt_width = XFASTINT (Fcar (minibuf_save_list));
899 minibuf_save_list = Fcdr (minibuf_save_list);
900 Vhelp_form = Fcar (minibuf_save_list);
901 minibuf_save_list = Fcdr (minibuf_save_list);
902 Vcurrent_prefix_arg = Fcar (minibuf_save_list);
903 minibuf_save_list = Fcdr (minibuf_save_list);
904 Vminibuffer_history_position = Fcar (minibuf_save_list);
905 minibuf_save_list = Fcdr (minibuf_save_list);
906 Vminibuffer_history_variable = Fcar (minibuf_save_list);
907 minibuf_save_list = Fcdr (minibuf_save_list);
908 Voverriding_local_map = Fcar (minibuf_save_list);
909 minibuf_save_list = Fcdr (minibuf_save_list);
910 #if 0
911 temp = Fcar (minibuf_save_list);
912 if (FRAME_LIVE_P (XFRAME (WINDOW_FRAME (XWINDOW (temp)))))
913 minibuf_window = temp;
914 #endif
915 minibuf_save_list = Fcdr (minibuf_save_list);
917 /* Erase the minibuffer we were using at this level. */
919 int count = SPECPDL_INDEX ();
920 /* Prevent error in erase-buffer. */
921 specbind (Qinhibit_read_only, Qt);
922 specbind (Qinhibit_modification_hooks, Qt);
923 old_deactivate_mark = Vdeactivate_mark;
924 Ferase_buffer ();
925 Vdeactivate_mark = old_deactivate_mark;
926 unbind_to (count, Qnil);
929 /* When we get to the outmost level, make sure we resize the
930 mini-window back to its normal size. */
931 if (minibuf_level == 0)
932 resize_mini_window (XWINDOW (window), 0);
934 /* Make sure minibuffer window is erased, not ignored. */
935 windows_or_buffers_changed++;
936 XSETFASTINT (XWINDOW (window)->last_modified, 0);
937 XSETFASTINT (XWINDOW (window)->last_overlay_modified, 0);
938 return Qnil;
942 DEFUN ("read-from-minibuffer", Fread_from_minibuffer, Sread_from_minibuffer, 1, 7, 0,
943 doc: /* Read a string from the minibuffer, prompting with string PROMPT.
944 The optional second arg INITIAL-CONTENTS is an obsolete alternative to
945 DEFAULT-VALUE. It normally should be nil in new code, except when
946 HIST is a cons. It is discussed in more detail below.
947 Third arg KEYMAP is a keymap to use whilst reading;
948 if omitted or nil, the default is `minibuffer-local-map'.
949 If fourth arg READ is non-nil, then interpret the result as a Lisp object
950 and return that object:
951 in other words, do `(car (read-from-string INPUT-STRING))'
952 Fifth arg HIST, if non-nil, specifies a history list and optionally
953 the initial position in the list. It can be a symbol, which is the
954 history list variable to use, or it can be a cons cell
955 (HISTVAR . HISTPOS). In that case, HISTVAR is the history list variable
956 to use, and HISTPOS is the initial position for use by the minibuffer
957 history commands. For consistency, you should also specify that
958 element of the history as the value of INITIAL-CONTENTS. Positions
959 are counted starting from 1 at the beginning of the list.
960 Sixth arg DEFAULT-VALUE is the default value. If non-nil, it is available
961 for history commands; but, unless READ is non-nil, `read-from-minibuffer'
962 does NOT return DEFAULT-VALUE if the user enters empty input! It returns
963 the empty string.
964 Seventh arg INHERIT-INPUT-METHOD, if non-nil, means the minibuffer inherits
965 the current input method and the setting of `enable-multibyte-characters'.
966 If the variable `minibuffer-allow-text-properties' is non-nil,
967 then the string which is returned includes whatever text properties
968 were present in the minibuffer. Otherwise the value has no text properties.
970 The remainder of this documentation string describes the
971 INITIAL-CONTENTS argument in more detail. It is only relevant when
972 studying existing code, or when HIST is a cons. If non-nil,
973 INITIAL-CONTENTS is a string to be inserted into the minibuffer before
974 reading input. Normally, point is put at the end of that string.
975 However, if INITIAL-CONTENTS is \(STRING . POSITION), the initial
976 input is STRING, but point is placed at _one-indexed_ position
977 POSITION in the minibuffer. Any integer value less than or equal to
978 one puts point at the beginning of the string. *Note* that this
979 behavior differs from the way such arguments are used in `completing-read'
980 and some related functions, which use zero-indexing for POSITION. */)
981 (prompt, initial_contents, keymap, read, hist, default_value, inherit_input_method)
982 Lisp_Object prompt, initial_contents, keymap, read, hist, default_value;
983 Lisp_Object inherit_input_method;
985 Lisp_Object histvar, histpos, val;
986 struct gcpro gcpro1;
988 CHECK_STRING (prompt);
989 if (NILP (keymap))
990 keymap = Vminibuffer_local_map;
991 else
992 keymap = get_keymap (keymap, 1, 0);
994 if (SYMBOLP (hist))
996 histvar = hist;
997 histpos = Qnil;
999 else
1001 histvar = Fcar_safe (hist);
1002 histpos = Fcdr_safe (hist);
1004 if (NILP (histvar))
1005 histvar = Qminibuffer_history;
1006 if (NILP (histpos))
1007 XSETFASTINT (histpos, 0);
1009 GCPRO1 (default_value);
1010 val = read_minibuf (keymap, initial_contents, prompt,
1011 Qnil, !NILP (read),
1012 histvar, histpos, default_value,
1013 minibuffer_allow_text_properties,
1014 !NILP (inherit_input_method));
1015 UNGCPRO;
1016 return val;
1019 DEFUN ("read-minibuffer", Fread_minibuffer, Sread_minibuffer, 1, 2, 0,
1020 doc: /* Return a Lisp object read using the minibuffer, unevaluated.
1021 Prompt with PROMPT. If non-nil, optional second arg INITIAL-CONTENTS
1022 is a string to insert in the minibuffer before reading.
1023 \(INITIAL-CONTENTS can also be a cons of a string and an integer. Such
1024 arguments are used as in `read-from-minibuffer') */)
1025 (prompt, initial_contents)
1026 Lisp_Object prompt, initial_contents;
1028 CHECK_STRING (prompt);
1029 return read_minibuf (Vminibuffer_local_map, initial_contents,
1030 prompt, Qnil, 1, Qminibuffer_history,
1031 make_number (0), Qnil, 0, 0);
1034 DEFUN ("eval-minibuffer", Feval_minibuffer, Seval_minibuffer, 1, 2, 0,
1035 doc: /* Return value of Lisp expression read using the minibuffer.
1036 Prompt with PROMPT. If non-nil, optional second arg INITIAL-CONTENTS
1037 is a string to insert in the minibuffer before reading.
1038 \(INITIAL-CONTENTS can also be a cons of a string and an integer. Such
1039 arguments are used as in `read-from-minibuffer'.) */)
1040 (prompt, initial_contents)
1041 Lisp_Object prompt, initial_contents;
1043 return Feval (Fread_minibuffer (prompt, initial_contents));
1046 /* Functions that use the minibuffer to read various things. */
1048 DEFUN ("read-string", Fread_string, Sread_string, 1, 5, 0,
1049 doc: /* Read a string from the minibuffer, prompting with string PROMPT.
1050 If non-nil, second arg INITIAL-INPUT is a string to insert before reading.
1051 This argument has been superseded by DEFAULT-VALUE and should normally
1052 be nil in new code. It behaves as in `read-from-minibuffer'. See the
1053 documentation string of that function for details.
1054 The third arg HISTORY, if non-nil, specifies a history list
1055 and optionally the initial position in the list.
1056 See `read-from-minibuffer' for details of HISTORY argument.
1057 Fourth arg DEFAULT-VALUE is the default value. If non-nil, it is used
1058 for history commands, and as the value to return if the user enters
1059 the empty string.
1060 Fifth arg INHERIT-INPUT-METHOD, if non-nil, means the minibuffer inherits
1061 the current input method and the setting of `enable-multibyte-characters'. */)
1062 (prompt, initial_input, history, default_value, inherit_input_method)
1063 Lisp_Object prompt, initial_input, history, default_value;
1064 Lisp_Object inherit_input_method;
1066 Lisp_Object val;
1067 val = Fread_from_minibuffer (prompt, initial_input, Qnil,
1068 Qnil, history, default_value,
1069 inherit_input_method);
1070 if (STRINGP (val) && SCHARS (val) == 0 && ! NILP (default_value))
1071 val = default_value;
1072 return val;
1075 DEFUN ("read-no-blanks-input", Fread_no_blanks_input, Sread_no_blanks_input, 1, 3, 0,
1076 doc: /* Read a string from the terminal, not allowing blanks.
1077 Prompt with PROMPT. Whitespace terminates the input. If INITIAL is
1078 non-nil, it should be a string, which is used as initial input, with
1079 point positioned at the end, so that SPACE will accept the input.
1080 \(Actually, INITIAL can also be a cons of a string and an integer.
1081 Such values are treated as in `read-from-minibuffer', but are normally
1082 not useful in this function.)
1083 Third arg INHERIT-INPUT-METHOD, if non-nil, means the minibuffer inherits
1084 the current input method and the setting of`enable-multibyte-characters'. */)
1085 (prompt, initial, inherit_input_method)
1086 Lisp_Object prompt, initial, inherit_input_method;
1088 CHECK_STRING (prompt);
1089 return read_minibuf (Vminibuffer_local_ns_map, initial, prompt, Qnil,
1090 0, Qminibuffer_history, make_number (0), Qnil, 0,
1091 !NILP (inherit_input_method));
1094 DEFUN ("read-command", Fread_command, Sread_command, 1, 2, 0,
1095 doc: /* Read the name of a command and return as a symbol.
1096 Prompt with PROMPT. By default, return DEFAULT-VALUE. */)
1097 (prompt, default_value)
1098 Lisp_Object prompt, default_value;
1100 Lisp_Object name, default_string;
1102 if (NILP (default_value))
1103 default_string = Qnil;
1104 else if (SYMBOLP (default_value))
1105 default_string = SYMBOL_NAME (default_value);
1106 else
1107 default_string = default_value;
1109 name = Fcompleting_read (prompt, Vobarray, Qcommandp, Qt,
1110 Qnil, Qnil, default_string, Qnil);
1111 if (NILP (name))
1112 return name;
1113 return Fintern (name, Qnil);
1116 #ifdef NOTDEF
1117 DEFUN ("read-function", Fread_function, Sread_function, 1, 1, 0,
1118 doc: /* One arg PROMPT, a string. Read the name of a function and return as a symbol.
1119 Prompt with PROMPT. */)
1120 (prompt)
1121 Lisp_Object prompt;
1123 return Fintern (Fcompleting_read (prompt, Vobarray, Qfboundp, Qt, Qnil, Qnil, Qnil, Qnil),
1124 Qnil);
1126 #endif /* NOTDEF */
1128 DEFUN ("read-variable", Fread_variable, Sread_variable, 1, 2, 0,
1129 doc: /* Read the name of a user variable and return it as a symbol.
1130 Prompt with PROMPT. By default, return DEFAULT-VALUE.
1131 A user variable is one for which `user-variable-p' returns non-nil. */)
1132 (prompt, default_value)
1133 Lisp_Object prompt, default_value;
1135 Lisp_Object name, default_string;
1137 if (NILP (default_value))
1138 default_string = Qnil;
1139 else if (SYMBOLP (default_value))
1140 default_string = SYMBOL_NAME (default_value);
1141 else
1142 default_string = default_value;
1144 name = Fcompleting_read (prompt, Vobarray,
1145 Quser_variable_p, Qt,
1146 Qnil, Qnil, default_string, Qnil);
1147 if (NILP (name))
1148 return name;
1149 return Fintern (name, Qnil);
1152 DEFUN ("read-buffer", Fread_buffer, Sread_buffer, 1, 3, 0,
1153 doc: /* Read the name of a buffer and return as a string.
1154 Prompt with PROMPT.
1155 Optional second arg DEF is value to return if user enters an empty line.
1156 If optional third arg REQUIRE-MATCH is non-nil,
1157 only existing buffer names are allowed.
1158 The argument PROMPT should be a string ending with a colon and a space. */)
1159 (prompt, def, require_match)
1160 Lisp_Object prompt, def, require_match;
1162 Lisp_Object args[4];
1163 unsigned char *s;
1164 int len;
1166 if (BUFFERP (def))
1167 def = XBUFFER (def)->name;
1169 if (NILP (Vread_buffer_function))
1171 if (!NILP (def))
1173 /* A default value was provided: we must change PROMPT,
1174 editing the default value in before the colon. To achieve
1175 this, we replace PROMPT with a substring that doesn't
1176 contain the terminal space and colon (if present). They
1177 are then added back using Fformat. */
1179 if (STRINGP (prompt))
1181 s = SDATA (prompt);
1182 len = strlen (s);
1183 if (len >= 2 && s[len - 2] == ':' && s[len - 1] == ' ')
1184 len = len - 2;
1185 else if (len >= 1 && (s[len - 1] == ':' || s[len - 1] == ' '))
1186 len--;
1188 prompt = make_specified_string (s, -1, len,
1189 STRING_MULTIBYTE (prompt));
1192 args[0] = build_string ("%s (default %s): ");
1193 args[1] = prompt;
1194 args[2] = def;
1195 prompt = Fformat (3, args);
1198 return Fcompleting_read (prompt, intern ("internal-complete-buffer"),
1199 Qnil, require_match, Qnil, Qbuffer_name_history,
1200 def, Qnil);
1202 else
1204 args[0] = Vread_buffer_function;
1205 args[1] = prompt;
1206 args[2] = def;
1207 args[3] = require_match;
1208 return Ffuncall(4, args);
1212 static Lisp_Object
1213 minibuf_conform_representation (string, basis)
1214 Lisp_Object string, basis;
1216 if (STRING_MULTIBYTE (string) == STRING_MULTIBYTE (basis))
1217 return string;
1219 if (STRING_MULTIBYTE (string))
1220 return Fstring_make_unibyte (string);
1221 else
1222 return Fstring_make_multibyte (string);
1225 DEFUN ("try-completion", Ftry_completion, Stry_completion, 2, 3, 0,
1226 doc: /* Return common substring of all completions of STRING in ALIST.
1227 Each car of each element of ALIST (or each element if it is not a cons cell)
1228 is tested to see if it begins with STRING. The possible matches may be
1229 strings or symbols. Symbols are converted to strings before testing,
1230 see `symbol-name'.
1231 All that match are compared together; the longest initial sequence
1232 common to all matches is returned as a string.
1233 If there is no match at all, nil is returned.
1234 For a unique match which is exact, t is returned.
1236 If ALIST is a hash-table, all the string and symbol keys are the
1237 possible matches.
1238 If ALIST is an obarray, the names of all symbols in the obarray
1239 are the possible matches.
1241 ALIST can also be a function to do the completion itself.
1242 It receives three arguments: the values STRING, PREDICATE and nil.
1243 Whatever it returns becomes the value of `try-completion'.
1245 If optional third argument PREDICATE is non-nil,
1246 it is used to test each possible match.
1247 The match is a candidate only if PREDICATE returns non-nil.
1248 The argument given to PREDICATE is the alist element
1249 or the symbol from the obarray. If ALIST is a hash-table,
1250 predicate is called with two arguments: the key and the value.
1251 Additionally to this predicate, `completion-regexp-list'
1252 is used to further constrain the set of candidates. */)
1253 (string, alist, predicate)
1254 Lisp_Object string, alist, predicate;
1256 Lisp_Object bestmatch, tail, elt, eltstring;
1257 /* Size in bytes of BESTMATCH. */
1258 int bestmatchsize = 0;
1259 /* These are in bytes, too. */
1260 int compare, matchsize;
1261 int type = (HASH_TABLE_P (alist) ? 3
1262 : VECTORP (alist) ? 2
1263 : NILP (alist) || (CONSP (alist)
1264 && (!SYMBOLP (XCAR (alist))
1265 || NILP (XCAR (alist)))));
1266 int index = 0, obsize = 0;
1267 int matchcount = 0;
1268 int bindcount = -1;
1269 Lisp_Object bucket, zero, end, tem;
1270 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
1272 CHECK_STRING (string);
1273 if (type == 0)
1274 return call3 (alist, string, predicate, Qnil);
1276 bestmatch = bucket = Qnil;
1277 zero = make_number (0);
1279 /* If ALIST is not a list, set TAIL just for gc pro. */
1280 tail = alist;
1281 if (type == 2)
1283 obsize = XVECTOR (alist)->size;
1284 bucket = XVECTOR (alist)->contents[index];
1287 while (1)
1289 /* Get the next element of the alist, obarray, or hash-table. */
1290 /* Exit the loop if the elements are all used up. */
1291 /* elt gets the alist element or symbol.
1292 eltstring gets the name to check as a completion. */
1294 if (type == 1)
1296 if (!CONSP (tail))
1297 break;
1298 elt = XCAR (tail);
1299 eltstring = CONSP (elt) ? XCAR (elt) : elt;
1300 tail = XCDR (tail);
1302 else if (type == 2)
1304 if (!EQ (bucket, zero))
1306 elt = bucket;
1307 eltstring = elt;
1308 if (XSYMBOL (bucket)->next)
1309 XSETSYMBOL (bucket, XSYMBOL (bucket)->next);
1310 else
1311 XSETFASTINT (bucket, 0);
1313 else if (++index >= obsize)
1314 break;
1315 else
1317 bucket = XVECTOR (alist)->contents[index];
1318 continue;
1321 else /* if (type == 3) */
1323 while (index < HASH_TABLE_SIZE (XHASH_TABLE (alist))
1324 && NILP (HASH_HASH (XHASH_TABLE (alist), index)))
1325 index++;
1326 if (index >= HASH_TABLE_SIZE (XHASH_TABLE (alist)))
1327 break;
1328 else
1329 elt = eltstring = HASH_KEY (XHASH_TABLE (alist), index++);
1332 /* Is this element a possible completion? */
1334 if (SYMBOLP (eltstring))
1335 eltstring = Fsymbol_name (eltstring);
1337 if (STRINGP (eltstring)
1338 && SCHARS (string) <= SCHARS (eltstring)
1339 && (tem = Fcompare_strings (eltstring, zero,
1340 make_number (SCHARS (string)),
1341 string, zero, Qnil,
1342 completion_ignore_case ? Qt : Qnil),
1343 EQ (Qt, tem)))
1345 /* Yes. */
1346 Lisp_Object regexps;
1348 /* Ignore this element if it fails to match all the regexps. */
1350 for (regexps = Vcompletion_regexp_list; CONSP (regexps);
1351 regexps = XCDR (regexps))
1353 if (bindcount < 0) {
1354 bindcount = SPECPDL_INDEX ();
1355 specbind (Qcase_fold_search,
1356 completion_ignore_case ? Qt : Qnil);
1358 tem = Fstring_match (XCAR (regexps), eltstring, zero);
1359 if (NILP (tem))
1360 break;
1362 if (CONSP (regexps))
1363 continue;
1366 /* Ignore this element if there is a predicate
1367 and the predicate doesn't like it. */
1369 if (!NILP (predicate))
1371 if (EQ (predicate, Qcommandp))
1372 tem = Fcommandp (elt, Qnil);
1373 else
1375 if (bindcount >= 0) {
1376 unbind_to (bindcount, Qnil);
1377 bindcount = -1;
1379 GCPRO4 (tail, string, eltstring, bestmatch);
1380 tem = type == 3
1381 ? call2 (predicate, elt,
1382 HASH_VALUE (XHASH_TABLE (alist), index - 1))
1383 : call1 (predicate, elt);
1384 UNGCPRO;
1386 if (NILP (tem)) continue;
1389 /* Update computation of how much all possible completions match */
1391 if (NILP (bestmatch))
1393 matchcount = 1;
1394 bestmatch = eltstring;
1395 bestmatchsize = SCHARS (eltstring);
1397 else
1399 compare = min (bestmatchsize, SCHARS (eltstring));
1400 tem = Fcompare_strings (bestmatch, zero,
1401 make_number (compare),
1402 eltstring, zero,
1403 make_number (compare),
1404 completion_ignore_case ? Qt : Qnil);
1405 if (EQ (tem, Qt))
1406 matchsize = compare;
1407 else if (XINT (tem) < 0)
1408 matchsize = - XINT (tem) - 1;
1409 else
1410 matchsize = XINT (tem) - 1;
1412 if (matchsize < 0)
1413 /* When can this happen ? -stef */
1414 matchsize = compare;
1415 if (completion_ignore_case)
1417 /* If this is an exact match except for case,
1418 use it as the best match rather than one that is not an
1419 exact match. This way, we get the case pattern
1420 of the actual match. */
1421 if ((matchsize == SCHARS (eltstring)
1422 && matchsize < SCHARS (bestmatch))
1424 /* If there is more than one exact match ignoring case,
1425 and one of them is exact including case,
1426 prefer that one. */
1427 /* If there is no exact match ignoring case,
1428 prefer a match that does not change the case
1429 of the input. */
1430 ((matchsize == SCHARS (eltstring))
1432 (matchsize == SCHARS (bestmatch))
1433 && (tem = Fcompare_strings (eltstring, zero,
1434 make_number (SCHARS (string)),
1435 string, zero,
1436 Qnil,
1437 Qnil),
1438 EQ (Qt, tem))
1439 && (tem = Fcompare_strings (bestmatch, zero,
1440 make_number (SCHARS (string)),
1441 string, zero,
1442 Qnil,
1443 Qnil),
1444 ! EQ (Qt, tem))))
1445 bestmatch = eltstring;
1447 if (bestmatchsize != SCHARS (eltstring)
1448 || bestmatchsize != matchsize)
1449 /* Don't count the same string multiple times. */
1450 matchcount++;
1451 bestmatchsize = matchsize;
1452 if (matchsize <= SCHARS (string)
1453 && matchcount > 1)
1454 /* No need to look any further. */
1455 break;
1460 if (bindcount >= 0) {
1461 unbind_to (bindcount, Qnil);
1462 bindcount = -1;
1465 if (NILP (bestmatch))
1466 return Qnil; /* No completions found */
1467 /* If we are ignoring case, and there is no exact match,
1468 and no additional text was supplied,
1469 don't change the case of what the user typed. */
1470 if (completion_ignore_case && bestmatchsize == SCHARS (string)
1471 && SCHARS (bestmatch) > bestmatchsize)
1472 return minibuf_conform_representation (string, bestmatch);
1474 /* Return t if the supplied string is an exact match (counting case);
1475 it does not require any change to be made. */
1476 if (matchcount == 1 && bestmatchsize == SCHARS (string)
1477 && (tem = Fcompare_strings (bestmatch, make_number (0),
1478 make_number (bestmatchsize),
1479 string, make_number (0),
1480 make_number (bestmatchsize),
1481 Qnil),
1482 EQ (Qt, tem)))
1483 return Qt;
1485 XSETFASTINT (zero, 0); /* Else extract the part in which */
1486 XSETFASTINT (end, bestmatchsize); /* all completions agree */
1487 return Fsubstring (bestmatch, zero, end);
1490 DEFUN ("all-completions", Fall_completions, Sall_completions, 2, 4, 0,
1491 doc: /* Search for partial matches to STRING in ALIST.
1492 Each car of each element of ALIST (or each element if it is not a cons cell)
1493 is tested to see if it begins with STRING. The possible matches may be
1494 strings or symbols. Symbols are converted to strings before testing,
1495 see `symbol-name'.
1496 The value is a list of all the strings from ALIST that match.
1498 If ALIST is a hash-table, all the string and symbol keys are the
1499 possible matches.
1500 If ALIST is an obarray, the names of all symbols in the obarray
1501 are the possible matches.
1503 ALIST can also be a function to do the completion itself.
1504 It receives three arguments: the values STRING, PREDICATE and t.
1505 Whatever it returns becomes the value of `all-completions'.
1507 If optional third argument PREDICATE is non-nil,
1508 it is used to test each possible match.
1509 The match is a candidate only if PREDICATE returns non-nil.
1510 The argument given to PREDICATE is the alist element
1511 or the symbol from the obarray. If ALIST is a hash-table,
1512 predicate is called with two arguments: the key and the value.
1513 Additionally to this predicate, `completion-regexp-list'
1514 is used to further constrain the set of candidates.
1516 If the optional fourth argument HIDE-SPACES is non-nil,
1517 strings in ALIST that start with a space
1518 are ignored unless STRING itself starts with a space. */)
1519 (string, alist, predicate, hide_spaces)
1520 Lisp_Object string, alist, predicate, hide_spaces;
1522 Lisp_Object tail, elt, eltstring;
1523 Lisp_Object allmatches;
1524 int type = HASH_TABLE_P (alist) ? 3
1525 : VECTORP (alist) ? 2
1526 : NILP (alist) || (CONSP (alist)
1527 && (!SYMBOLP (XCAR (alist))
1528 || NILP (XCAR (alist))));
1529 int index = 0, obsize = 0;
1530 int bindcount = -1;
1531 Lisp_Object bucket, tem, zero;
1532 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
1534 CHECK_STRING (string);
1535 if (type == 0)
1536 return call3 (alist, string, predicate, Qt);
1537 allmatches = bucket = Qnil;
1538 zero = make_number (0);
1540 /* If ALIST is not a list, set TAIL just for gc pro. */
1541 tail = alist;
1542 if (type == 2)
1544 obsize = XVECTOR (alist)->size;
1545 bucket = XVECTOR (alist)->contents[index];
1548 while (1)
1550 /* Get the next element of the alist, obarray, or hash-table. */
1551 /* Exit the loop if the elements are all used up. */
1552 /* elt gets the alist element or symbol.
1553 eltstring gets the name to check as a completion. */
1555 if (type == 1)
1557 if (!CONSP (tail))
1558 break;
1559 elt = XCAR (tail);
1560 eltstring = CONSP (elt) ? XCAR (elt) : elt;
1561 tail = XCDR (tail);
1563 else if (type == 2)
1565 if (!EQ (bucket, zero))
1567 elt = bucket;
1568 eltstring = elt;
1569 if (XSYMBOL (bucket)->next)
1570 XSETSYMBOL (bucket, XSYMBOL (bucket)->next);
1571 else
1572 XSETFASTINT (bucket, 0);
1574 else if (++index >= obsize)
1575 break;
1576 else
1578 bucket = XVECTOR (alist)->contents[index];
1579 continue;
1582 else /* if (type == 3) */
1584 while (index < HASH_TABLE_SIZE (XHASH_TABLE (alist))
1585 && NILP (HASH_HASH (XHASH_TABLE (alist), index)))
1586 index++;
1587 if (index >= HASH_TABLE_SIZE (XHASH_TABLE (alist)))
1588 break;
1589 else
1590 elt = eltstring = HASH_KEY (XHASH_TABLE (alist), index++);
1593 /* Is this element a possible completion? */
1595 if (SYMBOLP (eltstring))
1596 eltstring = Fsymbol_name (eltstring);
1598 if (STRINGP (eltstring)
1599 && SCHARS (string) <= SCHARS (eltstring)
1600 /* If HIDE_SPACES, reject alternatives that start with space
1601 unless the input starts with space. */
1602 && ((SBYTES (string) > 0
1603 && SREF (string, 0) == ' ')
1604 || SREF (eltstring, 0) != ' '
1605 || NILP (hide_spaces))
1606 && (tem = Fcompare_strings (eltstring, zero,
1607 make_number (SCHARS (string)),
1608 string, zero,
1609 make_number (SCHARS (string)),
1610 completion_ignore_case ? Qt : Qnil),
1611 EQ (Qt, tem)))
1613 /* Yes. */
1614 Lisp_Object regexps;
1615 Lisp_Object zero;
1616 XSETFASTINT (zero, 0);
1618 /* Ignore this element if it fails to match all the regexps. */
1620 for (regexps = Vcompletion_regexp_list; CONSP (regexps);
1621 regexps = XCDR (regexps))
1623 if (bindcount < 0) {
1624 bindcount = SPECPDL_INDEX ();
1625 specbind (Qcase_fold_search,
1626 completion_ignore_case ? Qt : Qnil);
1628 tem = Fstring_match (XCAR (regexps), eltstring, zero);
1629 if (NILP (tem))
1630 break;
1632 if (CONSP (regexps))
1633 continue;
1636 /* Ignore this element if there is a predicate
1637 and the predicate doesn't like it. */
1639 if (!NILP (predicate))
1641 if (EQ (predicate, Qcommandp))
1642 tem = Fcommandp (elt, Qnil);
1643 else
1645 if (bindcount >= 0) {
1646 unbind_to (bindcount, Qnil);
1647 bindcount = -1;
1649 GCPRO4 (tail, eltstring, allmatches, string);
1650 tem = type == 3
1651 ? call2 (predicate, elt,
1652 HASH_VALUE (XHASH_TABLE (alist), index - 1))
1653 : call1 (predicate, elt);
1654 UNGCPRO;
1656 if (NILP (tem)) continue;
1658 /* Ok => put it on the list. */
1659 allmatches = Fcons (eltstring, allmatches);
1663 if (bindcount >= 0) {
1664 unbind_to (bindcount, Qnil);
1665 bindcount = -1;
1668 return Fnreverse (allmatches);
1671 Lisp_Object Vminibuffer_completion_table, Qminibuffer_completion_table;
1672 Lisp_Object Vminibuffer_completion_predicate, Qminibuffer_completion_predicate;
1673 Lisp_Object Vminibuffer_completion_confirm, Qminibuffer_completion_confirm;
1674 Lisp_Object Vminibuffer_completing_file_name;
1676 DEFUN ("completing-read", Fcompleting_read, Scompleting_read, 2, 8, 0,
1677 doc: /* Read a string in the minibuffer, with completion.
1678 PROMPT is a string to prompt with; normally it ends in a colon and a space.
1679 TABLE can be an list of strings, an alist, an obarray or a hash table.
1680 TABLE can also be a function to do the completion itself.
1681 PREDICATE limits completion to a subset of TABLE.
1682 See `try-completion' and `all-completions' for more details
1683 on completion, TABLE, and PREDICATE.
1685 If REQUIRE-MATCH is non-nil, the user is not allowed to exit unless
1686 the input is (or completes to) an element of TABLE or is null.
1687 If it is also not t, typing RET does not exit if it does non-null completion.
1688 If the input is null, `completing-read' returns DEF, or an empty string
1689 if DEF is nil, regardless of the value of REQUIRE-MATCH.
1691 If INITIAL-INPUT is non-nil, insert it in the minibuffer initially,
1692 with point positioned at the end.
1693 If it is (STRING . POSITION), the initial input is STRING, but point
1694 is placed at _zero-indexed_ position POSITION in STRING. (*Note*
1695 that this is different from `read-from-minibuffer' and related
1696 functions, which use one-indexing for POSITION.) This feature is
1697 deprecated--it is best to pass nil for INITIAL-INPUT and supply the
1698 default value DEF instead. The user can yank the default value into
1699 the minibuffer easily using \\[next-history-element].
1701 HIST, if non-nil, specifies a history list and optionally the initial
1702 position in the list. It can be a symbol, which is the history list
1703 variable to use, or it can be a cons cell (HISTVAR . HISTPOS). In
1704 that case, HISTVAR is the history list variable to use, and HISTPOS
1705 is the initial position (the position in the list used by the
1706 minibuffer history commands). For consistency, you should also
1707 specify that element of the history as the value of
1708 INITIAL-INPUT. (This is the only case in which you should use
1709 INITIAL-INPUT instead of DEF.) Positions are counted starting from
1710 1 at the beginning of the list. The variable `history-length'
1711 controls the maximum length of a history list.
1713 DEF, if non-nil, is the default value.
1715 If INHERIT-INPUT-METHOD is non-nil, the minibuffer inherits
1716 the current input method and the setting of `enable-multibyte-characters'.
1718 Completion ignores case if the ambient value of
1719 `completion-ignore-case' is non-nil. */)
1720 (prompt, table, predicate, require_match, initial_input, hist, def, inherit_input_method)
1721 Lisp_Object prompt, table, predicate, require_match, initial_input;
1722 Lisp_Object hist, def, inherit_input_method;
1724 Lisp_Object val, histvar, histpos, position;
1725 Lisp_Object init;
1726 int pos = 0;
1727 int count = SPECPDL_INDEX ();
1728 struct gcpro gcpro1;
1730 init = initial_input;
1731 GCPRO1 (def);
1733 specbind (Qminibuffer_completion_table, table);
1734 specbind (Qminibuffer_completion_predicate, predicate);
1735 specbind (Qminibuffer_completion_confirm,
1736 EQ (require_match, Qt) ? Qnil : require_match);
1737 last_exact_completion = Qnil;
1739 position = Qnil;
1740 if (!NILP (init))
1742 if (CONSP (init))
1744 position = Fcdr (init);
1745 init = Fcar (init);
1747 CHECK_STRING (init);
1748 if (!NILP (position))
1750 CHECK_NUMBER (position);
1751 /* Convert to distance from end of input. */
1752 pos = XINT (position) - SCHARS (init);
1756 if (SYMBOLP (hist))
1758 histvar = hist;
1759 histpos = Qnil;
1761 else
1763 histvar = Fcar_safe (hist);
1764 histpos = Fcdr_safe (hist);
1766 if (NILP (histvar))
1767 histvar = Qminibuffer_history;
1768 if (NILP (histpos))
1769 XSETFASTINT (histpos, 0);
1771 val = read_minibuf (NILP (require_match)
1772 ? (NILP (Vminibuffer_completing_file_name)
1773 ? Vminibuffer_local_completion_map
1774 : Vminibuffer_local_filename_completion_map)
1775 : (NILP (Vminibuffer_completing_file_name)
1776 ? Vminibuffer_local_must_match_map
1777 : Vminibuffer_local_must_match_filename_map),
1778 init, prompt, make_number (pos), 0,
1779 histvar, histpos, def, 0,
1780 !NILP (inherit_input_method));
1782 if (STRINGP (val) && SCHARS (val) == 0 && ! NILP (def))
1783 val = def;
1785 RETURN_UNGCPRO (unbind_to (count, val));
1788 Lisp_Object Fminibuffer_completion_help ();
1789 Lisp_Object Fassoc_string ();
1791 /* Test whether TXT is an exact completion. */
1792 DEFUN ("test-completion", Ftest_completion, Stest_completion, 2, 3, 0,
1793 doc: /* Return non-nil if STRING is a valid completion.
1794 Takes the same arguments as `all-completions' and `try-completion'.
1795 If ALIST is a function, it is called with three arguments:
1796 the values STRING, PREDICATE and `lambda'. */)
1797 (string, alist, predicate)
1798 Lisp_Object string, alist, predicate;
1800 Lisp_Object regexps, tail, tem = Qnil;
1801 int i = 0;
1803 CHECK_STRING (string);
1805 if ((CONSP (alist) && (!SYMBOLP (XCAR (alist)) || NILP (XCAR (alist))))
1806 || NILP (alist))
1808 tem = Fassoc_string (string, alist, completion_ignore_case ? Qt : Qnil);
1809 if (NILP (tem))
1810 return Qnil;
1812 else if (VECTORP (alist))
1814 /* Bypass intern-soft as that loses for nil. */
1815 tem = oblookup (alist,
1816 SDATA (string),
1817 SCHARS (string),
1818 SBYTES (string));
1819 if (!SYMBOLP (tem))
1821 if (STRING_MULTIBYTE (string))
1822 string = Fstring_make_unibyte (string);
1823 else
1824 string = Fstring_make_multibyte (string);
1826 tem = oblookup (alist,
1827 SDATA (string),
1828 SCHARS (string),
1829 SBYTES (string));
1832 if (completion_ignore_case && !SYMBOLP (tem))
1834 for (i = XVECTOR (alist)->size - 1; i >= 0; i--)
1836 tail = XVECTOR (alist)->contents[i];
1837 if (SYMBOLP (tail))
1838 while (1)
1840 if (EQ((Fcompare_strings (string, make_number (0), Qnil,
1841 Fsymbol_name (tail),
1842 make_number (0) , Qnil, Qt)),
1843 Qt))
1845 tem = tail;
1846 break;
1848 if (XSYMBOL (tail)->next == 0)
1849 break;
1850 XSETSYMBOL (tail, XSYMBOL (tail)->next);
1855 if (!SYMBOLP (tem))
1856 return Qnil;
1858 else if (HASH_TABLE_P (alist))
1860 struct Lisp_Hash_Table *h = XHASH_TABLE (alist);
1861 i = hash_lookup (h, string, NULL);
1862 if (i >= 0)
1863 tem = HASH_KEY (h, i);
1864 else
1865 for (i = 0; i < HASH_TABLE_SIZE (h); ++i)
1866 if (!NILP (HASH_HASH (h, i)) &&
1867 EQ (Fcompare_strings (string, make_number (0), Qnil,
1868 HASH_KEY (h, i), make_number (0) , Qnil,
1869 completion_ignore_case ? Qt : Qnil),
1870 Qt))
1872 tem = HASH_KEY (h, i);
1873 break;
1875 if (!STRINGP (tem))
1876 return Qnil;
1878 else
1879 return call3 (alist, string, predicate, Qlambda);
1881 /* Reject this element if it fails to match all the regexps. */
1882 if (CONSP (Vcompletion_regexp_list))
1884 int count = SPECPDL_INDEX ();
1885 specbind (Qcase_fold_search, completion_ignore_case ? Qt : Qnil);
1886 for (regexps = Vcompletion_regexp_list; CONSP (regexps);
1887 regexps = XCDR (regexps))
1889 if (NILP (Fstring_match (XCAR (regexps),
1890 SYMBOLP (tem) ? string : tem,
1891 Qnil)))
1892 return unbind_to (count, Qnil);
1894 unbind_to (count, Qnil);
1897 /* Finally, check the predicate. */
1898 if (!NILP (predicate))
1900 return HASH_TABLE_P (alist)
1901 ? call2 (predicate, tem, HASH_VALUE (XHASH_TABLE (alist), i))
1902 : call1 (predicate, tem);
1904 else
1905 return Qt;
1908 DEFUN ("internal-complete-buffer", Finternal_complete_buffer, Sinternal_complete_buffer, 3, 3, 0,
1909 doc: /* Perform completion on buffer names.
1910 If the argument FLAG is nil, invoke `try-completion', if it's t, invoke
1911 `all-completions', otherwise invoke `test-completion'.
1913 The arguments STRING and PREDICATE are as in `try-completion',
1914 `all-completions', and `test-completion'. */)
1915 (string, predicate, flag)
1916 Lisp_Object string, predicate, flag;
1918 if (NILP (flag))
1919 return Ftry_completion (string, Vbuffer_alist, predicate);
1920 else if (EQ (flag, Qt))
1921 return Fall_completions (string, Vbuffer_alist, predicate, Qt);
1922 else /* assume `lambda' */
1923 return Ftest_completion (string, Vbuffer_alist, predicate);
1926 /* returns:
1927 * 0 no possible completion
1928 * 1 was already an exact and unique completion
1929 * 3 was already an exact completion
1930 * 4 completed to an exact completion
1931 * 5 some completion happened
1932 * 6 no completion happened
1935 do_completion ()
1937 Lisp_Object completion, string, tem;
1938 int completedp;
1939 Lisp_Object last;
1940 struct gcpro gcpro1, gcpro2;
1942 completion = Ftry_completion (Fminibuffer_completion_contents (),
1943 Vminibuffer_completion_table,
1944 Vminibuffer_completion_predicate);
1945 last = last_exact_completion;
1946 last_exact_completion = Qnil;
1948 GCPRO2 (completion, last);
1950 if (NILP (completion))
1952 bitch_at_user ();
1953 temp_echo_area_glyphs (build_string (" [No match]"));
1954 UNGCPRO;
1955 return 0;
1958 if (EQ (completion, Qt)) /* exact and unique match */
1960 UNGCPRO;
1961 return 1;
1964 string = Fminibuffer_completion_contents ();
1966 /* COMPLETEDP should be true if some completion was done, which
1967 doesn't include simply changing the case of the entered string.
1968 However, for appearance, the string is rewritten if the case
1969 changes. */
1970 tem = Fcompare_strings (completion, Qnil, Qnil, string, Qnil, Qnil, Qt);
1971 completedp = !EQ (tem, Qt);
1973 tem = Fcompare_strings (completion, Qnil, Qnil, string, Qnil, Qnil, Qnil);
1974 if (!EQ (tem, Qt))
1975 /* Rewrite the user's input. */
1977 int prompt_end = XINT (Fminibuffer_prompt_end ());
1978 /* Some completion happened */
1980 if (! NILP (Vminibuffer_completing_file_name)
1981 && SREF (completion, SBYTES (completion) - 1) == '/'
1982 && PT < ZV
1983 && FETCH_CHAR (PT_BYTE) == '/')
1985 del_range (prompt_end, PT + 1);
1987 else
1988 del_range (prompt_end, PT);
1990 Finsert (1, &completion);
1992 if (! completedp)
1993 /* The case of the string changed, but that's all. We're not
1994 sure whether this is a unique completion or not, so try again
1995 using the real case (this shouldn't recurse again, because
1996 the next time try-completion will return either `t' or the
1997 exact string). */
1999 UNGCPRO;
2000 return do_completion ();
2004 /* It did find a match. Do we match some possibility exactly now? */
2005 tem = Ftest_completion (Fminibuffer_contents (),
2006 Vminibuffer_completion_table,
2007 Vminibuffer_completion_predicate);
2008 if (NILP (tem))
2010 /* not an exact match */
2011 UNGCPRO;
2012 if (completedp)
2013 return 5;
2014 else if (!NILP (Vcompletion_auto_help))
2015 Fminibuffer_completion_help ();
2016 else
2017 temp_echo_area_glyphs (build_string (" [Next char not unique]"));
2018 return 6;
2020 else if (completedp)
2022 UNGCPRO;
2023 return 4;
2025 /* If the last exact completion and this one were the same,
2026 it means we've already given a "Complete but not unique"
2027 message and the user's hit TAB again, so now we give him help. */
2028 last_exact_completion = completion;
2029 if (!NILP (last))
2031 tem = Fminibuffer_completion_contents ();
2032 if (!NILP (Fequal (tem, last)))
2033 Fminibuffer_completion_help ();
2035 UNGCPRO;
2036 return 3;
2039 /* Like assoc but assumes KEY is a string, and ignores case if appropriate. */
2041 DEFUN ("assoc-string", Fassoc_string, Sassoc_string, 2, 3, 0,
2042 doc: /* Like `assoc' but specifically for strings.
2043 Unibyte strings are converted to multibyte for comparison.
2044 And case is ignored if CASE-FOLD is non-nil.
2045 As opposed to `assoc', it will also match an entry consisting of a single
2046 string rather than a cons cell whose car is a string. */)
2047 (key, list, case_fold)
2048 register Lisp_Object key;
2049 Lisp_Object list, case_fold;
2051 register Lisp_Object tail;
2053 for (tail = list; !NILP (tail); tail = Fcdr (tail))
2055 register Lisp_Object elt, tem, thiscar;
2056 elt = Fcar (tail);
2057 thiscar = CONSP (elt) ? XCAR (elt) : elt;
2058 if (!STRINGP (thiscar))
2059 continue;
2060 tem = Fcompare_strings (thiscar, make_number (0), Qnil,
2061 key, make_number (0), Qnil,
2062 case_fold);
2063 if (EQ (tem, Qt))
2064 return elt;
2065 QUIT;
2067 return Qnil;
2070 DEFUN ("minibuffer-complete", Fminibuffer_complete, Sminibuffer_complete, 0, 0, "",
2071 doc: /* Complete the minibuffer contents as far as possible.
2072 Return nil if there is no valid completion, else t.
2073 If no characters can be completed, display a list of possible completions.
2074 If you repeat this command after it displayed such a list,
2075 scroll the window of possible completions. */)
2078 register int i;
2079 Lisp_Object window, tem;
2081 /* If the previous command was not this,
2082 mark the completion buffer obsolete. */
2083 if (! EQ (current_kboard->Vlast_command, Vthis_command))
2084 Vminibuf_scroll_window = Qnil;
2086 window = Vminibuf_scroll_window;
2087 /* If there's a fresh completion window with a live buffer,
2088 and this command is repeated, scroll that window. */
2089 if (! NILP (window) && ! NILP (XWINDOW (window)->buffer)
2090 && !NILP (XBUFFER (XWINDOW (window)->buffer)->name))
2092 struct buffer *obuf = current_buffer;
2094 Fset_buffer (XWINDOW (window)->buffer);
2095 tem = Fpos_visible_in_window_p (make_number (ZV), window, Qnil);
2096 if (! NILP (tem))
2097 /* If end is in view, scroll up to the beginning. */
2098 Fset_window_start (window, make_number (BEGV), Qnil);
2099 else
2100 /* Else scroll down one screen. */
2101 Fscroll_other_window (Qnil);
2103 set_buffer_internal (obuf);
2104 return Qnil;
2107 i = do_completion ();
2108 switch (i)
2110 case 0:
2111 return Qnil;
2113 case 1:
2114 if (PT != ZV)
2115 Fgoto_char (make_number (ZV));
2116 temp_echo_area_glyphs (build_string (" [Sole completion]"));
2117 break;
2119 case 3:
2120 if (PT != ZV)
2121 Fgoto_char (make_number (ZV));
2122 temp_echo_area_glyphs (build_string (" [Complete, but not unique]"));
2123 break;
2126 return Qt;
2129 /* Subroutines of Fminibuffer_complete_and_exit. */
2131 /* This one is called by internal_condition_case to do the real work. */
2133 Lisp_Object
2134 complete_and_exit_1 ()
2136 return make_number (do_completion ());
2139 /* This one is called by internal_condition_case if an error happens.
2140 Pretend the current value is an exact match. */
2142 Lisp_Object
2143 complete_and_exit_2 (ignore)
2144 Lisp_Object ignore;
2146 return make_number (1);
2149 EXFUN (Fexit_minibuffer, 0) NO_RETURN;
2151 DEFUN ("minibuffer-complete-and-exit", Fminibuffer_complete_and_exit,
2152 Sminibuffer_complete_and_exit, 0, 0, "",
2153 doc: /* If the minibuffer contents is a valid completion then exit.
2154 Otherwise try to complete it. If completion leads to a valid completion,
2155 a repetition of this command will exit. */)
2158 register int i;
2159 Lisp_Object val, tem;
2161 /* Allow user to specify null string */
2162 if (XINT (Fminibuffer_prompt_end ()) == ZV)
2163 goto exit;
2165 val = Fminibuffer_contents ();
2166 tem = Ftest_completion (val,
2167 Vminibuffer_completion_table,
2168 Vminibuffer_completion_predicate);
2169 if (!NILP (tem))
2171 if (completion_ignore_case)
2172 { /* Fixup case of the field, if necessary. */
2173 Lisp_Object compl
2174 = Ftry_completion (val,
2175 Vminibuffer_completion_table,
2176 Vminibuffer_completion_predicate);
2177 if (STRINGP (compl)
2178 /* If it weren't for this piece of paranoia, I'd replace
2179 the whole thing with a call to do_completion. */
2180 && EQ (Flength (val), Flength (compl)))
2182 del_range (XINT (Fminibuffer_prompt_end ()), ZV);
2183 Finsert (1, &compl);
2186 goto exit;
2189 /* Call do_completion, but ignore errors. */
2190 SET_PT (ZV);
2191 val = internal_condition_case (complete_and_exit_1, Qerror,
2192 complete_and_exit_2);
2194 i = XFASTINT (val);
2195 switch (i)
2197 case 1:
2198 case 3:
2199 goto exit;
2201 case 4:
2202 if (!NILP (Vminibuffer_completion_confirm))
2204 temp_echo_area_glyphs (build_string (" [Confirm]"));
2205 return Qnil;
2207 else
2208 goto exit;
2210 default:
2211 return Qnil;
2213 exit:
2214 return Fexit_minibuffer ();
2215 /* NOTREACHED */
2218 DEFUN ("minibuffer-complete-word", Fminibuffer_complete_word, Sminibuffer_complete_word,
2219 0, 0, "",
2220 doc: /* Complete the minibuffer contents at most a single word.
2221 After one word is completed as much as possible, a space or hyphen
2222 is added, provided that matches some possible completion.
2223 Return nil if there is no valid completion, else t. */)
2226 Lisp_Object completion, tem, tem1;
2227 register int i, i_byte;
2228 struct gcpro gcpro1, gcpro2;
2229 int prompt_end_charpos = XINT (Fminibuffer_prompt_end ());
2231 /* We keep calling Fbuffer_string rather than arrange for GC to
2232 hold onto a pointer to one of the strings thus made. */
2234 completion = Ftry_completion (Fminibuffer_completion_contents (),
2235 Vminibuffer_completion_table,
2236 Vminibuffer_completion_predicate);
2237 if (NILP (completion))
2239 bitch_at_user ();
2240 temp_echo_area_glyphs (build_string (" [No match]"));
2241 return Qnil;
2243 if (EQ (completion, Qt))
2244 return Qnil;
2246 #if 0 /* How the below code used to look, for reference. */
2247 tem = Fminibuffer_contents ();
2248 b = SDATA (tem);
2249 i = ZV - 1 - SCHARS (completion);
2250 p = SDATA (completion);
2251 if (i > 0 ||
2252 0 <= scmp (b, p, ZV - 1))
2254 i = 1;
2255 /* Set buffer to longest match of buffer tail and completion head. */
2256 while (0 <= scmp (b + i, p, ZV - 1 - i))
2257 i++;
2258 del_range (1, i + 1);
2259 SET_PT (ZV);
2261 #else /* Rewritten code */
2263 int buffer_nchars, completion_nchars;
2265 CHECK_STRING (completion);
2266 tem = Fminibuffer_completion_contents ();
2267 GCPRO2 (completion, tem);
2268 /* If reading a file name,
2269 expand any $ENVVAR refs in the buffer and in TEM. */
2270 if (! NILP (Vminibuffer_completing_file_name))
2272 Lisp_Object substituted;
2273 substituted = Fsubstitute_in_file_name (tem);
2274 if (! EQ (substituted, tem))
2276 tem = substituted;
2277 del_range (prompt_end_charpos, PT);
2278 Finsert (1, &tem);
2281 buffer_nchars = SCHARS (tem); /* # chars in what we completed. */
2282 completion_nchars = SCHARS (completion);
2283 i = buffer_nchars - completion_nchars;
2284 if (i > 0
2286 (tem1 = Fcompare_strings (tem, make_number (0),
2287 make_number (buffer_nchars),
2288 completion, make_number (0),
2289 make_number (buffer_nchars),
2290 completion_ignore_case ? Qt : Qnil),
2291 ! EQ (tem1, Qt)))
2293 int start_pos;
2295 /* Make buffer (before point) contain the longest match
2296 of TEM's tail and COMPLETION's head. */
2297 if (i <= 0) i = 1;
2298 start_pos= i;
2299 buffer_nchars -= i;
2300 while (i > 0)
2302 tem1 = Fcompare_strings (tem, make_number (start_pos), Qnil,
2303 completion, make_number (0),
2304 make_number (buffer_nchars),
2305 completion_ignore_case ? Qt : Qnil);
2306 start_pos++;
2307 if (EQ (tem1, Qt))
2308 break;
2309 i++;
2310 buffer_nchars--;
2312 del_range (start_pos, start_pos + buffer_nchars);
2314 UNGCPRO;
2316 #endif /* Rewritten code */
2319 int prompt_end_bytepos;
2320 prompt_end_bytepos = CHAR_TO_BYTE (prompt_end_charpos);
2321 i = PT - prompt_end_charpos;
2322 i_byte = PT_BYTE - prompt_end_bytepos;
2325 /* If completion finds next char not unique,
2326 consider adding a space or a hyphen. */
2327 if (i == SCHARS (completion))
2329 GCPRO1 (completion);
2330 tem = Ftry_completion (concat2 (Fminibuffer_completion_contents (),
2331 build_string (" ")),
2332 Vminibuffer_completion_table,
2333 Vminibuffer_completion_predicate);
2334 UNGCPRO;
2336 if (STRINGP (tem))
2337 completion = tem;
2338 else
2340 GCPRO1 (completion);
2341 tem =
2342 Ftry_completion (concat2 (Fminibuffer_completion_contents (),
2343 build_string ("-")),
2344 Vminibuffer_completion_table,
2345 Vminibuffer_completion_predicate);
2346 UNGCPRO;
2348 if (STRINGP (tem))
2349 completion = tem;
2353 /* Now find first word-break in the stuff found by completion.
2354 i gets index in string of where to stop completing. */
2356 int len, c;
2357 int bytes = SBYTES (completion);
2358 register const unsigned char *completion_string = SDATA (completion);
2359 for (; i_byte < SBYTES (completion); i_byte += len, i++)
2361 c = STRING_CHAR_AND_LENGTH (completion_string + i_byte,
2362 bytes - i_byte,
2363 len);
2364 if (SYNTAX (c) != Sword)
2366 i_byte += len;
2367 i++;
2368 break;
2373 /* If got no characters, print help for user. */
2375 if (i == PT - prompt_end_charpos)
2377 if (!NILP (Vcompletion_auto_help))
2378 Fminibuffer_completion_help ();
2379 return Qnil;
2382 /* Otherwise insert in minibuffer the chars we got */
2384 if (! NILP (Vminibuffer_completing_file_name)
2385 && SREF (completion, SBYTES (completion) - 1) == '/'
2386 && PT < ZV
2387 && FETCH_CHAR (PT_BYTE) == '/')
2389 del_range (prompt_end_charpos, PT + 1);
2391 else
2392 del_range (prompt_end_charpos, PT);
2394 insert_from_string (completion, 0, 0, i, i_byte, 1);
2395 return Qt;
2398 DEFUN ("display-completion-list", Fdisplay_completion_list, Sdisplay_completion_list,
2399 1, 2, 0,
2400 doc: /* Display the list of completions, COMPLETIONS, using `standard-output'.
2401 Each element may be just a symbol or string
2402 or may be a list of two strings to be printed as if concatenated.
2403 If it is a list of two strings, the first is the actual completion
2404 alternative, the second serves as annotation.
2405 `standard-output' must be a buffer.
2406 The actual completion alternatives, as inserted, are given `mouse-face'
2407 properties of `highlight'.
2408 At the end, this runs the normal hook `completion-setup-hook'.
2409 It can find the completion buffer in `standard-output'.
2410 The optional second arg COMMON-SUBSTRING is a string.
2411 It is used to put faces, `completions-first-difference' and
2412 `completions-common-part' on the completion buffer. The
2413 `completions-common-part' face is put on the common substring
2414 specified by COMMON-SUBSTRING. If COMMON-SUBSTRING is nil
2415 and the current buffer is not the minibuffer, the faces are not put.
2416 Internally, COMMON-SUBSTRING is bound to `completion-common-substring'
2417 during running `completion-setup-hook'. */)
2418 (completions, common_substring)
2419 Lisp_Object completions;
2420 Lisp_Object common_substring;
2422 Lisp_Object tail, elt;
2423 register int i;
2424 int column = 0;
2425 struct gcpro gcpro1, gcpro2, gcpro3;
2426 struct buffer *old = current_buffer;
2427 int first = 1;
2429 /* Note that (when it matters) every variable
2430 points to a non-string that is pointed to by COMPLETIONS,
2431 except for ELT. ELT can be pointing to a string
2432 when terpri or Findent_to calls a change hook. */
2433 elt = Qnil;
2434 GCPRO3 (completions, elt, common_substring);
2436 if (BUFFERP (Vstandard_output))
2437 set_buffer_internal (XBUFFER (Vstandard_output));
2439 if (NILP (completions))
2440 write_string ("There are no possible completions of what you have typed.",
2441 -1);
2442 else
2444 write_string ("Possible completions are:", -1);
2445 for (tail = completions, i = 0; CONSP (tail); tail = XCDR (tail), i++)
2447 Lisp_Object tem, string;
2448 int length;
2449 Lisp_Object startpos, endpos;
2451 startpos = Qnil;
2453 elt = XCAR (tail);
2454 if (SYMBOLP (elt))
2455 elt = SYMBOL_NAME (elt);
2456 /* Compute the length of this element. */
2457 if (CONSP (elt))
2459 tem = XCAR (elt);
2460 CHECK_STRING (tem);
2461 length = SCHARS (tem);
2463 tem = Fcar (XCDR (elt));
2464 CHECK_STRING (tem);
2465 length += SCHARS (tem);
2467 else
2469 CHECK_STRING (elt);
2470 length = SCHARS (elt);
2473 /* This does a bad job for narrower than usual windows.
2474 Sadly, the window it will appear in is not known
2475 until after the text has been made. */
2477 if (BUFFERP (Vstandard_output))
2478 XSETINT (startpos, BUF_PT (XBUFFER (Vstandard_output)));
2480 /* If the previous completion was very wide,
2481 or we have two on this line already,
2482 don't put another on the same line. */
2483 if (column > 33 || first
2484 /* If this is really wide, don't put it second on a line. */
2485 || (column > 0 && length > 45))
2487 Fterpri (Qnil);
2488 column = 0;
2490 /* Otherwise advance to column 35. */
2491 else
2493 if (BUFFERP (Vstandard_output))
2495 tem = Findent_to (make_number (35), make_number (2));
2497 column = XINT (tem);
2499 else
2503 write_string (" ", -1);
2504 column++;
2506 while (column < 35);
2510 if (BUFFERP (Vstandard_output))
2512 XSETINT (endpos, BUF_PT (XBUFFER (Vstandard_output)));
2513 Fset_text_properties (startpos, endpos,
2514 Qnil, Vstandard_output);
2517 /* Output this element.
2518 If necessary, convert it to unibyte or to multibyte first. */
2519 if (CONSP (elt))
2520 string = Fcar (elt);
2521 else
2522 string = elt;
2523 if (NILP (current_buffer->enable_multibyte_characters)
2524 && STRING_MULTIBYTE (string))
2525 string = Fstring_make_unibyte (string);
2526 else if (!NILP (current_buffer->enable_multibyte_characters)
2527 && !STRING_MULTIBYTE (string))
2528 string = Fstring_make_multibyte (string);
2530 if (BUFFERP (Vstandard_output))
2532 XSETINT (startpos, BUF_PT (XBUFFER (Vstandard_output)));
2534 Fprinc (string, Qnil);
2536 XSETINT (endpos, BUF_PT (XBUFFER (Vstandard_output)));
2538 Fput_text_property (startpos, endpos,
2539 Qmouse_face, intern ("highlight"),
2540 Vstandard_output);
2542 else
2544 Fprinc (string, Qnil);
2547 /* Output the annotation for this element. */
2548 if (CONSP (elt))
2550 if (BUFFERP (Vstandard_output))
2552 XSETINT (startpos, BUF_PT (XBUFFER (Vstandard_output)));
2554 Fprinc (Fcar (Fcdr (elt)), Qnil);
2556 XSETINT (endpos, BUF_PT (XBUFFER (Vstandard_output)));
2558 Fset_text_properties (startpos, endpos, Qnil,
2559 Vstandard_output);
2561 else
2563 Fprinc (Fcar (Fcdr (elt)), Qnil);
2568 /* Update COLUMN for what we have output. */
2569 column += length;
2571 /* If output is to a buffer, recompute COLUMN in a way
2572 that takes account of character widths. */
2573 if (BUFFERP (Vstandard_output))
2575 tem = Fcurrent_column ();
2576 column = XINT (tem);
2579 first = 0;
2583 if (BUFFERP (Vstandard_output))
2584 set_buffer_internal (old);
2586 if (!NILP (Vrun_hooks))
2588 int count1 = SPECPDL_INDEX ();
2590 specbind (intern ("completion-common-substring"), common_substring);
2591 call1 (Vrun_hooks, intern ("completion-setup-hook"));
2593 unbind_to (count1, Qnil);
2596 UNGCPRO;
2598 return Qnil;
2602 static Lisp_Object
2603 display_completion_list_1 (list)
2604 Lisp_Object list;
2606 return Fdisplay_completion_list (list, Qnil);
2609 DEFUN ("minibuffer-completion-help", Fminibuffer_completion_help, Sminibuffer_completion_help,
2610 0, 0, "",
2611 doc: /* Display a list of possible completions of the current minibuffer contents. */)
2614 Lisp_Object completions;
2616 message ("Making completion list...");
2617 completions = Fall_completions (Fminibuffer_completion_contents (),
2618 Vminibuffer_completion_table,
2619 Vminibuffer_completion_predicate,
2620 Qt);
2621 clear_message (1, 0);
2623 if (NILP (completions))
2625 bitch_at_user ();
2626 temp_echo_area_glyphs (build_string (" [No completions]"));
2628 else
2630 /* Sort and remove duplicates. */
2631 Lisp_Object tmp = completions = Fsort (completions, Qstring_lessp);
2632 while (CONSP (tmp))
2634 if (CONSP (XCDR (tmp))
2635 && !NILP (Fequal (XCAR (tmp), XCAR (XCDR (tmp)))))
2636 XSETCDR (tmp, XCDR (XCDR (tmp)));
2637 else
2638 tmp = XCDR (tmp);
2640 internal_with_output_to_temp_buffer ("*Completions*",
2641 display_completion_list_1,
2642 completions);
2644 return Qnil;
2647 DEFUN ("self-insert-and-exit", Fself_insert_and_exit, Sself_insert_and_exit, 0, 0, "",
2648 doc: /* Terminate minibuffer input. */)
2651 if (INTEGERP (last_command_char))
2652 internal_self_insert (XINT (last_command_char), 0);
2653 else
2654 bitch_at_user ();
2656 return Fexit_minibuffer ();
2659 DEFUN ("exit-minibuffer", Fexit_minibuffer, Sexit_minibuffer, 0, 0, "",
2660 doc: /* Terminate this minibuffer argument. */)
2663 /* If the command that uses this has made modifications in the minibuffer,
2664 we don't want them to cause deactivation of the mark in the original
2665 buffer.
2666 A better solution would be to make deactivate-mark buffer-local
2667 (or to turn it into a list of buffers, ...), but in the mean time,
2668 this should do the trick in most cases. */
2669 Vdeactivate_mark = Qnil;
2670 Fthrow (Qexit, Qnil);
2673 DEFUN ("minibuffer-depth", Fminibuffer_depth, Sminibuffer_depth, 0, 0, 0,
2674 doc: /* Return current depth of activations of minibuffer, a nonnegative integer. */)
2677 return make_number (minibuf_level);
2680 DEFUN ("minibuffer-prompt", Fminibuffer_prompt, Sminibuffer_prompt, 0, 0, 0,
2681 doc: /* Return the prompt string of the currently-active minibuffer.
2682 If no minibuffer is active, return nil. */)
2685 return Fcopy_sequence (minibuf_prompt);
2689 /* Temporarily display STRING at the end of the current
2690 minibuffer contents. This is used to display things like
2691 "[No Match]" when the user requests a completion for a prefix
2692 that has no possible completions, and other quick, unobtrusive
2693 messages. */
2695 void
2696 temp_echo_area_glyphs (string)
2697 Lisp_Object string;
2699 int osize = ZV;
2700 int osize_byte = ZV_BYTE;
2701 int opoint = PT;
2702 int opoint_byte = PT_BYTE;
2703 Lisp_Object oinhibit;
2704 oinhibit = Vinhibit_quit;
2706 /* Clear out any old echo-area message to make way for our new thing. */
2707 message (0);
2709 SET_PT_BOTH (osize, osize_byte);
2710 insert_from_string (string, 0, 0, SCHARS (string), SBYTES (string), 0);
2711 SET_PT_BOTH (opoint, opoint_byte);
2712 Vinhibit_quit = Qt;
2713 sit_for (make_number (2), 0, 2);
2714 del_range_both (osize, osize_byte, ZV, ZV_BYTE, 1);
2715 SET_PT_BOTH (opoint, opoint_byte);
2716 if (!NILP (Vquit_flag))
2718 Vquit_flag = Qnil;
2719 Vunread_command_events = Fcons (make_number (quit_char), Qnil);
2721 Vinhibit_quit = oinhibit;
2724 DEFUN ("minibuffer-message", Fminibuffer_message, Sminibuffer_message,
2725 1, 1, 0,
2726 doc: /* Temporarily display STRING at the end of the minibuffer.
2727 The text is displayed for a period controlled by `minibuffer-message-timeout',
2728 or until the next input event arrives, whichever comes first. */)
2729 (string)
2730 Lisp_Object string;
2732 CHECK_STRING (string);
2733 temp_echo_area_glyphs (string);
2734 return Qnil;
2737 void
2738 init_minibuf_once ()
2740 Vminibuffer_list = Qnil;
2741 staticpro (&Vminibuffer_list);
2744 void
2745 syms_of_minibuf ()
2747 minibuf_level = 0;
2748 minibuf_prompt = Qnil;
2749 staticpro (&minibuf_prompt);
2751 minibuf_save_list = Qnil;
2752 staticpro (&minibuf_save_list);
2754 Qread_file_name_internal = intern ("read-file-name-internal");
2755 staticpro (&Qread_file_name_internal);
2757 Qminibuffer_default = intern ("minibuffer-default");
2758 staticpro (&Qminibuffer_default);
2759 Fset (Qminibuffer_default, Qnil);
2761 Qminibuffer_completion_table = intern ("minibuffer-completion-table");
2762 staticpro (&Qminibuffer_completion_table);
2764 Qminibuffer_completion_confirm = intern ("minibuffer-completion-confirm");
2765 staticpro (&Qminibuffer_completion_confirm);
2767 Qminibuffer_completion_predicate = intern ("minibuffer-completion-predicate");
2768 staticpro (&Qminibuffer_completion_predicate);
2770 staticpro (&last_exact_completion);
2771 last_exact_completion = Qnil;
2773 staticpro (&last_minibuf_string);
2774 last_minibuf_string = Qnil;
2776 Quser_variable_p = intern ("user-variable-p");
2777 staticpro (&Quser_variable_p);
2779 Qminibuffer_history = intern ("minibuffer-history");
2780 staticpro (&Qminibuffer_history);
2782 Qbuffer_name_history = intern ("buffer-name-history");
2783 staticpro (&Qbuffer_name_history);
2784 Fset (Qbuffer_name_history, Qnil);
2786 Qminibuffer_setup_hook = intern ("minibuffer-setup-hook");
2787 staticpro (&Qminibuffer_setup_hook);
2789 Qminibuffer_exit_hook = intern ("minibuffer-exit-hook");
2790 staticpro (&Qminibuffer_exit_hook);
2792 Qhistory_length = intern ("history-length");
2793 staticpro (&Qhistory_length);
2795 Qcurrent_input_method = intern ("current-input-method");
2796 staticpro (&Qcurrent_input_method);
2798 Qactivate_input_method = intern ("activate-input-method");
2799 staticpro (&Qactivate_input_method);
2801 Qcase_fold_search = intern ("case-fold-search");
2802 staticpro (&Qcase_fold_search);
2804 DEFVAR_LISP ("read-buffer-function", &Vread_buffer_function,
2805 doc: /* If this is non-nil, `read-buffer' does its work by calling this function. */);
2806 Vread_buffer_function = Qnil;
2808 DEFVAR_LISP ("minibuffer-setup-hook", &Vminibuffer_setup_hook,
2809 doc: /* Normal hook run just after entry to minibuffer. */);
2810 Vminibuffer_setup_hook = Qnil;
2812 DEFVAR_LISP ("minibuffer-exit-hook", &Vminibuffer_exit_hook,
2813 doc: /* Normal hook run just after exit from minibuffer. */);
2814 Vminibuffer_exit_hook = Qnil;
2816 DEFVAR_LISP ("history-length", &Vhistory_length,
2817 doc: /* *Maximum length for history lists before truncation takes place.
2818 A number means that length; t means infinite. Truncation takes place
2819 just after a new element is inserted. Setting the `history-length'
2820 property of a history variable overrides this default. */);
2821 XSETFASTINT (Vhistory_length, 30);
2823 DEFVAR_BOOL ("history-delete-duplicates", &history_delete_duplicates,
2824 doc: /* *Non-nil means to delete duplicates in history.
2825 If set to t when adding a new history element, all previous identical
2826 elements are deleted from the history list. */);
2827 history_delete_duplicates = 0;
2829 DEFVAR_LISP ("history-add-new-input", &Vhistory_add_new_input,
2830 doc: /* *Non-nil means to add new elements in history.
2831 If set to nil, minibuffer reading functions don't add new elements to the
2832 history list, so it is possible to do this afterwards by calling
2833 `add-to-history' explicitly. */);
2834 Vhistory_add_new_input = Qt;
2836 DEFVAR_LISP ("completion-auto-help", &Vcompletion_auto_help,
2837 doc: /* *Non-nil means automatically provide help for invalid completion input.
2838 Under Partial Completion mode, a non-nil, non-t value has a special meaning;
2839 see the doc string of `partial-completion-mode' for more details. */);
2840 Vcompletion_auto_help = Qt;
2842 DEFVAR_BOOL ("completion-ignore-case", &completion_ignore_case,
2843 doc: /* Non-nil means don't consider case significant in completion.
2845 For file-name completion, the variable `read-file-name-completion-ignore-case'
2846 controls the behavior, rather than this variable. */);
2847 completion_ignore_case = 0;
2849 DEFVAR_BOOL ("enable-recursive-minibuffers", &enable_recursive_minibuffers,
2850 doc: /* *Non-nil means to allow minibuffer commands while in the minibuffer.
2851 This variable makes a difference whenever the minibuffer window is active. */);
2852 enable_recursive_minibuffers = 0;
2854 DEFVAR_LISP ("minibuffer-completion-table", &Vminibuffer_completion_table,
2855 doc: /* Alist or obarray used for completion in the minibuffer.
2856 This becomes the ALIST argument to `try-completion' and `all-completions'.
2857 The value can also be a list of strings or a hash table.
2859 The value may alternatively be a function, which is given three arguments:
2860 STRING, the current buffer contents;
2861 PREDICATE, the predicate for filtering possible matches;
2862 CODE, which says what kind of things to do.
2863 CODE can be nil, t or `lambda'.
2864 nil means to return the best completion of STRING, or nil if there is none.
2865 t means to return a list of all possible completions of STRING.
2866 `lambda' means to return t if STRING is a valid completion as it stands. */);
2867 Vminibuffer_completion_table = Qnil;
2869 DEFVAR_LISP ("minibuffer-completion-predicate", &Vminibuffer_completion_predicate,
2870 doc: /* Within call to `completing-read', this holds the PREDICATE argument. */);
2871 Vminibuffer_completion_predicate = Qnil;
2873 DEFVAR_LISP ("minibuffer-completion-confirm", &Vminibuffer_completion_confirm,
2874 doc: /* Non-nil means to demand confirmation of completion before exiting minibuffer. */);
2875 Vminibuffer_completion_confirm = Qnil;
2877 DEFVAR_LISP ("minibuffer-completing-file-name",
2878 &Vminibuffer_completing_file_name,
2879 doc: /* Non-nil means completing file names. */);
2880 Vminibuffer_completing_file_name = Qnil;
2882 DEFVAR_LISP ("minibuffer-help-form", &Vminibuffer_help_form,
2883 doc: /* Value that `help-form' takes on inside the minibuffer. */);
2884 Vminibuffer_help_form = Qnil;
2886 DEFVAR_LISP ("minibuffer-history-variable", &Vminibuffer_history_variable,
2887 doc: /* History list symbol to add minibuffer values to.
2888 Each string of minibuffer input, as it appears on exit from the minibuffer,
2889 is added with
2890 (set minibuffer-history-variable
2891 (cons STRING (symbol-value minibuffer-history-variable))) */);
2892 XSETFASTINT (Vminibuffer_history_variable, 0);
2894 DEFVAR_LISP ("minibuffer-history-position", &Vminibuffer_history_position,
2895 doc: /* Current position of redoing in the history list. */);
2896 Vminibuffer_history_position = Qnil;
2898 DEFVAR_BOOL ("minibuffer-auto-raise", &minibuffer_auto_raise,
2899 doc: /* *Non-nil means entering the minibuffer raises the minibuffer's frame.
2900 Some uses of the echo area also raise that frame (since they use it too). */);
2901 minibuffer_auto_raise = 0;
2903 DEFVAR_LISP ("completion-regexp-list", &Vcompletion_regexp_list,
2904 doc: /* List of regexps that should restrict possible completions.
2905 The basic completion functions only consider a completion acceptable
2906 if it matches all regular expressions in this list, with
2907 `case-fold-search' bound to the value of `completion-ignore-case'.
2908 See Info node `(elisp)Basic Completion', for a description of these
2909 functions. */);
2910 Vcompletion_regexp_list = Qnil;
2912 DEFVAR_BOOL ("minibuffer-allow-text-properties",
2913 &minibuffer_allow_text_properties,
2914 doc: /* Non-nil means `read-from-minibuffer' should not discard text properties.
2915 This also affects `read-string', but it does not affect `read-minibuffer',
2916 `read-no-blanks-input', or any of the functions that do minibuffer input
2917 with completion; they always discard text properties. */);
2918 minibuffer_allow_text_properties = 0;
2920 DEFVAR_LISP ("minibuffer-prompt-properties", &Vminibuffer_prompt_properties,
2921 doc: /* Text properties that are added to minibuffer prompts.
2922 These are in addition to the basic `field' property, and stickiness
2923 properties. */);
2924 /* We use `intern' here instead of Qread_only to avoid
2925 initialization-order problems. */
2926 Vminibuffer_prompt_properties
2927 = Fcons (intern ("read-only"), Fcons (Qt, Qnil));
2929 defsubr (&Sset_minibuffer_window);
2930 defsubr (&Sread_from_minibuffer);
2931 defsubr (&Seval_minibuffer);
2932 defsubr (&Sread_minibuffer);
2933 defsubr (&Sread_string);
2934 defsubr (&Sread_command);
2935 defsubr (&Sread_variable);
2936 defsubr (&Sinternal_complete_buffer);
2937 defsubr (&Sread_buffer);
2938 defsubr (&Sread_no_blanks_input);
2939 defsubr (&Sminibuffer_depth);
2940 defsubr (&Sminibuffer_prompt);
2942 defsubr (&Sminibufferp);
2943 defsubr (&Sminibuffer_prompt_end);
2944 defsubr (&Sminibuffer_contents);
2945 defsubr (&Sminibuffer_contents_no_properties);
2946 defsubr (&Sminibuffer_completion_contents);
2947 defsubr (&Sdelete_minibuffer_contents);
2949 defsubr (&Stry_completion);
2950 defsubr (&Sall_completions);
2951 defsubr (&Stest_completion);
2952 defsubr (&Sassoc_string);
2953 defsubr (&Scompleting_read);
2954 defsubr (&Sminibuffer_complete);
2955 defsubr (&Sminibuffer_complete_word);
2956 defsubr (&Sminibuffer_complete_and_exit);
2957 defsubr (&Sdisplay_completion_list);
2958 defsubr (&Sminibuffer_completion_help);
2960 defsubr (&Sself_insert_and_exit);
2961 defsubr (&Sexit_minibuffer);
2963 defsubr (&Sminibuffer_message);
2966 void
2967 keys_of_minibuf ()
2969 initial_define_key (Vminibuffer_local_map, Ctl ('g'),
2970 "abort-recursive-edit");
2971 initial_define_key (Vminibuffer_local_map, Ctl ('m'),
2972 "exit-minibuffer");
2973 initial_define_key (Vminibuffer_local_map, Ctl ('j'),
2974 "exit-minibuffer");
2976 initial_define_key (Vminibuffer_local_ns_map, ' ',
2977 "exit-minibuffer");
2978 initial_define_key (Vminibuffer_local_ns_map, '\t',
2979 "exit-minibuffer");
2980 initial_define_key (Vminibuffer_local_ns_map, '?',
2981 "self-insert-and-exit");
2983 initial_define_key (Vminibuffer_local_completion_map, '\t',
2984 "minibuffer-complete");
2985 initial_define_key (Vminibuffer_local_completion_map, ' ',
2986 "minibuffer-complete-word");
2987 initial_define_key (Vminibuffer_local_completion_map, '?',
2988 "minibuffer-completion-help");
2990 Fdefine_key (Vminibuffer_local_filename_completion_map,
2991 build_string (" "), Qnil);
2993 initial_define_key (Vminibuffer_local_must_match_map, Ctl ('m'),
2994 "minibuffer-complete-and-exit");
2995 initial_define_key (Vminibuffer_local_must_match_map, Ctl ('j'),
2996 "minibuffer-complete-and-exit");
2998 Fdefine_key (Vminibuffer_local_must_match_filename_map,
2999 build_string (" "), Qnil);
3002 /* arch-tag: 8f69b601-fba3-484c-a6dd-ceaee54a7a73
3003 (do not change this comment) */