(nl): Rename to name_list to avoid ncurses.h clash (bug#86).
[emacs.git] / src / minibuf.c
blob723735e52d6b6c53de325c1e6eb1e40412702387
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, 2007, 2008 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 3, 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;
120 Lisp_Object Qcompletion_ignore_case;
122 /* List of regexps that should restrict possible completions. */
124 Lisp_Object Vcompletion_regexp_list;
126 /* Nonzero means raise the minibuffer frame when the minibuffer
127 is entered. */
129 int minibuffer_auto_raise;
131 /* If last completion attempt reported "Complete but not unique"
132 then this is the string completed then; otherwise this is nil. */
134 static Lisp_Object last_exact_completion;
136 /* Keymap for reading expressions. */
137 Lisp_Object Vread_expression_map;
139 Lisp_Object Vminibuffer_completion_table, Qminibuffer_completion_table;
140 Lisp_Object Vminibuffer_completion_predicate, Qminibuffer_completion_predicate;
141 Lisp_Object Vminibuffer_completion_confirm, Qminibuffer_completion_confirm;
142 Lisp_Object Vminibuffer_completing_file_name;
144 Lisp_Object Quser_variable_p;
146 Lisp_Object Qminibuffer_default;
148 Lisp_Object Qcurrent_input_method, Qactivate_input_method;
150 Lisp_Object Qcase_fold_search;
152 Lisp_Object Qread_expression_history;
154 extern Lisp_Object Voverriding_local_map;
156 extern Lisp_Object Qmouse_face;
158 extern Lisp_Object Qfield;
160 /* Put minibuf on currently selected frame's minibuffer.
161 We do this whenever the user starts a new minibuffer
162 or when a minibuffer exits. */
164 void
165 choose_minibuf_frame ()
167 if (FRAMEP (selected_frame)
168 && FRAME_LIVE_P (XFRAME (selected_frame))
169 && !EQ (minibuf_window, XFRAME (selected_frame)->minibuffer_window))
171 struct frame *sf = XFRAME (selected_frame);
172 Lisp_Object buffer;
174 /* I don't think that any frames may validly have a null minibuffer
175 window anymore. */
176 if (NILP (sf->minibuffer_window))
177 abort ();
179 /* Under X, we come here with minibuf_window being the
180 minibuffer window of the unused termcap window created in
181 init_window_once. That window doesn't have a buffer. */
182 buffer = XWINDOW (minibuf_window)->buffer;
183 if (BUFFERP (buffer))
184 Fset_window_buffer (sf->minibuffer_window, buffer, Qnil);
185 minibuf_window = sf->minibuffer_window;
188 /* Make sure no other frame has a minibuffer as its selected window,
189 because the text would not be displayed in it, and that would be
190 confusing. Only allow the selected frame to do this,
191 and that only if the minibuffer is active. */
193 Lisp_Object tail, frame;
195 FOR_EACH_FRAME (tail, frame)
196 if (MINI_WINDOW_P (XWINDOW (FRAME_SELECTED_WINDOW (XFRAME (frame))))
197 && !(EQ (frame, selected_frame)
198 && minibuf_level > 0))
199 Fset_frame_selected_window (frame, Fframe_first_window (frame));
203 Lisp_Object
204 choose_minibuf_frame_1 (ignore)
205 Lisp_Object ignore;
207 choose_minibuf_frame ();
208 return Qnil;
211 DEFUN ("set-minibuffer-window", Fset_minibuffer_window,
212 Sset_minibuffer_window, 1, 1, 0,
213 doc: /* Specify which minibuffer window to use for the minibuffer.
214 This affects where the minibuffer is displayed if you put text in it
215 without invoking the usual minibuffer commands. */)
216 (window)
217 Lisp_Object window;
219 CHECK_WINDOW (window);
220 if (! MINI_WINDOW_P (XWINDOW (window)))
221 error ("Window is not a minibuffer window");
223 minibuf_window = window;
225 return window;
229 /* Actual minibuffer invocation. */
231 static Lisp_Object read_minibuf_unwind P_ ((Lisp_Object));
232 static Lisp_Object run_exit_minibuf_hook P_ ((Lisp_Object));
233 static Lisp_Object read_minibuf P_ ((Lisp_Object, Lisp_Object,
234 Lisp_Object, Lisp_Object,
235 int, Lisp_Object,
236 Lisp_Object, Lisp_Object,
237 int, int));
238 static Lisp_Object read_minibuf_noninteractive P_ ((Lisp_Object, Lisp_Object,
239 Lisp_Object, Lisp_Object,
240 int, Lisp_Object,
241 Lisp_Object, Lisp_Object,
242 int, int));
243 static Lisp_Object string_to_object P_ ((Lisp_Object, Lisp_Object));
246 /* Read a Lisp object from VAL and return it. If VAL is an empty
247 string, and DEFALT is a string, read from DEFALT instead of VAL. */
249 static Lisp_Object
250 string_to_object (val, defalt)
251 Lisp_Object val, defalt;
253 struct gcpro gcpro1, gcpro2;
254 Lisp_Object expr_and_pos;
255 int pos;
257 GCPRO2 (val, defalt);
259 if (STRINGP (val) && SCHARS (val) == 0
260 && STRINGP (defalt))
261 val = defalt;
263 expr_and_pos = Fread_from_string (val, Qnil, Qnil);
264 pos = XINT (Fcdr (expr_and_pos));
265 if (pos != SCHARS (val))
267 /* Ignore trailing whitespace; any other trailing junk
268 is an error. */
269 int i;
270 pos = string_char_to_byte (val, pos);
271 for (i = pos; i < SBYTES (val); i++)
273 int c = SREF (val, i);
274 if (c != ' ' && c != '\t' && c != '\n')
275 error ("Trailing garbage following expression");
279 val = Fcar (expr_and_pos);
280 RETURN_UNGCPRO (val);
284 /* Like read_minibuf but reading from stdin. This function is called
285 from read_minibuf to do the job if noninteractive. */
287 static Lisp_Object
288 read_minibuf_noninteractive (map, initial, prompt, backup_n, expflag,
289 histvar, histpos, defalt, allow_props,
290 inherit_input_method)
291 Lisp_Object map;
292 Lisp_Object initial;
293 Lisp_Object prompt;
294 Lisp_Object backup_n;
295 int expflag;
296 Lisp_Object histvar;
297 Lisp_Object histpos;
298 Lisp_Object defalt;
299 int allow_props;
300 int inherit_input_method;
302 int size, len;
303 char *line, *s;
304 Lisp_Object val;
306 fprintf (stdout, "%s", SDATA (prompt));
307 fflush (stdout);
309 val = Qnil;
310 size = 100;
311 len = 0;
312 line = (char *) xmalloc (size * sizeof *line);
313 while ((s = fgets (line + len, size - len, stdin)) != NULL
314 && (len = strlen (line),
315 len == size - 1 && line[len - 1] != '\n'))
317 size *= 2;
318 line = (char *) xrealloc (line, size);
321 if (s)
323 len = strlen (line);
325 if (len > 0 && line[len - 1] == '\n')
326 line[--len] = '\0';
328 val = build_string (line);
329 xfree (line);
331 else
333 xfree (line);
334 error ("Error reading from stdin");
337 /* If Lisp form desired instead of string, parse it. */
338 if (expflag)
339 val = string_to_object (val, defalt);
341 return val;
344 DEFUN ("minibufferp", Fminibufferp,
345 Sminibufferp, 0, 1, 0,
346 doc: /* Return t if BUFFER is a minibuffer.
347 No argument or nil as argument means use current buffer as BUFFER.
348 BUFFER can be a buffer or a buffer name. */)
349 (buffer)
350 Lisp_Object buffer;
352 Lisp_Object tem;
354 if (NILP (buffer))
355 buffer = Fcurrent_buffer ();
356 else if (STRINGP (buffer))
357 buffer = Fget_buffer (buffer);
358 else
359 CHECK_BUFFER (buffer);
361 tem = Fmemq (buffer, Vminibuffer_list);
362 return ! NILP (tem) ? Qt : Qnil;
365 DEFUN ("minibuffer-prompt-end", Fminibuffer_prompt_end,
366 Sminibuffer_prompt_end, 0, 0, 0,
367 doc: /* Return the buffer position of the end of the minibuffer prompt.
368 Return (point-min) if current buffer is not a minibuffer. */)
371 /* This function is written to be most efficient when there's a prompt. */
372 Lisp_Object beg, end, tem;
373 beg = make_number (BEGV);
375 tem = Fmemq (Fcurrent_buffer (), Vminibuffer_list);
376 if (NILP (tem))
377 return beg;
379 end = Ffield_end (beg, Qnil, Qnil);
381 if (XINT (end) == ZV && NILP (Fget_char_property (beg, Qfield, Qnil)))
382 return beg;
383 else
384 return end;
387 DEFUN ("minibuffer-contents", Fminibuffer_contents,
388 Sminibuffer_contents, 0, 0, 0,
389 doc: /* Return the user input in a minibuffer as a string.
390 If the current buffer is not a minibuffer, return its entire contents. */)
393 int prompt_end = XINT (Fminibuffer_prompt_end ());
394 return make_buffer_string (prompt_end, ZV, 1);
397 DEFUN ("minibuffer-contents-no-properties", Fminibuffer_contents_no_properties,
398 Sminibuffer_contents_no_properties, 0, 0, 0,
399 doc: /* Return the user input in a minibuffer as a string, without text-properties.
400 If the current buffer is not a minibuffer, return its entire contents. */)
403 int prompt_end = XINT (Fminibuffer_prompt_end ());
404 return make_buffer_string (prompt_end, ZV, 0);
407 DEFUN ("minibuffer-completion-contents", Fminibuffer_completion_contents,
408 Sminibuffer_completion_contents, 0, 0, 0,
409 doc: /* Return the user input in a minibuffer before point as a string.
410 That is what completion commands operate on.
411 If the current buffer is not a minibuffer, return its entire contents. */)
414 int prompt_end = XINT (Fminibuffer_prompt_end ());
415 if (PT < prompt_end)
416 error ("Cannot do completion in the prompt");
417 return make_buffer_string (prompt_end, PT, 1);
420 DEFUN ("delete-minibuffer-contents", Fdelete_minibuffer_contents,
421 Sdelete_minibuffer_contents, 0, 0, 0,
422 doc: /* Delete all user input in a minibuffer.
423 If the current buffer is not a minibuffer, erase its entire contents. */)
426 int prompt_end = XINT (Fminibuffer_prompt_end ());
427 if (prompt_end < ZV)
428 del_range (prompt_end, ZV);
429 return Qnil;
433 /* Read from the minibuffer using keymap MAP and initial contents INITIAL,
434 putting point minus BACKUP_N bytes from the end of INITIAL,
435 prompting with PROMPT (a string), using history list HISTVAR
436 with initial position HISTPOS. INITIAL should be a string or a
437 cons of a string and an integer. BACKUP_N should be <= 0, or
438 Qnil, which is equivalent to 0. If INITIAL is a cons, BACKUP_N is
439 ignored and replaced with an integer that puts point at one-indexed
440 position N in INITIAL, where N is the CDR of INITIAL, or at the
441 beginning of INITIAL if N <= 0.
443 Normally return the result as a string (the text that was read),
444 but if EXPFLAG is nonzero, read it and return the object read.
445 If HISTVAR is given, save the value read on that history only if it doesn't
446 match the front of that history list exactly. The value is pushed onto
447 the list as the string that was read.
449 DEFALT specifies the default value for the sake of history commands.
451 If ALLOW_PROPS is nonzero, we do not throw away text properties.
453 if INHERIT_INPUT_METHOD is nonzero, the minibuffer inherits the
454 current input method. */
456 static Lisp_Object
457 read_minibuf (map, initial, prompt, backup_n, expflag,
458 histvar, histpos, defalt, allow_props, inherit_input_method)
459 Lisp_Object map;
460 Lisp_Object initial;
461 Lisp_Object prompt;
462 Lisp_Object backup_n;
463 int expflag;
464 Lisp_Object histvar;
465 Lisp_Object histpos;
466 Lisp_Object defalt;
467 int allow_props;
468 int inherit_input_method;
470 Lisp_Object val;
471 int count = SPECPDL_INDEX ();
472 Lisp_Object mini_frame, ambient_dir, minibuffer, input_method;
473 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5;
474 Lisp_Object enable_multibyte;
475 int pos = INTEGERP (backup_n) ? XINT (backup_n) : 0;
476 /* String to add to the history. */
477 Lisp_Object histstring;
479 Lisp_Object empty_minibuf;
480 Lisp_Object dummy, frame;
482 extern Lisp_Object Qfront_sticky;
483 extern Lisp_Object Qrear_nonsticky;
485 specbind (Qminibuffer_default, defalt);
487 /* If Vminibuffer_completing_file_name is `lambda' on entry, it was t
488 in previous recursive minibuffer, but was not set explicitly
489 to t for this invocation, so set it to nil in this minibuffer.
490 Save the old value now, before we change it. */
491 specbind (intern ("minibuffer-completing-file-name"), Vminibuffer_completing_file_name);
492 if (EQ (Vminibuffer_completing_file_name, Qlambda))
493 Vminibuffer_completing_file_name = Qnil;
495 single_kboard_state ();
496 #ifdef HAVE_X_WINDOWS
497 if (display_hourglass_p)
498 cancel_hourglass ();
499 #endif
501 if (!NILP (initial))
503 if (CONSP (initial))
505 backup_n = Fcdr (initial);
506 initial = Fcar (initial);
507 CHECK_STRING (initial);
508 if (!NILP (backup_n))
510 CHECK_NUMBER (backup_n);
511 /* Convert to distance from end of input. */
512 if (XINT (backup_n) < 1)
513 /* A number too small means the beginning of the string. */
514 pos = - SCHARS (initial);
515 else
516 pos = XINT (backup_n) - 1 - SCHARS (initial);
519 else
520 CHECK_STRING (initial);
522 val = Qnil;
523 ambient_dir = current_buffer->directory;
524 input_method = Qnil;
525 enable_multibyte = Qnil;
527 /* Don't need to protect PROMPT, HISTVAR, and HISTPOS because we
528 store them away before we can GC. Don't need to protect
529 BACKUP_N because we use the value only if it is an integer. */
530 GCPRO5 (map, initial, val, ambient_dir, input_method);
532 if (!STRINGP (prompt))
533 prompt = empty_string;
535 if (!enable_recursive_minibuffers
536 && minibuf_level > 0)
538 if (EQ (selected_window, minibuf_window))
539 error ("Command attempted to use minibuffer while in minibuffer");
540 else
541 /* If we're in another window, cancel the minibuffer that's active. */
542 Fthrow (Qexit,
543 build_string ("Command attempted to use minibuffer while in minibuffer"));
546 if (noninteractive && NILP (Vexecuting_kbd_macro))
548 val = read_minibuf_noninteractive (map, initial, prompt,
549 make_number (pos),
550 expflag, histvar, histpos, defalt,
551 allow_props, inherit_input_method);
552 UNGCPRO;
553 return unbind_to (count, val);
556 /* Choose the minibuffer window and frame, and take action on them. */
558 choose_minibuf_frame ();
560 record_unwind_protect (choose_minibuf_frame_1, Qnil);
562 record_unwind_protect (Fset_window_configuration,
563 Fcurrent_window_configuration (Qnil));
565 /* If the minibuffer window is on a different frame, save that
566 frame's configuration too. */
567 mini_frame = WINDOW_FRAME (XWINDOW (minibuf_window));
568 if (!EQ (mini_frame, selected_frame))
569 record_unwind_protect (Fset_window_configuration,
570 Fcurrent_window_configuration (mini_frame));
572 /* If the minibuffer is on an iconified or invisible frame,
573 make it visible now. */
574 Fmake_frame_visible (mini_frame);
576 if (minibuffer_auto_raise)
577 Fraise_frame (mini_frame);
579 /* We have to do this after saving the window configuration
580 since that is what restores the current buffer. */
582 /* Arrange to restore a number of minibuffer-related variables.
583 We could bind each variable separately, but that would use lots of
584 specpdl slots. */
585 minibuf_save_list
586 = Fcons (Voverriding_local_map,
587 Fcons (minibuf_window,
588 minibuf_save_list));
589 minibuf_save_list
590 = Fcons (minibuf_prompt,
591 Fcons (make_number (minibuf_prompt_width),
592 Fcons (Vhelp_form,
593 Fcons (Vcurrent_prefix_arg,
594 Fcons (Vminibuffer_history_position,
595 Fcons (Vminibuffer_history_variable,
596 minibuf_save_list))))));
598 record_unwind_protect (read_minibuf_unwind, Qnil);
599 minibuf_level++;
600 /* We are exiting the minibuffer one way or the other, so run the hook.
601 It should be run before unwinding the minibuf settings. Do it
602 separately from read_minibuf_unwind because we need to make sure that
603 read_minibuf_unwind is fully executed even if exit-minibuffer-hook
604 signals an error. --Stef */
605 record_unwind_protect (run_exit_minibuf_hook, Qnil);
607 /* Now that we can restore all those variables, start changing them. */
609 minibuf_prompt_width = 0;
610 minibuf_prompt = Fcopy_sequence (prompt);
611 Vminibuffer_history_position = histpos;
612 Vminibuffer_history_variable = histvar;
613 Vhelp_form = Vminibuffer_help_form;
614 /* If this minibuffer is reading a file name, that doesn't mean
615 recursive ones are. But we cannot set it to nil, because
616 completion code still need to know the minibuffer is completing a
617 file name. So use `lambda' as intermediate value meaning
618 "t" in this minibuffer, but "nil" in next minibuffer. */
619 if (!NILP (Vminibuffer_completing_file_name))
620 Vminibuffer_completing_file_name = Qlambda;
622 if (inherit_input_method)
624 /* `current-input-method' is buffer local. So, remember it in
625 INPUT_METHOD before changing the current buffer. */
626 input_method = Fsymbol_value (Qcurrent_input_method);
627 enable_multibyte = current_buffer->enable_multibyte_characters;
630 /* Switch to the minibuffer. */
632 minibuffer = get_minibuffer (minibuf_level);
633 Fset_buffer (minibuffer);
635 /* If appropriate, copy enable-multibyte-characters into the minibuffer. */
636 if (inherit_input_method)
637 current_buffer->enable_multibyte_characters = enable_multibyte;
639 /* The current buffer's default directory is usually the right thing
640 for our minibuffer here. However, if you're typing a command at
641 a minibuffer-only frame when minibuf_level is zero, then buf IS
642 the current_buffer, so reset_buffer leaves buf's default
643 directory unchanged. This is a bummer when you've just started
644 up Emacs and buf's default directory is Qnil. Here's a hack; can
645 you think of something better to do? Find another buffer with a
646 better directory, and use that one instead. */
647 if (STRINGP (ambient_dir))
648 current_buffer->directory = ambient_dir;
649 else
651 Lisp_Object buf_list;
653 for (buf_list = Vbuffer_alist;
654 CONSP (buf_list);
655 buf_list = XCDR (buf_list))
657 Lisp_Object other_buf;
659 other_buf = XCDR (XCAR (buf_list));
660 if (STRINGP (XBUFFER (other_buf)->directory))
662 current_buffer->directory = XBUFFER (other_buf)->directory;
663 break;
668 if (!EQ (mini_frame, selected_frame))
669 Fredirect_frame_focus (selected_frame, mini_frame);
671 Vminibuf_scroll_window = selected_window;
672 if (minibuf_level == 1 || !EQ (minibuf_window, selected_window))
673 minibuf_selected_window = selected_window;
675 /* Empty out the minibuffers of all frames other than the one
676 where we are going to display one now.
677 Set them to point to ` *Minibuf-0*', which is always empty. */
678 empty_minibuf = Fget_buffer (build_string (" *Minibuf-0*"));
680 FOR_EACH_FRAME (dummy, frame)
682 Lisp_Object root_window = Fframe_root_window (frame);
683 Lisp_Object mini_window = XWINDOW (root_window)->next;
685 if (! NILP (mini_window) && ! EQ (mini_window, minibuf_window)
686 && !NILP (Fwindow_minibuffer_p (mini_window)))
687 Fset_window_buffer (mini_window, empty_minibuf, Qnil);
690 /* Display this minibuffer in the proper window. */
691 Fset_window_buffer (minibuf_window, Fcurrent_buffer (), Qnil);
692 Fselect_window (minibuf_window, Qnil);
693 XSETFASTINT (XWINDOW (minibuf_window)->hscroll, 0);
695 Fmake_local_variable (Qprint_escape_newlines);
696 print_escape_newlines = 1;
698 /* Erase the buffer. */
700 int count1 = SPECPDL_INDEX ();
701 specbind (Qinhibit_read_only, Qt);
702 specbind (Qinhibit_modification_hooks, Qt);
703 Ferase_buffer ();
705 if (!NILP (current_buffer->enable_multibyte_characters)
706 && ! STRING_MULTIBYTE (minibuf_prompt))
707 minibuf_prompt = Fstring_make_multibyte (minibuf_prompt);
709 /* Insert the prompt, record where it ends. */
710 Finsert (1, &minibuf_prompt);
711 if (PT > BEG)
713 Fput_text_property (make_number (BEG), make_number (PT),
714 Qfront_sticky, Qt, Qnil);
715 Fput_text_property (make_number (BEG), make_number (PT),
716 Qrear_nonsticky, Qt, Qnil);
717 Fput_text_property (make_number (BEG), make_number (PT),
718 Qfield, Qt, Qnil);
719 Fadd_text_properties (make_number (BEG), make_number (PT),
720 Vminibuffer_prompt_properties, Qnil);
722 unbind_to (count1, Qnil);
725 minibuf_prompt_width = (int) current_column (); /* iftc */
727 /* Put in the initial input. */
728 if (!NILP (initial))
730 Finsert (1, &initial);
731 Fforward_char (make_number (pos));
734 clear_message (1, 1);
735 current_buffer->keymap = map;
737 /* Turn on an input method stored in INPUT_METHOD if any. */
738 if (STRINGP (input_method) && !NILP (Ffboundp (Qactivate_input_method)))
739 call1 (Qactivate_input_method, input_method);
741 /* Run our hook, but not if it is empty.
742 (run-hooks would do nothing if it is empty,
743 but it's important to save time here in the usual case.) */
744 if (!NILP (Vminibuffer_setup_hook) && !EQ (Vminibuffer_setup_hook, Qunbound)
745 && !NILP (Vrun_hooks))
746 call1 (Vrun_hooks, Qminibuffer_setup_hook);
748 /* Don't allow the user to undo past this point. */
749 current_buffer->undo_list = Qnil;
751 recursive_edit_1 ();
753 /* If cursor is on the minibuffer line,
754 show the user we have exited by putting it in column 0. */
755 if (XWINDOW (minibuf_window)->cursor.vpos >= 0
756 && !noninteractive)
758 XWINDOW (minibuf_window)->cursor.hpos = 0;
759 XWINDOW (minibuf_window)->cursor.x = 0;
760 XWINDOW (minibuf_window)->must_be_updated_p = 1;
761 update_frame (XFRAME (selected_frame), 1, 1);
762 if (rif && rif->flush_display)
763 rif->flush_display (XFRAME (XWINDOW (minibuf_window)->frame));
766 /* Make minibuffer contents into a string. */
767 Fset_buffer (minibuffer);
768 if (allow_props)
769 val = Fminibuffer_contents ();
770 else
771 val = Fminibuffer_contents_no_properties ();
773 /* VAL is the string of minibuffer text. */
775 last_minibuf_string = val;
777 /* Choose the string to add to the history. */
778 if (SCHARS (val) != 0)
779 histstring = val;
780 else if (STRINGP (defalt))
781 histstring = defalt;
782 else
783 histstring = Qnil;
785 /* Add the value to the appropriate history list, if any. */
786 if (!NILP (Vhistory_add_new_input)
787 && SYMBOLP (Vminibuffer_history_variable)
788 && !NILP (histstring))
790 /* If the caller wanted to save the value read on a history list,
791 then do so if the value is not already the front of the list. */
792 Lisp_Object histval;
794 /* If variable is unbound, make it nil. */
795 if (EQ (SYMBOL_VALUE (Vminibuffer_history_variable), Qunbound))
796 Fset (Vminibuffer_history_variable, Qnil);
798 histval = Fsymbol_value (Vminibuffer_history_variable);
800 /* The value of the history variable must be a cons or nil. Other
801 values are unacceptable. We silently ignore these values. */
803 if (NILP (histval)
804 || (CONSP (histval)
805 /* Don't duplicate the most recent entry in the history. */
806 && (NILP (Fequal (histstring, Fcar (histval))))))
808 Lisp_Object length;
810 if (history_delete_duplicates) Fdelete (histstring, histval);
811 histval = Fcons (histstring, histval);
812 Fset (Vminibuffer_history_variable, histval);
814 /* Truncate if requested. */
815 length = Fget (Vminibuffer_history_variable, Qhistory_length);
816 if (NILP (length)) length = Vhistory_length;
817 if (INTEGERP (length))
819 if (XINT (length) <= 0)
820 Fset (Vminibuffer_history_variable, Qnil);
821 else
823 Lisp_Object temp;
825 temp = Fnthcdr (Fsub1 (length), histval);
826 if (CONSP (temp)) Fsetcdr (temp, Qnil);
832 /* If Lisp form desired instead of string, parse it. */
833 if (expflag)
834 val = string_to_object (val, defalt);
836 /* The appropriate frame will get selected
837 in set-window-configuration. */
838 UNGCPRO;
839 return unbind_to (count, val);
842 /* Return a buffer to be used as the minibuffer at depth `depth'.
843 depth = 0 is the lowest allowed argument, and that is the value
844 used for nonrecursive minibuffer invocations */
846 Lisp_Object
847 get_minibuffer (depth)
848 int depth;
850 Lisp_Object tail, num, buf;
851 char name[24];
852 extern Lisp_Object nconc2 ();
854 XSETFASTINT (num, depth);
855 tail = Fnthcdr (num, Vminibuffer_list);
856 if (NILP (tail))
858 tail = Fcons (Qnil, Qnil);
859 Vminibuffer_list = nconc2 (Vminibuffer_list, tail);
861 buf = Fcar (tail);
862 if (NILP (buf) || NILP (XBUFFER (buf)->name))
864 sprintf (name, " *Minibuf-%d*", depth);
865 buf = Fget_buffer_create (build_string (name));
867 /* Although the buffer's name starts with a space, undo should be
868 enabled in it. */
869 Fbuffer_enable_undo (buf);
871 XSETCAR (tail, buf);
873 else
875 int count = SPECPDL_INDEX ();
876 /* `reset_buffer' blindly sets the list of overlays to NULL, so we
877 have to empty the list, otherwise we end up with overlays that
878 think they belong to this buffer while the buffer doesn't know about
879 them any more. */
880 delete_all_overlays (XBUFFER (buf));
881 reset_buffer (XBUFFER (buf));
882 record_unwind_protect (Fset_buffer, Fcurrent_buffer ());
883 Fset_buffer (buf);
884 Fkill_all_local_variables ();
885 unbind_to (count, Qnil);
888 return buf;
891 static Lisp_Object
892 run_exit_minibuf_hook (data)
893 Lisp_Object data;
895 if (!NILP (Vminibuffer_exit_hook) && !EQ (Vminibuffer_exit_hook, Qunbound)
896 && !NILP (Vrun_hooks))
897 safe_run_hooks (Qminibuffer_exit_hook);
899 return Qnil;
902 /* This function is called on exiting minibuffer, whether normally or
903 not, and it restores the current window, buffer, etc. */
905 static Lisp_Object
906 read_minibuf_unwind (data)
907 Lisp_Object data;
909 Lisp_Object old_deactivate_mark;
910 Lisp_Object window;
912 /* If this was a recursive minibuffer,
913 tie the minibuffer window back to the outer level minibuffer buffer. */
914 minibuf_level--;
916 window = minibuf_window;
917 /* To keep things predictable, in case it matters, let's be in the
918 minibuffer when we reset the relevant variables. */
919 Fset_buffer (XWINDOW (window)->buffer);
921 /* Restore prompt, etc, from outer minibuffer level. */
922 minibuf_prompt = Fcar (minibuf_save_list);
923 minibuf_save_list = Fcdr (minibuf_save_list);
924 minibuf_prompt_width = XFASTINT (Fcar (minibuf_save_list));
925 minibuf_save_list = Fcdr (minibuf_save_list);
926 Vhelp_form = Fcar (minibuf_save_list);
927 minibuf_save_list = Fcdr (minibuf_save_list);
928 Vcurrent_prefix_arg = Fcar (minibuf_save_list);
929 minibuf_save_list = Fcdr (minibuf_save_list);
930 Vminibuffer_history_position = Fcar (minibuf_save_list);
931 minibuf_save_list = Fcdr (minibuf_save_list);
932 Vminibuffer_history_variable = Fcar (minibuf_save_list);
933 minibuf_save_list = Fcdr (minibuf_save_list);
934 Voverriding_local_map = Fcar (minibuf_save_list);
935 minibuf_save_list = Fcdr (minibuf_save_list);
936 #if 0
937 temp = Fcar (minibuf_save_list);
938 if (FRAME_LIVE_P (XFRAME (WINDOW_FRAME (XWINDOW (temp)))))
939 minibuf_window = temp;
940 #endif
941 minibuf_save_list = Fcdr (minibuf_save_list);
943 /* Erase the minibuffer we were using at this level. */
945 int count = SPECPDL_INDEX ();
946 /* Prevent error in erase-buffer. */
947 specbind (Qinhibit_read_only, Qt);
948 specbind (Qinhibit_modification_hooks, Qt);
949 old_deactivate_mark = Vdeactivate_mark;
950 Ferase_buffer ();
951 Vdeactivate_mark = old_deactivate_mark;
952 unbind_to (count, Qnil);
955 /* When we get to the outmost level, make sure we resize the
956 mini-window back to its normal size. */
957 if (minibuf_level == 0)
958 resize_mini_window (XWINDOW (window), 0);
960 /* Make sure minibuffer window is erased, not ignored. */
961 windows_or_buffers_changed++;
962 XSETFASTINT (XWINDOW (window)->last_modified, 0);
963 XSETFASTINT (XWINDOW (window)->last_overlay_modified, 0);
964 return Qnil;
968 DEFUN ("read-from-minibuffer", Fread_from_minibuffer, Sread_from_minibuffer, 1, 7, 0,
969 doc: /* Read a string from the minibuffer, prompting with string PROMPT.
970 The optional second arg INITIAL-CONTENTS is an obsolete alternative to
971 DEFAULT-VALUE. It normally should be nil in new code, except when
972 HIST is a cons. It is discussed in more detail below.
973 Third arg KEYMAP is a keymap to use whilst reading;
974 if omitted or nil, the default is `minibuffer-local-map'.
975 If fourth arg READ is non-nil, then interpret the result as a Lisp object
976 and return that object:
977 in other words, do `(car (read-from-string INPUT-STRING))'
978 Fifth arg HIST, if non-nil, specifies a history list and optionally
979 the initial position in the list. It can be a symbol, which is the
980 history list variable to use, or it can be a cons cell
981 (HISTVAR . HISTPOS). In that case, HISTVAR is the history list variable
982 to use, and HISTPOS is the initial position for use by the minibuffer
983 history commands. For consistency, you should also specify that
984 element of the history as the value of INITIAL-CONTENTS. Positions
985 are counted starting from 1 at the beginning of the list.
986 Sixth arg DEFAULT-VALUE is the default value. If non-nil, it is available
987 for history commands; but, unless READ is non-nil, `read-from-minibuffer'
988 does NOT return DEFAULT-VALUE if the user enters empty input! It returns
989 the empty string.
990 Seventh arg INHERIT-INPUT-METHOD, if non-nil, means the minibuffer inherits
991 the current input method and the setting of `enable-multibyte-characters'.
992 If the variable `minibuffer-allow-text-properties' is non-nil,
993 then the string which is returned includes whatever text properties
994 were present in the minibuffer. Otherwise the value has no text properties.
996 The remainder of this documentation string describes the
997 INITIAL-CONTENTS argument in more detail. It is only relevant when
998 studying existing code, or when HIST is a cons. If non-nil,
999 INITIAL-CONTENTS is a string to be inserted into the minibuffer before
1000 reading input. Normally, point is put at the end of that string.
1001 However, if INITIAL-CONTENTS is \(STRING . POSITION), the initial
1002 input is STRING, but point is placed at _one-indexed_ position
1003 POSITION in the minibuffer. Any integer value less than or equal to
1004 one puts point at the beginning of the string. *Note* that this
1005 behavior differs from the way such arguments are used in `completing-read'
1006 and some related functions, which use zero-indexing for POSITION. */)
1007 (prompt, initial_contents, keymap, read, hist, default_value, inherit_input_method)
1008 Lisp_Object prompt, initial_contents, keymap, read, hist, default_value;
1009 Lisp_Object inherit_input_method;
1011 Lisp_Object histvar, histpos, val;
1012 struct gcpro gcpro1;
1014 CHECK_STRING (prompt);
1015 if (NILP (keymap))
1016 keymap = Vminibuffer_local_map;
1017 else
1018 keymap = get_keymap (keymap, 1, 0);
1020 if (SYMBOLP (hist))
1022 histvar = hist;
1023 histpos = Qnil;
1025 else
1027 histvar = Fcar_safe (hist);
1028 histpos = Fcdr_safe (hist);
1030 if (NILP (histvar))
1031 histvar = Qminibuffer_history;
1032 if (NILP (histpos))
1033 XSETFASTINT (histpos, 0);
1035 GCPRO1 (default_value);
1036 val = read_minibuf (keymap, initial_contents, prompt,
1037 Qnil, !NILP (read),
1038 histvar, histpos, default_value,
1039 minibuffer_allow_text_properties,
1040 !NILP (inherit_input_method));
1041 UNGCPRO;
1042 return val;
1045 DEFUN ("read-minibuffer", Fread_minibuffer, Sread_minibuffer, 1, 2, 0,
1046 doc: /* Return a Lisp object read using the minibuffer, unevaluated.
1047 Prompt with PROMPT. If non-nil, optional second arg INITIAL-CONTENTS
1048 is a string to insert in the minibuffer before reading.
1049 \(INITIAL-CONTENTS can also be a cons of a string and an integer. Such
1050 arguments are used as in `read-from-minibuffer'.) */)
1051 (prompt, initial_contents)
1052 Lisp_Object prompt, initial_contents;
1054 CHECK_STRING (prompt);
1055 return read_minibuf (Vminibuffer_local_map, initial_contents,
1056 prompt, Qnil, 1, Qminibuffer_history,
1057 make_number (0), Qnil, 0, 0);
1060 DEFUN ("eval-minibuffer", Feval_minibuffer, Seval_minibuffer, 1, 2, 0,
1061 doc: /* Return value of Lisp expression read using the minibuffer.
1062 Prompt with PROMPT. If non-nil, optional second arg INITIAL-CONTENTS
1063 is a string to insert in the minibuffer before reading.
1064 \(INITIAL-CONTENTS can also be a cons of a string and an integer. Such
1065 arguments are used as in `read-from-minibuffer'.) */)
1066 (prompt, initial_contents)
1067 Lisp_Object prompt, initial_contents;
1069 return Feval (read_minibuf (Vread_expression_map, initial_contents,
1070 prompt, Qnil, 1, Qread_expression_history,
1071 make_number (0), Qnil, 0, 0));
1074 /* Functions that use the minibuffer to read various things. */
1076 DEFUN ("read-string", Fread_string, Sread_string, 1, 5, 0,
1077 doc: /* Read a string from the minibuffer, prompting with string PROMPT.
1078 If non-nil, second arg INITIAL-INPUT is a string to insert before reading.
1079 This argument has been superseded by DEFAULT-VALUE and should normally
1080 be nil in new code. It behaves as in `read-from-minibuffer'. See the
1081 documentation string of that function for details.
1082 The third arg HISTORY, if non-nil, specifies a history list
1083 and optionally the initial position in the list.
1084 See `read-from-minibuffer' for details of HISTORY argument.
1085 Fourth arg DEFAULT-VALUE is the default value. If non-nil, it is used
1086 for history commands, and as the value to return if the user enters
1087 the empty string.
1088 Fifth arg INHERIT-INPUT-METHOD, if non-nil, means the minibuffer inherits
1089 the current input method and the setting of `enable-multibyte-characters'. */)
1090 (prompt, initial_input, history, default_value, inherit_input_method)
1091 Lisp_Object prompt, initial_input, history, default_value;
1092 Lisp_Object inherit_input_method;
1094 Lisp_Object val;
1095 val = Fread_from_minibuffer (prompt, initial_input, Qnil,
1096 Qnil, history, default_value,
1097 inherit_input_method);
1098 if (STRINGP (val) && SCHARS (val) == 0 && ! NILP (default_value))
1099 val = default_value;
1100 return val;
1103 DEFUN ("read-no-blanks-input", Fread_no_blanks_input, Sread_no_blanks_input, 1, 3, 0,
1104 doc: /* Read a string from the terminal, not allowing blanks.
1105 Prompt with PROMPT. Whitespace terminates the input. If INITIAL is
1106 non-nil, it should be a string, which is used as initial input, with
1107 point positioned at the end, so that SPACE will accept the input.
1108 \(Actually, INITIAL can also be a cons of a string and an integer.
1109 Such values are treated as in `read-from-minibuffer', but are normally
1110 not useful in this function.)
1111 Third arg INHERIT-INPUT-METHOD, if non-nil, means the minibuffer inherits
1112 the current input method and the setting of`enable-multibyte-characters'. */)
1113 (prompt, initial, inherit_input_method)
1114 Lisp_Object prompt, initial, inherit_input_method;
1116 CHECK_STRING (prompt);
1117 return read_minibuf (Vminibuffer_local_ns_map, initial, prompt, Qnil,
1118 0, Qminibuffer_history, make_number (0), Qnil, 0,
1119 !NILP (inherit_input_method));
1122 DEFUN ("read-command", Fread_command, Sread_command, 1, 2, 0,
1123 doc: /* Read the name of a command and return as a symbol.
1124 Prompt with PROMPT. By default, return DEFAULT-VALUE. */)
1125 (prompt, default_value)
1126 Lisp_Object prompt, default_value;
1128 Lisp_Object name, default_string;
1130 if (NILP (default_value))
1131 default_string = Qnil;
1132 else if (SYMBOLP (default_value))
1133 default_string = SYMBOL_NAME (default_value);
1134 else
1135 default_string = default_value;
1137 name = Fcompleting_read (prompt, Vobarray, Qcommandp, Qt,
1138 Qnil, Qnil, default_string, Qnil);
1139 if (NILP (name))
1140 return name;
1141 return Fintern (name, Qnil);
1144 #ifdef NOTDEF
1145 DEFUN ("read-function", Fread_function, Sread_function, 1, 1, 0,
1146 doc: /* One arg PROMPT, a string. Read the name of a function and return as a symbol.
1147 Prompt with PROMPT. */)
1148 (prompt)
1149 Lisp_Object prompt;
1151 return Fintern (Fcompleting_read (prompt, Vobarray, Qfboundp, Qt, Qnil, Qnil, Qnil, Qnil),
1152 Qnil);
1154 #endif /* NOTDEF */
1156 DEFUN ("read-variable", Fread_variable, Sread_variable, 1, 2, 0,
1157 doc: /* Read the name of a user variable and return it as a symbol.
1158 Prompt with PROMPT. By default, return DEFAULT-VALUE.
1159 A user variable is one for which `user-variable-p' returns non-nil. */)
1160 (prompt, default_value)
1161 Lisp_Object prompt, default_value;
1163 Lisp_Object name, default_string;
1165 if (NILP (default_value))
1166 default_string = Qnil;
1167 else if (SYMBOLP (default_value))
1168 default_string = SYMBOL_NAME (default_value);
1169 else
1170 default_string = default_value;
1172 name = Fcompleting_read (prompt, Vobarray,
1173 Quser_variable_p, Qt,
1174 Qnil, Qnil, default_string, Qnil);
1175 if (NILP (name))
1176 return name;
1177 return Fintern (name, Qnil);
1180 DEFUN ("read-buffer", Fread_buffer, Sread_buffer, 1, 3, 0,
1181 doc: /* Read the name of a buffer and return as a string.
1182 Prompt with PROMPT.
1183 Optional second arg DEF is value to return if user enters an empty line.
1184 If optional third arg REQUIRE-MATCH is non-nil,
1185 only existing buffer names are allowed.
1186 The argument PROMPT should be a string ending with a colon and a space. */)
1187 (prompt, def, require_match)
1188 Lisp_Object prompt, def, require_match;
1190 Lisp_Object args[4];
1191 unsigned char *s;
1192 int len;
1194 if (BUFFERP (def))
1195 def = XBUFFER (def)->name;
1197 if (NILP (Vread_buffer_function))
1199 if (!NILP (def))
1201 /* A default value was provided: we must change PROMPT,
1202 editing the default value in before the colon. To achieve
1203 this, we replace PROMPT with a substring that doesn't
1204 contain the terminal space and colon (if present). They
1205 are then added back using Fformat. */
1207 if (STRINGP (prompt))
1209 s = SDATA (prompt);
1210 len = strlen (s);
1211 if (len >= 2 && s[len - 2] == ':' && s[len - 1] == ' ')
1212 len = len - 2;
1213 else if (len >= 1 && (s[len - 1] == ':' || s[len - 1] == ' '))
1214 len--;
1216 prompt = make_specified_string (s, -1, len,
1217 STRING_MULTIBYTE (prompt));
1220 args[0] = build_string ("%s (default %s): ");
1221 args[1] = prompt;
1222 args[2] = def;
1223 prompt = Fformat (3, args);
1226 return Fcompleting_read (prompt, intern ("internal-complete-buffer"),
1227 Qnil, require_match, Qnil, Qbuffer_name_history,
1228 def, Qnil);
1230 else
1232 args[0] = Vread_buffer_function;
1233 args[1] = prompt;
1234 args[2] = def;
1235 args[3] = require_match;
1236 return Ffuncall(4, args);
1240 static Lisp_Object
1241 minibuf_conform_representation (string, basis)
1242 Lisp_Object string, basis;
1244 if (STRING_MULTIBYTE (string) == STRING_MULTIBYTE (basis))
1245 return string;
1247 if (STRING_MULTIBYTE (string))
1248 return Fstring_make_unibyte (string);
1249 else
1250 return Fstring_make_multibyte (string);
1253 DEFUN ("try-completion", Ftry_completion, Stry_completion, 2, 3, 0,
1254 doc: /* Return common substring of all completions of STRING in COLLECTION.
1255 Test each possible completion specified by COLLECTION
1256 to see if it begins with STRING. The possible completions may be
1257 strings or symbols. Symbols are converted to strings before testing,
1258 see `symbol-name'.
1259 All that match STRING are compared together; the longest initial sequence
1260 common to all these matches is the return value.
1261 If there is no match at all, the return value is nil.
1262 For a unique match which is exact, the return value is t.
1264 If COLLECTION is an alist, the keys (cars of elements) are the
1265 possible completions. If an element is not a cons cell, then the
1266 element itself is the possible completion.
1267 If COLLECTION is a hash-table, all the keys that are strings or symbols
1268 are the possible completions.
1269 If COLLECTION is an obarray, the names of all symbols in the obarray
1270 are the possible completions.
1272 COLLECTION can also be a function to do the completion itself.
1273 It receives three arguments: the values STRING, PREDICATE and nil.
1274 Whatever it returns becomes the value of `try-completion'.
1276 If optional third argument PREDICATE is non-nil,
1277 it is used to test each possible match.
1278 The match is a candidate only if PREDICATE returns non-nil.
1279 The argument given to PREDICATE is the alist element
1280 or the symbol from the obarray. If COLLECTION is a hash-table,
1281 predicate is called with two arguments: the key and the value.
1282 Additionally to this predicate, `completion-regexp-list'
1283 is used to further constrain the set of candidates. */)
1284 (string, collection, predicate)
1285 Lisp_Object string, collection, predicate;
1287 Lisp_Object bestmatch, tail, elt, eltstring;
1288 /* Size in bytes of BESTMATCH. */
1289 int bestmatchsize = 0;
1290 /* These are in bytes, too. */
1291 int compare, matchsize;
1292 int type = (HASH_TABLE_P (collection) ? 3
1293 : VECTORP (collection) ? 2
1294 : NILP (collection) || (CONSP (collection)
1295 && (!SYMBOLP (XCAR (collection))
1296 || NILP (XCAR (collection)))));
1297 int index = 0, obsize = 0;
1298 int matchcount = 0;
1299 int bindcount = -1;
1300 Lisp_Object bucket, zero, end, tem;
1301 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
1303 CHECK_STRING (string);
1304 if (type == 0)
1305 return call3 (collection, string, predicate, Qnil);
1307 bestmatch = bucket = Qnil;
1308 zero = make_number (0);
1310 /* If COLLECTION is not a list, set TAIL just for gc pro. */
1311 tail = collection;
1312 if (type == 2)
1314 collection = check_obarray (collection);
1315 obsize = XVECTOR (collection)->size;
1316 bucket = XVECTOR (collection)->contents[index];
1319 while (1)
1321 /* Get the next element of the alist, obarray, or hash-table. */
1322 /* Exit the loop if the elements are all used up. */
1323 /* elt gets the alist element or symbol.
1324 eltstring gets the name to check as a completion. */
1326 if (type == 1)
1328 if (!CONSP (tail))
1329 break;
1330 elt = XCAR (tail);
1331 eltstring = CONSP (elt) ? XCAR (elt) : elt;
1332 tail = XCDR (tail);
1334 else if (type == 2)
1336 if (!EQ (bucket, zero))
1338 if (!SYMBOLP (bucket))
1339 error ("Bad data in guts of obarray");
1340 elt = bucket;
1341 eltstring = elt;
1342 if (XSYMBOL (bucket)->next)
1343 XSETSYMBOL (bucket, XSYMBOL (bucket)->next);
1344 else
1345 XSETFASTINT (bucket, 0);
1347 else if (++index >= obsize)
1348 break;
1349 else
1351 bucket = XVECTOR (collection)->contents[index];
1352 continue;
1355 else /* if (type == 3) */
1357 while (index < HASH_TABLE_SIZE (XHASH_TABLE (collection))
1358 && NILP (HASH_HASH (XHASH_TABLE (collection), index)))
1359 index++;
1360 if (index >= HASH_TABLE_SIZE (XHASH_TABLE (collection)))
1361 break;
1362 else
1363 elt = eltstring = HASH_KEY (XHASH_TABLE (collection), index++);
1366 /* Is this element a possible completion? */
1368 if (SYMBOLP (eltstring))
1369 eltstring = Fsymbol_name (eltstring);
1371 if (STRINGP (eltstring)
1372 && SCHARS (string) <= SCHARS (eltstring)
1373 && (tem = Fcompare_strings (eltstring, zero,
1374 make_number (SCHARS (string)),
1375 string, zero, Qnil,
1376 completion_ignore_case ? Qt : Qnil),
1377 EQ (Qt, tem)))
1379 /* Yes. */
1380 Lisp_Object regexps;
1382 /* Ignore this element if it fails to match all the regexps. */
1384 for (regexps = Vcompletion_regexp_list; CONSP (regexps);
1385 regexps = XCDR (regexps))
1387 if (bindcount < 0) {
1388 bindcount = SPECPDL_INDEX ();
1389 specbind (Qcase_fold_search,
1390 completion_ignore_case ? Qt : Qnil);
1392 tem = Fstring_match (XCAR (regexps), eltstring, zero);
1393 if (NILP (tem))
1394 break;
1396 if (CONSP (regexps))
1397 continue;
1400 /* Ignore this element if there is a predicate
1401 and the predicate doesn't like it. */
1403 if (!NILP (predicate))
1405 if (EQ (predicate, Qcommandp))
1406 tem = Fcommandp (elt, Qnil);
1407 else
1409 if (bindcount >= 0) {
1410 unbind_to (bindcount, Qnil);
1411 bindcount = -1;
1413 GCPRO4 (tail, string, eltstring, bestmatch);
1414 tem = type == 3
1415 ? call2 (predicate, elt,
1416 HASH_VALUE (XHASH_TABLE (collection), index - 1))
1417 : call1 (predicate, elt);
1418 UNGCPRO;
1420 if (NILP (tem)) continue;
1423 /* Update computation of how much all possible completions match */
1425 if (NILP (bestmatch))
1427 matchcount = 1;
1428 bestmatch = eltstring;
1429 bestmatchsize = SCHARS (eltstring);
1431 else
1433 compare = min (bestmatchsize, SCHARS (eltstring));
1434 tem = Fcompare_strings (bestmatch, zero,
1435 make_number (compare),
1436 eltstring, zero,
1437 make_number (compare),
1438 completion_ignore_case ? Qt : Qnil);
1439 if (EQ (tem, Qt))
1440 matchsize = compare;
1441 else if (XINT (tem) < 0)
1442 matchsize = - XINT (tem) - 1;
1443 else
1444 matchsize = XINT (tem) - 1;
1446 if (matchsize < 0)
1447 /* When can this happen ? -stef */
1448 matchsize = compare;
1449 if (completion_ignore_case)
1451 /* If this is an exact match except for case,
1452 use it as the best match rather than one that is not an
1453 exact match. This way, we get the case pattern
1454 of the actual match. */
1455 if ((matchsize == SCHARS (eltstring)
1456 && matchsize < SCHARS (bestmatch))
1458 /* If there is more than one exact match ignoring case,
1459 and one of them is exact including case,
1460 prefer that one. */
1461 /* If there is no exact match ignoring case,
1462 prefer a match that does not change the case
1463 of the input. */
1464 ((matchsize == SCHARS (eltstring))
1466 (matchsize == SCHARS (bestmatch))
1467 && (tem = Fcompare_strings (eltstring, zero,
1468 make_number (SCHARS (string)),
1469 string, zero,
1470 Qnil,
1471 Qnil),
1472 EQ (Qt, tem))
1473 && (tem = Fcompare_strings (bestmatch, zero,
1474 make_number (SCHARS (string)),
1475 string, zero,
1476 Qnil,
1477 Qnil),
1478 ! EQ (Qt, tem))))
1479 bestmatch = eltstring;
1481 if (bestmatchsize != SCHARS (eltstring)
1482 || bestmatchsize != matchsize)
1483 /* Don't count the same string multiple times. */
1484 matchcount++;
1485 bestmatchsize = matchsize;
1486 if (matchsize <= SCHARS (string)
1487 /* If completion-ignore-case is non-nil, don't
1488 short-circuit because we want to find the best
1489 possible match *including* case differences. */
1490 && !completion_ignore_case
1491 && matchcount > 1)
1492 /* No need to look any further. */
1493 break;
1498 if (bindcount >= 0) {
1499 unbind_to (bindcount, Qnil);
1500 bindcount = -1;
1503 if (NILP (bestmatch))
1504 return Qnil; /* No completions found */
1505 /* If we are ignoring case, and there is no exact match,
1506 and no additional text was supplied,
1507 don't change the case of what the user typed. */
1508 if (completion_ignore_case && bestmatchsize == SCHARS (string)
1509 && SCHARS (bestmatch) > bestmatchsize)
1510 return minibuf_conform_representation (string, bestmatch);
1512 /* Return t if the supplied string is an exact match (counting case);
1513 it does not require any change to be made. */
1514 if (matchcount == 1 && bestmatchsize == SCHARS (string)
1515 && (tem = Fcompare_strings (bestmatch, make_number (0),
1516 make_number (bestmatchsize),
1517 string, make_number (0),
1518 make_number (bestmatchsize),
1519 Qnil),
1520 EQ (Qt, tem)))
1521 return Qt;
1523 XSETFASTINT (zero, 0); /* Else extract the part in which */
1524 XSETFASTINT (end, bestmatchsize); /* all completions agree */
1525 return Fsubstring (bestmatch, zero, end);
1528 DEFUN ("all-completions", Fall_completions, Sall_completions, 2, 4, 0,
1529 doc: /* Search for partial matches to STRING in COLLECTION.
1530 Test each of the possible completions specified by COLLECTION
1531 to see if it begins with STRING. The possible completions may be
1532 strings or symbols. Symbols are converted to strings before testing,
1533 see `symbol-name'.
1534 The value is a list of all the possible completions that match STRING.
1536 If COLLECTION is an alist, the keys (cars of elements) are the
1537 possible completions. If an element is not a cons cell, then the
1538 element itself is the possible completion.
1539 If COLLECTION is a hash-table, all the keys that are strings or symbols
1540 are the possible completions.
1541 If COLLECTION is an obarray, the names of all symbols in the obarray
1542 are the possible completions.
1544 COLLECTION can also be a function to do the completion itself.
1545 It receives three arguments: the values STRING, PREDICATE and t.
1546 Whatever it returns becomes the value of `all-completions'.
1548 If optional third argument PREDICATE is non-nil,
1549 it is used to test each possible match.
1550 The match is a candidate only if PREDICATE returns non-nil.
1551 The argument given to PREDICATE is the alist element
1552 or the symbol from the obarray. If COLLECTION is a hash-table,
1553 predicate is called with two arguments: the key and the value.
1554 Additionally to this predicate, `completion-regexp-list'
1555 is used to further constrain the set of candidates.
1557 If the optional fourth argument HIDE-SPACES is non-nil,
1558 strings in COLLECTION that start with a space
1559 are ignored unless STRING itself starts with a space. */)
1560 (string, collection, predicate, hide_spaces)
1561 Lisp_Object string, collection, predicate, hide_spaces;
1563 Lisp_Object tail, elt, eltstring;
1564 Lisp_Object allmatches;
1565 int type = HASH_TABLE_P (collection) ? 3
1566 : VECTORP (collection) ? 2
1567 : NILP (collection) || (CONSP (collection)
1568 && (!SYMBOLP (XCAR (collection))
1569 || NILP (XCAR (collection))));
1570 int index = 0, obsize = 0;
1571 int bindcount = -1;
1572 Lisp_Object bucket, tem, zero;
1573 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
1575 CHECK_STRING (string);
1576 if (type == 0)
1577 return call3 (collection, string, predicate, Qt);
1578 allmatches = bucket = Qnil;
1579 zero = make_number (0);
1581 /* If COLLECTION is not a list, set TAIL just for gc pro. */
1582 tail = collection;
1583 if (type == 2)
1585 obsize = XVECTOR (collection)->size;
1586 bucket = XVECTOR (collection)->contents[index];
1589 while (1)
1591 /* Get the next element of the alist, obarray, or hash-table. */
1592 /* Exit the loop if the elements are all used up. */
1593 /* elt gets the alist element or symbol.
1594 eltstring gets the name to check as a completion. */
1596 if (type == 1)
1598 if (!CONSP (tail))
1599 break;
1600 elt = XCAR (tail);
1601 eltstring = CONSP (elt) ? XCAR (elt) : elt;
1602 tail = XCDR (tail);
1604 else if (type == 2)
1606 if (!EQ (bucket, zero))
1608 elt = bucket;
1609 eltstring = elt;
1610 if (XSYMBOL (bucket)->next)
1611 XSETSYMBOL (bucket, XSYMBOL (bucket)->next);
1612 else
1613 XSETFASTINT (bucket, 0);
1615 else if (++index >= obsize)
1616 break;
1617 else
1619 bucket = XVECTOR (collection)->contents[index];
1620 continue;
1623 else /* if (type == 3) */
1625 while (index < HASH_TABLE_SIZE (XHASH_TABLE (collection))
1626 && NILP (HASH_HASH (XHASH_TABLE (collection), index)))
1627 index++;
1628 if (index >= HASH_TABLE_SIZE (XHASH_TABLE (collection)))
1629 break;
1630 else
1631 elt = eltstring = HASH_KEY (XHASH_TABLE (collection), index++);
1634 /* Is this element a possible completion? */
1636 if (SYMBOLP (eltstring))
1637 eltstring = Fsymbol_name (eltstring);
1639 if (STRINGP (eltstring)
1640 && SCHARS (string) <= SCHARS (eltstring)
1641 /* If HIDE_SPACES, reject alternatives that start with space
1642 unless the input starts with space. */
1643 && ((SBYTES (string) > 0
1644 && SREF (string, 0) == ' ')
1645 || SREF (eltstring, 0) != ' '
1646 || NILP (hide_spaces))
1647 && (tem = Fcompare_strings (eltstring, zero,
1648 make_number (SCHARS (string)),
1649 string, zero,
1650 make_number (SCHARS (string)),
1651 completion_ignore_case ? Qt : Qnil),
1652 EQ (Qt, tem)))
1654 /* Yes. */
1655 Lisp_Object regexps;
1656 Lisp_Object zero;
1657 XSETFASTINT (zero, 0);
1659 /* Ignore this element if it fails to match all the regexps. */
1661 for (regexps = Vcompletion_regexp_list; CONSP (regexps);
1662 regexps = XCDR (regexps))
1664 if (bindcount < 0) {
1665 bindcount = SPECPDL_INDEX ();
1666 specbind (Qcase_fold_search,
1667 completion_ignore_case ? Qt : Qnil);
1669 tem = Fstring_match (XCAR (regexps), eltstring, zero);
1670 if (NILP (tem))
1671 break;
1673 if (CONSP (regexps))
1674 continue;
1677 /* Ignore this element if there is a predicate
1678 and the predicate doesn't like it. */
1680 if (!NILP (predicate))
1682 if (EQ (predicate, Qcommandp))
1683 tem = Fcommandp (elt, Qnil);
1684 else
1686 if (bindcount >= 0) {
1687 unbind_to (bindcount, Qnil);
1688 bindcount = -1;
1690 GCPRO4 (tail, eltstring, allmatches, string);
1691 tem = type == 3
1692 ? call2 (predicate, elt,
1693 HASH_VALUE (XHASH_TABLE (collection), index - 1))
1694 : call1 (predicate, elt);
1695 UNGCPRO;
1697 if (NILP (tem)) continue;
1699 /* Ok => put it on the list. */
1700 allmatches = Fcons (eltstring, allmatches);
1704 if (bindcount >= 0) {
1705 unbind_to (bindcount, Qnil);
1706 bindcount = -1;
1709 return Fnreverse (allmatches);
1712 DEFUN ("completing-read", Fcompleting_read, Scompleting_read, 2, 8, 0,
1713 doc: /* Read a string in the minibuffer, with completion.
1714 PROMPT is a string to prompt with; normally it ends in a colon and a space.
1715 COLLECTION can be a list of strings, an alist, an obarray or a hash table.
1716 COLLECTION can also be a function to do the completion itself.
1717 PREDICATE limits completion to a subset of COLLECTION.
1718 See `try-completion' and `all-completions' for more details
1719 on completion, COLLECTION, and PREDICATE.
1721 If REQUIRE-MATCH is non-nil, the user is not allowed to exit unless
1722 the input is (or completes to) an element of COLLECTION or is null.
1723 If it is also not t, typing RET does not exit if it does non-null completion.
1724 If the input is null, `completing-read' returns DEF, or an empty string
1725 if DEF is nil, regardless of the value of REQUIRE-MATCH.
1727 If INITIAL-INPUT is non-nil, insert it in the minibuffer initially,
1728 with point positioned at the end.
1729 If it is (STRING . POSITION), the initial input is STRING, but point
1730 is placed at _zero-indexed_ position POSITION in STRING. (*Note*
1731 that this is different from `read-from-minibuffer' and related
1732 functions, which use one-indexing for POSITION.) This feature is
1733 deprecated--it is best to pass nil for INITIAL-INPUT and supply the
1734 default value DEF instead. The user can yank the default value into
1735 the minibuffer easily using \\[next-history-element].
1737 HIST, if non-nil, specifies a history list and optionally the initial
1738 position in the list. It can be a symbol, which is the history list
1739 variable to use, or it can be a cons cell (HISTVAR . HISTPOS). In
1740 that case, HISTVAR is the history list variable to use, and HISTPOS
1741 is the initial position (the position in the list used by the
1742 minibuffer history commands). For consistency, you should also
1743 specify that element of the history as the value of
1744 INITIAL-INPUT. (This is the only case in which you should use
1745 INITIAL-INPUT instead of DEF.) Positions are counted starting from
1746 1 at the beginning of the list. The variable `history-length'
1747 controls the maximum length of a history list.
1749 DEF, if non-nil, is the default value.
1751 If INHERIT-INPUT-METHOD is non-nil, the minibuffer inherits
1752 the current input method and the setting of `enable-multibyte-characters'.
1754 Completion ignores case if the ambient value of
1755 `completion-ignore-case' is non-nil. */)
1756 (prompt, collection, predicate, require_match, initial_input, hist, def, inherit_input_method)
1757 Lisp_Object prompt, collection, predicate, require_match, initial_input;
1758 Lisp_Object hist, def, inherit_input_method;
1760 Lisp_Object val, histvar, histpos, position;
1761 Lisp_Object init;
1762 int pos = 0;
1763 int count = SPECPDL_INDEX ();
1764 struct gcpro gcpro1;
1766 init = initial_input;
1767 GCPRO1 (def);
1769 specbind (Qminibuffer_completion_table, collection);
1770 specbind (Qminibuffer_completion_predicate, predicate);
1771 specbind (Qminibuffer_completion_confirm,
1772 EQ (require_match, Qt) ? Qnil : require_match);
1773 last_exact_completion = Qnil;
1775 position = Qnil;
1776 if (!NILP (init))
1778 if (CONSP (init))
1780 position = Fcdr (init);
1781 init = Fcar (init);
1783 CHECK_STRING (init);
1784 if (!NILP (position))
1786 CHECK_NUMBER (position);
1787 /* Convert to distance from end of input. */
1788 pos = XINT (position) - SCHARS (init);
1792 if (SYMBOLP (hist))
1794 histvar = hist;
1795 histpos = Qnil;
1797 else
1799 histvar = Fcar_safe (hist);
1800 histpos = Fcdr_safe (hist);
1802 if (NILP (histvar))
1803 histvar = Qminibuffer_history;
1804 if (NILP (histpos))
1805 XSETFASTINT (histpos, 0);
1807 val = read_minibuf (NILP (require_match)
1808 ? (NILP (Vminibuffer_completing_file_name)
1809 || EQ (Vminibuffer_completing_file_name, Qlambda)
1810 ? Vminibuffer_local_completion_map
1811 : Vminibuffer_local_filename_completion_map)
1812 : (NILP (Vminibuffer_completing_file_name)
1813 || EQ (Vminibuffer_completing_file_name, Qlambda)
1814 ? Vminibuffer_local_must_match_map
1815 : Vminibuffer_local_must_match_filename_map),
1816 init, prompt, make_number (pos), 0,
1817 histvar, histpos, def, 0,
1818 !NILP (inherit_input_method));
1820 if (STRINGP (val) && SCHARS (val) == 0 && ! NILP (def))
1821 val = def;
1823 RETURN_UNGCPRO (unbind_to (count, val));
1826 Lisp_Object Fminibuffer_completion_help ();
1827 Lisp_Object Fassoc_string ();
1829 /* Test whether TXT is an exact completion. */
1830 DEFUN ("test-completion", Ftest_completion, Stest_completion, 2, 3, 0,
1831 doc: /* Return non-nil if STRING is a valid completion.
1832 Takes the same arguments as `all-completions' and `try-completion'.
1833 If COLLECTION is a function, it is called with three arguments:
1834 the values STRING, PREDICATE and `lambda'. */)
1835 (string, collection, predicate)
1836 Lisp_Object string, collection, predicate;
1838 Lisp_Object regexps, tail, tem = Qnil;
1839 int i = 0;
1841 CHECK_STRING (string);
1843 if ((CONSP (collection)
1844 && (!SYMBOLP (XCAR (collection)) || NILP (XCAR (collection))))
1845 || NILP (collection))
1847 tem = Fassoc_string (string, collection, completion_ignore_case ? Qt : Qnil);
1848 if (NILP (tem))
1849 return Qnil;
1851 else if (VECTORP (collection))
1853 /* Bypass intern-soft as that loses for nil. */
1854 tem = oblookup (collection,
1855 SDATA (string),
1856 SCHARS (string),
1857 SBYTES (string));
1858 if (!SYMBOLP (tem))
1860 if (STRING_MULTIBYTE (string))
1861 string = Fstring_make_unibyte (string);
1862 else
1863 string = Fstring_make_multibyte (string);
1865 tem = oblookup (collection,
1866 SDATA (string),
1867 SCHARS (string),
1868 SBYTES (string));
1871 if (completion_ignore_case && !SYMBOLP (tem))
1873 for (i = XVECTOR (collection)->size - 1; i >= 0; i--)
1875 tail = XVECTOR (collection)->contents[i];
1876 if (SYMBOLP (tail))
1877 while (1)
1879 if (EQ((Fcompare_strings (string, make_number (0), Qnil,
1880 Fsymbol_name (tail),
1881 make_number (0) , Qnil, Qt)),
1882 Qt))
1884 tem = tail;
1885 break;
1887 if (XSYMBOL (tail)->next == 0)
1888 break;
1889 XSETSYMBOL (tail, XSYMBOL (tail)->next);
1894 if (!SYMBOLP (tem))
1895 return Qnil;
1897 else if (HASH_TABLE_P (collection))
1899 struct Lisp_Hash_Table *h = XHASH_TABLE (collection);
1900 i = hash_lookup (h, string, NULL);
1901 if (i >= 0)
1902 tem = HASH_KEY (h, i);
1903 else
1904 for (i = 0; i < HASH_TABLE_SIZE (h); ++i)
1905 if (!NILP (HASH_HASH (h, i)) &&
1906 EQ (Fcompare_strings (string, make_number (0), Qnil,
1907 HASH_KEY (h, i), make_number (0) , Qnil,
1908 completion_ignore_case ? Qt : Qnil),
1909 Qt))
1911 tem = HASH_KEY (h, i);
1912 break;
1914 if (!STRINGP (tem))
1915 return Qnil;
1917 else
1918 return call3 (collection, string, predicate, Qlambda);
1920 /* Reject this element if it fails to match all the regexps. */
1921 if (CONSP (Vcompletion_regexp_list))
1923 int count = SPECPDL_INDEX ();
1924 specbind (Qcase_fold_search, completion_ignore_case ? Qt : Qnil);
1925 for (regexps = Vcompletion_regexp_list; CONSP (regexps);
1926 regexps = XCDR (regexps))
1928 if (NILP (Fstring_match (XCAR (regexps),
1929 SYMBOLP (tem) ? string : tem,
1930 Qnil)))
1931 return unbind_to (count, Qnil);
1933 unbind_to (count, Qnil);
1936 /* Finally, check the predicate. */
1937 if (!NILP (predicate))
1939 return HASH_TABLE_P (collection)
1940 ? call2 (predicate, tem, HASH_VALUE (XHASH_TABLE (collection), i))
1941 : call1 (predicate, tem);
1943 else
1944 return Qt;
1947 DEFUN ("internal-complete-buffer", Finternal_complete_buffer, Sinternal_complete_buffer, 3, 3, 0,
1948 doc: /* Perform completion on buffer names.
1949 If the argument FLAG is nil, invoke `try-completion', if it's t, invoke
1950 `all-completions', otherwise invoke `test-completion'.
1952 The arguments STRING and PREDICATE are as in `try-completion',
1953 `all-completions', and `test-completion'. */)
1954 (string, predicate, flag)
1955 Lisp_Object string, predicate, flag;
1957 if (NILP (flag))
1958 return Ftry_completion (string, Vbuffer_alist, predicate);
1959 else if (EQ (flag, Qt))
1960 return Fall_completions (string, Vbuffer_alist, predicate, Qt);
1961 else /* assume `lambda' */
1962 return Ftest_completion (string, Vbuffer_alist, predicate);
1965 /* returns:
1966 * 0 no possible completion
1967 * 1 was already an exact and unique completion
1968 * 3 was already an exact completion
1969 * 4 completed to an exact completion
1970 * 5 some completion happened
1971 * 6 no completion happened
1974 do_completion ()
1976 Lisp_Object completion, string, tem;
1977 int completedp;
1978 Lisp_Object last;
1979 struct gcpro gcpro1, gcpro2;
1981 completion = Ftry_completion (Fminibuffer_completion_contents (),
1982 Vminibuffer_completion_table,
1983 Vminibuffer_completion_predicate);
1984 last = last_exact_completion;
1985 last_exact_completion = Qnil;
1987 GCPRO2 (completion, last);
1989 if (NILP (completion))
1991 bitch_at_user ();
1992 temp_echo_area_glyphs (build_string (" [No match]"));
1993 UNGCPRO;
1994 return 0;
1997 if (EQ (completion, Qt)) /* exact and unique match */
1999 UNGCPRO;
2000 return 1;
2003 string = Fminibuffer_completion_contents ();
2005 /* COMPLETEDP should be true if some completion was done, which
2006 doesn't include simply changing the case of the entered string.
2007 However, for appearance, the string is rewritten if the case
2008 changes. */
2009 tem = Fcompare_strings (completion, Qnil, Qnil, string, Qnil, Qnil, Qt);
2010 completedp = !EQ (tem, Qt);
2012 tem = Fcompare_strings (completion, Qnil, Qnil, string, Qnil, Qnil, Qnil);
2013 if (!EQ (tem, Qt))
2014 /* Rewrite the user's input. */
2016 int prompt_end = XINT (Fminibuffer_prompt_end ());
2017 /* Some completion happened */
2019 if (! NILP (Vminibuffer_completing_file_name)
2020 && SREF (completion, SBYTES (completion) - 1) == '/'
2021 && PT < ZV
2022 && FETCH_CHAR (PT_BYTE) == '/')
2024 del_range (prompt_end, PT + 1);
2026 else
2027 del_range (prompt_end, PT);
2029 Finsert (1, &completion);
2031 if (! completedp)
2032 /* The case of the string changed, but that's all. We're not
2033 sure whether this is a unique completion or not, so try again
2034 using the real case (this shouldn't recurse again, because
2035 the next time try-completion will return either `t' or the
2036 exact string). */
2038 UNGCPRO;
2039 return do_completion ();
2043 /* It did find a match. Do we match some possibility exactly now? */
2044 tem = Ftest_completion (Fminibuffer_contents (),
2045 Vminibuffer_completion_table,
2046 Vminibuffer_completion_predicate);
2047 if (NILP (tem))
2049 /* not an exact match */
2050 UNGCPRO;
2051 if (completedp)
2052 return 5;
2053 else if (!NILP (Vcompletion_auto_help))
2054 Fminibuffer_completion_help ();
2055 else
2056 temp_echo_area_glyphs (build_string (" [Next char not unique]"));
2057 return 6;
2059 else if (completedp)
2061 UNGCPRO;
2062 return 4;
2064 /* If the last exact completion and this one were the same,
2065 it means we've already given a "Complete but not unique"
2066 message and the user's hit TAB again, so now we give him help. */
2067 last_exact_completion = completion;
2068 if (!NILP (last))
2070 tem = Fminibuffer_completion_contents ();
2071 if (!NILP (Fequal (tem, last)))
2072 Fminibuffer_completion_help ();
2074 UNGCPRO;
2075 return 3;
2078 /* Like assoc but assumes KEY is a string, and ignores case if appropriate. */
2080 DEFUN ("assoc-string", Fassoc_string, Sassoc_string, 2, 3, 0,
2081 doc: /* Like `assoc' but specifically for strings (and symbols).
2082 Symbols are converted to strings, and unibyte strings are converted to
2083 multibyte for comparison.
2084 Case is ignored if optional arg CASE-FOLD is non-nil.
2085 As opposed to `assoc', it will also match an entry consisting of a single
2086 string rather than a cons cell whose car is a string. */)
2087 (key, list, case_fold)
2088 register Lisp_Object key;
2089 Lisp_Object list, case_fold;
2091 register Lisp_Object tail;
2093 if (SYMBOLP (key))
2094 key = Fsymbol_name (key);
2096 for (tail = list; !NILP (tail); tail = Fcdr (tail))
2098 register Lisp_Object elt, tem, thiscar;
2099 elt = Fcar (tail);
2100 thiscar = CONSP (elt) ? XCAR (elt) : elt;
2101 if (SYMBOLP (thiscar))
2102 thiscar = Fsymbol_name (thiscar);
2103 else if (!STRINGP (thiscar))
2104 continue;
2105 tem = Fcompare_strings (thiscar, make_number (0), Qnil,
2106 key, make_number (0), Qnil,
2107 case_fold);
2108 if (EQ (tem, Qt))
2109 return elt;
2110 QUIT;
2112 return Qnil;
2115 DEFUN ("minibuffer-complete", Fminibuffer_complete, Sminibuffer_complete, 0, 0, "",
2116 doc: /* Complete the minibuffer contents as far as possible.
2117 Return nil if there is no valid completion, else t.
2118 If no characters can be completed, display a list of possible completions.
2119 If you repeat this command after it displayed such a list,
2120 scroll the window of possible completions. */)
2123 register int i;
2124 Lisp_Object window, tem;
2126 /* If the previous command was not this,
2127 mark the completion buffer obsolete. */
2128 if (! EQ (current_kboard->Vlast_command, Vthis_command))
2129 Vminibuf_scroll_window = Qnil;
2131 window = Vminibuf_scroll_window;
2132 /* If there's a fresh completion window with a live buffer,
2133 and this command is repeated, scroll that window. */
2134 if (! NILP (window) && ! NILP (XWINDOW (window)->buffer)
2135 && !NILP (XBUFFER (XWINDOW (window)->buffer)->name))
2137 struct buffer *obuf = current_buffer;
2139 Fset_buffer (XWINDOW (window)->buffer);
2140 tem = Fpos_visible_in_window_p (make_number (ZV), window, Qnil);
2141 if (! NILP (tem))
2142 /* If end is in view, scroll up to the beginning. */
2143 Fset_window_start (window, make_number (BEGV), Qnil);
2144 else
2145 /* Else scroll down one screen. */
2146 Fscroll_other_window (Qnil);
2148 set_buffer_internal (obuf);
2149 return Qnil;
2152 i = do_completion ();
2153 switch (i)
2155 case 0:
2156 return Qnil;
2158 case 1:
2159 if (PT != ZV)
2160 Fgoto_char (make_number (ZV));
2161 temp_echo_area_glyphs (build_string (" [Sole completion]"));
2162 break;
2164 case 3:
2165 if (PT != ZV)
2166 Fgoto_char (make_number (ZV));
2167 temp_echo_area_glyphs (build_string (" [Complete, but not unique]"));
2168 break;
2171 return Qt;
2174 /* Subroutines of Fminibuffer_complete_and_exit. */
2176 /* This one is called by internal_condition_case to do the real work. */
2178 Lisp_Object
2179 complete_and_exit_1 ()
2181 return make_number (do_completion ());
2184 /* This one is called by internal_condition_case if an error happens.
2185 Pretend the current value is an exact match. */
2187 Lisp_Object
2188 complete_and_exit_2 (ignore)
2189 Lisp_Object ignore;
2191 return make_number (1);
2194 EXFUN (Fexit_minibuffer, 0) NO_RETURN;
2196 DEFUN ("minibuffer-complete-and-exit", Fminibuffer_complete_and_exit,
2197 Sminibuffer_complete_and_exit, 0, 0, "",
2198 doc: /* If the minibuffer contents is a valid completion then exit.
2199 Otherwise try to complete it. If completion leads to a valid completion,
2200 a repetition of this command will exit. */)
2203 register int i;
2204 Lisp_Object val, tem;
2206 /* Allow user to specify null string */
2207 if (XINT (Fminibuffer_prompt_end ()) == ZV)
2208 goto exit;
2210 val = Fminibuffer_contents ();
2211 tem = Ftest_completion (val,
2212 Vminibuffer_completion_table,
2213 Vminibuffer_completion_predicate);
2214 if (!NILP (tem))
2216 if (completion_ignore_case)
2217 { /* Fixup case of the field, if necessary. */
2218 Lisp_Object compl
2219 = Ftry_completion (val,
2220 Vminibuffer_completion_table,
2221 Vminibuffer_completion_predicate);
2222 if (STRINGP (compl)
2223 /* If it weren't for this piece of paranoia, I'd replace
2224 the whole thing with a call to do_completion. */
2225 && EQ (Flength (val), Flength (compl)))
2227 del_range (XINT (Fminibuffer_prompt_end ()), ZV);
2228 Finsert (1, &compl);
2231 goto exit;
2234 /* Call do_completion, but ignore errors. */
2235 SET_PT (ZV);
2236 val = internal_condition_case (complete_and_exit_1, Qerror,
2237 complete_and_exit_2);
2239 i = XFASTINT (val);
2240 switch (i)
2242 case 1:
2243 case 3:
2244 goto exit;
2246 case 4:
2247 if (!NILP (Vminibuffer_completion_confirm))
2249 temp_echo_area_glyphs (build_string (" [Confirm]"));
2250 return Qnil;
2252 else
2253 goto exit;
2255 default:
2256 return Qnil;
2258 exit:
2259 return Fexit_minibuffer ();
2260 /* NOTREACHED */
2263 DEFUN ("minibuffer-complete-word", Fminibuffer_complete_word, Sminibuffer_complete_word,
2264 0, 0, "",
2265 doc: /* Complete the minibuffer contents at most a single word.
2266 After one word is completed as much as possible, a space or hyphen
2267 is added, provided that matches some possible completion.
2268 Return nil if there is no valid completion, else t. */)
2271 Lisp_Object completion, tem, tem1;
2272 register int i, i_byte;
2273 struct gcpro gcpro1, gcpro2;
2274 int prompt_end_charpos = XINT (Fminibuffer_prompt_end ());
2276 /* We keep calling Fbuffer_string rather than arrange for GC to
2277 hold onto a pointer to one of the strings thus made. */
2279 completion = Ftry_completion (Fminibuffer_completion_contents (),
2280 Vminibuffer_completion_table,
2281 Vminibuffer_completion_predicate);
2282 if (NILP (completion))
2284 bitch_at_user ();
2285 temp_echo_area_glyphs (build_string (" [No match]"));
2286 return Qnil;
2288 if (EQ (completion, Qt))
2289 return Qnil;
2291 #if 0 /* How the below code used to look, for reference. */
2292 tem = Fminibuffer_contents ();
2293 b = SDATA (tem);
2294 i = ZV - 1 - SCHARS (completion);
2295 p = SDATA (completion);
2296 if (i > 0 ||
2297 0 <= scmp (b, p, ZV - 1))
2299 i = 1;
2300 /* Set buffer to longest match of buffer tail and completion head. */
2301 while (0 <= scmp (b + i, p, ZV - 1 - i))
2302 i++;
2303 del_range (1, i + 1);
2304 SET_PT (ZV);
2306 #else /* Rewritten code */
2308 int buffer_nchars, completion_nchars;
2310 CHECK_STRING (completion);
2311 tem = Fminibuffer_completion_contents ();
2312 GCPRO2 (completion, tem);
2313 /* If reading a file name,
2314 expand any $ENVVAR refs in the buffer and in TEM. */
2315 if (! NILP (Vminibuffer_completing_file_name))
2317 Lisp_Object substituted;
2318 substituted = Fsubstitute_in_file_name (tem);
2319 if (! EQ (substituted, tem))
2321 tem = substituted;
2322 del_range (prompt_end_charpos, PT);
2323 Finsert (1, &tem);
2326 buffer_nchars = SCHARS (tem); /* # chars in what we completed. */
2327 completion_nchars = SCHARS (completion);
2328 i = buffer_nchars - completion_nchars;
2329 if (i > 0
2331 (tem1 = Fcompare_strings (tem, make_number (0),
2332 make_number (buffer_nchars),
2333 completion, make_number (0),
2334 make_number (buffer_nchars),
2335 completion_ignore_case ? Qt : Qnil),
2336 ! EQ (tem1, Qt)))
2338 int start_pos;
2340 /* Make buffer (before point) contain the longest match
2341 of TEM's tail and COMPLETION's head. */
2342 if (i <= 0) i = 1;
2343 start_pos= i;
2344 buffer_nchars -= i;
2345 while (i > 0)
2347 tem1 = Fcompare_strings (tem, make_number (start_pos), Qnil,
2348 completion, make_number (0),
2349 make_number (buffer_nchars),
2350 completion_ignore_case ? Qt : Qnil);
2351 start_pos++;
2352 if (EQ (tem1, Qt))
2353 break;
2354 i++;
2355 buffer_nchars--;
2357 del_range (start_pos, start_pos + buffer_nchars);
2359 UNGCPRO;
2361 #endif /* Rewritten code */
2364 int prompt_end_bytepos;
2365 prompt_end_bytepos = CHAR_TO_BYTE (prompt_end_charpos);
2366 i = PT - prompt_end_charpos;
2367 i_byte = PT_BYTE - prompt_end_bytepos;
2370 /* If completion finds next char not unique,
2371 consider adding a space or a hyphen. */
2372 if (i == SCHARS (completion))
2374 GCPRO1 (completion);
2375 tem = Ftry_completion (concat2 (Fminibuffer_completion_contents (),
2376 build_string (" ")),
2377 Vminibuffer_completion_table,
2378 Vminibuffer_completion_predicate);
2379 UNGCPRO;
2381 if (STRINGP (tem))
2382 completion = tem;
2383 else
2385 GCPRO1 (completion);
2386 tem =
2387 Ftry_completion (concat2 (Fminibuffer_completion_contents (),
2388 build_string ("-")),
2389 Vminibuffer_completion_table,
2390 Vminibuffer_completion_predicate);
2391 UNGCPRO;
2393 if (STRINGP (tem))
2394 completion = tem;
2398 /* Now find first word-break in the stuff found by completion.
2399 i gets index in string of where to stop completing. */
2401 int len, c;
2402 int bytes = SBYTES (completion);
2403 register const unsigned char *completion_string = SDATA (completion);
2404 for (; i_byte < SBYTES (completion); i_byte += len, i++)
2406 c = STRING_CHAR_AND_LENGTH (completion_string + i_byte,
2407 bytes - i_byte,
2408 len);
2409 if (SYNTAX (c) != Sword)
2411 i_byte += len;
2412 i++;
2413 break;
2418 /* If got no characters, print help for user. */
2420 if (i == PT - prompt_end_charpos)
2422 if (!NILP (Vcompletion_auto_help))
2423 Fminibuffer_completion_help ();
2424 return Qnil;
2427 /* Otherwise insert in minibuffer the chars we got */
2429 if (! NILP (Vminibuffer_completing_file_name)
2430 && SREF (completion, SBYTES (completion) - 1) == '/'
2431 && PT < ZV
2432 && FETCH_CHAR (PT_BYTE) == '/')
2434 del_range (prompt_end_charpos, PT + 1);
2436 else
2437 del_range (prompt_end_charpos, PT);
2439 insert_from_string (completion, 0, 0, i, i_byte, 1);
2440 return Qt;
2443 DEFUN ("display-completion-list", Fdisplay_completion_list, Sdisplay_completion_list,
2444 1, 2, 0,
2445 doc: /* Display the list of completions, COMPLETIONS, using `standard-output'.
2446 Each element may be just a symbol or string
2447 or may be a list of two strings to be printed as if concatenated.
2448 If it is a list of two strings, the first is the actual completion
2449 alternative, the second serves as annotation.
2450 `standard-output' must be a buffer.
2451 The actual completion alternatives, as inserted, are given `mouse-face'
2452 properties of `highlight'.
2453 At the end, this runs the normal hook `completion-setup-hook'.
2454 It can find the completion buffer in `standard-output'.
2455 The optional second arg COMMON-SUBSTRING is a string.
2456 It is used to put faces, `completions-first-difference' and
2457 `completions-common-part' on the completion buffer. The
2458 `completions-common-part' face is put on the common substring
2459 specified by COMMON-SUBSTRING. If COMMON-SUBSTRING is nil
2460 and the current buffer is not the minibuffer, the faces are not put.
2461 Internally, COMMON-SUBSTRING is bound to `completion-common-substring'
2462 during running `completion-setup-hook'. */)
2463 (completions, common_substring)
2464 Lisp_Object completions;
2465 Lisp_Object common_substring;
2467 Lisp_Object tail, elt;
2468 register int i;
2469 int column = 0;
2470 struct gcpro gcpro1, gcpro2, gcpro3;
2471 struct buffer *old = current_buffer;
2472 int first = 1;
2474 /* Note that (when it matters) every variable
2475 points to a non-string that is pointed to by COMPLETIONS,
2476 except for ELT. ELT can be pointing to a string
2477 when terpri or Findent_to calls a change hook. */
2478 elt = Qnil;
2479 GCPRO3 (completions, elt, common_substring);
2481 if (BUFFERP (Vstandard_output))
2482 set_buffer_internal (XBUFFER (Vstandard_output));
2484 if (NILP (completions))
2485 write_string ("There are no possible completions of what you have typed.",
2486 -1);
2487 else
2489 write_string ("Possible completions are:", -1);
2490 for (tail = completions, i = 0; CONSP (tail); tail = XCDR (tail), i++)
2492 Lisp_Object tem, string;
2493 int length;
2494 Lisp_Object startpos, endpos;
2496 startpos = Qnil;
2498 elt = XCAR (tail);
2499 if (SYMBOLP (elt))
2500 elt = SYMBOL_NAME (elt);
2501 /* Compute the length of this element. */
2502 if (CONSP (elt))
2504 tem = XCAR (elt);
2505 CHECK_STRING (tem);
2506 length = SCHARS (tem);
2508 tem = Fcar (XCDR (elt));
2509 CHECK_STRING (tem);
2510 length += SCHARS (tem);
2512 else
2514 CHECK_STRING (elt);
2515 length = SCHARS (elt);
2518 /* This does a bad job for narrower than usual windows.
2519 Sadly, the window it will appear in is not known
2520 until after the text has been made. */
2522 if (BUFFERP (Vstandard_output))
2523 XSETINT (startpos, BUF_PT (XBUFFER (Vstandard_output)));
2525 /* If the previous completion was very wide,
2526 or we have two on this line already,
2527 don't put another on the same line. */
2528 if (column > 33 || first
2529 /* If this is really wide, don't put it second on a line. */
2530 || (column > 0 && length > 45))
2532 Fterpri (Qnil);
2533 column = 0;
2535 /* Otherwise advance to column 35. */
2536 else
2538 if (BUFFERP (Vstandard_output))
2540 tem = Findent_to (make_number (35), make_number (2));
2542 column = XINT (tem);
2544 else
2548 write_string (" ", -1);
2549 column++;
2551 while (column < 35);
2555 if (BUFFERP (Vstandard_output))
2557 XSETINT (endpos, BUF_PT (XBUFFER (Vstandard_output)));
2558 Fset_text_properties (startpos, endpos,
2559 Qnil, Vstandard_output);
2562 /* Output this element.
2563 If necessary, convert it to unibyte or to multibyte first. */
2564 if (CONSP (elt))
2565 string = Fcar (elt);
2566 else
2567 string = elt;
2568 if (NILP (current_buffer->enable_multibyte_characters)
2569 && STRING_MULTIBYTE (string))
2570 string = Fstring_make_unibyte (string);
2571 else if (!NILP (current_buffer->enable_multibyte_characters)
2572 && !STRING_MULTIBYTE (string))
2573 string = Fstring_make_multibyte (string);
2575 if (BUFFERP (Vstandard_output))
2577 XSETINT (startpos, BUF_PT (XBUFFER (Vstandard_output)));
2579 Fprinc (string, Qnil);
2581 XSETINT (endpos, BUF_PT (XBUFFER (Vstandard_output)));
2583 Fput_text_property (startpos, endpos,
2584 Qmouse_face, intern ("highlight"),
2585 Vstandard_output);
2587 else
2589 Fprinc (string, Qnil);
2592 /* Output the annotation for this element. */
2593 if (CONSP (elt))
2595 if (BUFFERP (Vstandard_output))
2597 XSETINT (startpos, BUF_PT (XBUFFER (Vstandard_output)));
2599 Fprinc (Fcar (Fcdr (elt)), Qnil);
2601 XSETINT (endpos, BUF_PT (XBUFFER (Vstandard_output)));
2603 Fset_text_properties (startpos, endpos, Qnil,
2604 Vstandard_output);
2606 else
2608 Fprinc (Fcar (Fcdr (elt)), Qnil);
2613 /* Update COLUMN for what we have output. */
2614 column += length;
2616 /* If output is to a buffer, recompute COLUMN in a way
2617 that takes account of character widths. */
2618 if (BUFFERP (Vstandard_output))
2620 tem = Fcurrent_column ();
2621 column = XINT (tem);
2624 first = 0;
2628 if (BUFFERP (Vstandard_output))
2629 set_buffer_internal (old);
2631 if (!NILP (Vrun_hooks))
2633 int count1 = SPECPDL_INDEX ();
2635 specbind (intern ("completion-common-substring"), common_substring);
2636 call1 (Vrun_hooks, intern ("completion-setup-hook"));
2638 unbind_to (count1, Qnil);
2641 UNGCPRO;
2643 return Qnil;
2647 static Lisp_Object
2648 display_completion_list_1 (list)
2649 Lisp_Object list;
2651 return Fdisplay_completion_list (list, Qnil);
2654 DEFUN ("minibuffer-completion-help", Fminibuffer_completion_help, Sminibuffer_completion_help,
2655 0, 0, "",
2656 doc: /* Display a list of possible completions of the current minibuffer contents. */)
2659 Lisp_Object completions;
2661 message ("Making completion list...");
2662 completions = Fall_completions (Fminibuffer_completion_contents (),
2663 Vminibuffer_completion_table,
2664 Vminibuffer_completion_predicate,
2665 Qt);
2666 clear_message (1, 0);
2668 if (NILP (completions))
2670 bitch_at_user ();
2671 temp_echo_area_glyphs (build_string (" [No completions]"));
2673 else
2675 /* Sort and remove duplicates. */
2676 Lisp_Object tmp = completions = Fsort (completions, Qstring_lessp);
2677 while (CONSP (tmp))
2679 if (CONSP (XCDR (tmp))
2680 && !NILP (Fequal (XCAR (tmp), XCAR (XCDR (tmp)))))
2681 XSETCDR (tmp, XCDR (XCDR (tmp)));
2682 else
2683 tmp = XCDR (tmp);
2685 internal_with_output_to_temp_buffer ("*Completions*",
2686 display_completion_list_1,
2687 completions);
2689 return Qnil;
2692 DEFUN ("self-insert-and-exit", Fself_insert_and_exit, Sself_insert_and_exit, 0, 0, "",
2693 doc: /* Terminate minibuffer input. */)
2696 if (INTEGERP (last_command_char))
2697 internal_self_insert (XINT (last_command_char), 0);
2698 else
2699 bitch_at_user ();
2701 return Fexit_minibuffer ();
2704 DEFUN ("exit-minibuffer", Fexit_minibuffer, Sexit_minibuffer, 0, 0, "",
2705 doc: /* Terminate this minibuffer argument. */)
2708 /* If the command that uses this has made modifications in the minibuffer,
2709 we don't want them to cause deactivation of the mark in the original
2710 buffer.
2711 A better solution would be to make deactivate-mark buffer-local
2712 (or to turn it into a list of buffers, ...), but in the mean time,
2713 this should do the trick in most cases. */
2714 Vdeactivate_mark = Qnil;
2715 Fthrow (Qexit, Qnil);
2718 DEFUN ("minibuffer-depth", Fminibuffer_depth, Sminibuffer_depth, 0, 0, 0,
2719 doc: /* Return current depth of activations of minibuffer, a nonnegative integer. */)
2722 return make_number (minibuf_level);
2725 DEFUN ("minibuffer-prompt", Fminibuffer_prompt, Sminibuffer_prompt, 0, 0, 0,
2726 doc: /* Return the prompt string of the currently-active minibuffer.
2727 If no minibuffer is active, return nil. */)
2730 return Fcopy_sequence (minibuf_prompt);
2734 /* Temporarily display STRING at the end of the current
2735 minibuffer contents. This is used to display things like
2736 "[No Match]" when the user requests a completion for a prefix
2737 that has no possible completions, and other quick, unobtrusive
2738 messages. */
2740 extern Lisp_Object Vminibuffer_message_timeout;
2742 void
2743 temp_echo_area_glyphs (string)
2744 Lisp_Object string;
2746 int osize = ZV;
2747 int osize_byte = ZV_BYTE;
2748 int opoint = PT;
2749 int opoint_byte = PT_BYTE;
2750 Lisp_Object oinhibit;
2751 oinhibit = Vinhibit_quit;
2753 /* Clear out any old echo-area message to make way for our new thing. */
2754 message (0);
2756 SET_PT_BOTH (osize, osize_byte);
2757 insert_from_string (string, 0, 0, SCHARS (string), SBYTES (string), 0);
2758 SET_PT_BOTH (opoint, opoint_byte);
2759 Vinhibit_quit = Qt;
2761 if (NUMBERP (Vminibuffer_message_timeout))
2762 sit_for (Vminibuffer_message_timeout, 0, 2);
2763 else
2764 sit_for (Qt, 0, 2);
2766 del_range_both (osize, osize_byte, ZV, ZV_BYTE, 1);
2767 SET_PT_BOTH (opoint, opoint_byte);
2768 if (!NILP (Vquit_flag))
2770 Vquit_flag = Qnil;
2771 Vunread_command_events = Fcons (make_number (quit_char), Qnil);
2773 Vinhibit_quit = oinhibit;
2776 DEFUN ("minibuffer-message", Fminibuffer_message, Sminibuffer_message,
2777 1, 1, 0,
2778 doc: /* Temporarily display STRING at the end of the minibuffer.
2779 The text is displayed for a period controlled by `minibuffer-message-timeout',
2780 or until the next input event arrives, whichever comes first. */)
2781 (string)
2782 Lisp_Object string;
2784 CHECK_STRING (string);
2785 temp_echo_area_glyphs (string);
2786 return Qnil;
2789 void
2790 init_minibuf_once ()
2792 Vminibuffer_list = Qnil;
2793 staticpro (&Vminibuffer_list);
2796 void
2797 syms_of_minibuf ()
2799 minibuf_level = 0;
2800 minibuf_prompt = Qnil;
2801 staticpro (&minibuf_prompt);
2803 minibuf_save_list = Qnil;
2804 staticpro (&minibuf_save_list);
2806 Qcompletion_ignore_case = intern ("completion-ignore-case");
2807 staticpro (&Qcompletion_ignore_case);
2809 Qread_file_name_internal = intern ("read-file-name-internal");
2810 staticpro (&Qread_file_name_internal);
2812 Qminibuffer_default = intern ("minibuffer-default");
2813 staticpro (&Qminibuffer_default);
2814 Fset (Qminibuffer_default, Qnil);
2816 Qminibuffer_completion_table = intern ("minibuffer-completion-table");
2817 staticpro (&Qminibuffer_completion_table);
2819 Qminibuffer_completion_confirm = intern ("minibuffer-completion-confirm");
2820 staticpro (&Qminibuffer_completion_confirm);
2822 Qminibuffer_completion_predicate = intern ("minibuffer-completion-predicate");
2823 staticpro (&Qminibuffer_completion_predicate);
2825 staticpro (&last_exact_completion);
2826 last_exact_completion = Qnil;
2828 staticpro (&last_minibuf_string);
2829 last_minibuf_string = Qnil;
2831 Quser_variable_p = intern ("user-variable-p");
2832 staticpro (&Quser_variable_p);
2834 Qminibuffer_history = intern ("minibuffer-history");
2835 staticpro (&Qminibuffer_history);
2837 Qbuffer_name_history = intern ("buffer-name-history");
2838 staticpro (&Qbuffer_name_history);
2839 Fset (Qbuffer_name_history, Qnil);
2841 Qminibuffer_setup_hook = intern ("minibuffer-setup-hook");
2842 staticpro (&Qminibuffer_setup_hook);
2844 Qminibuffer_exit_hook = intern ("minibuffer-exit-hook");
2845 staticpro (&Qminibuffer_exit_hook);
2847 Qhistory_length = intern ("history-length");
2848 staticpro (&Qhistory_length);
2850 Qcurrent_input_method = intern ("current-input-method");
2851 staticpro (&Qcurrent_input_method);
2853 Qactivate_input_method = intern ("activate-input-method");
2854 staticpro (&Qactivate_input_method);
2856 Qcase_fold_search = intern ("case-fold-search");
2857 staticpro (&Qcase_fold_search);
2859 Qread_expression_history = intern ("read-expression-history");
2860 staticpro (&Qread_expression_history);
2862 DEFVAR_LISP ("read-buffer-function", &Vread_buffer_function,
2863 doc: /* If this is non-nil, `read-buffer' does its work by calling this function. */);
2864 Vread_buffer_function = Qnil;
2866 DEFVAR_LISP ("minibuffer-setup-hook", &Vminibuffer_setup_hook,
2867 doc: /* Normal hook run just after entry to minibuffer. */);
2868 Vminibuffer_setup_hook = Qnil;
2870 DEFVAR_LISP ("minibuffer-exit-hook", &Vminibuffer_exit_hook,
2871 doc: /* Normal hook run just after exit from minibuffer. */);
2872 Vminibuffer_exit_hook = Qnil;
2874 DEFVAR_LISP ("history-length", &Vhistory_length,
2875 doc: /* *Maximum length for history lists before truncation takes place.
2876 A number means that length; t means infinite. Truncation takes place
2877 just after a new element is inserted. Setting the `history-length'
2878 property of a history variable overrides this default. */);
2879 XSETFASTINT (Vhistory_length, 30);
2881 DEFVAR_BOOL ("history-delete-duplicates", &history_delete_duplicates,
2882 doc: /* *Non-nil means to delete duplicates in history.
2883 If set to t when adding a new history element, all previous identical
2884 elements are deleted from the history list. */);
2885 history_delete_duplicates = 0;
2887 DEFVAR_LISP ("history-add-new-input", &Vhistory_add_new_input,
2888 doc: /* *Non-nil means to add new elements in history.
2889 If set to nil, minibuffer reading functions don't add new elements to the
2890 history list, so it is possible to do this afterwards by calling
2891 `add-to-history' explicitly. */);
2892 Vhistory_add_new_input = Qt;
2894 DEFVAR_LISP ("completion-auto-help", &Vcompletion_auto_help,
2895 doc: /* *Non-nil means automatically provide help for invalid completion input.
2896 Under Partial Completion mode, a non-nil, non-t value has a special meaning;
2897 see the doc string of `partial-completion-mode' for more details. */);
2898 Vcompletion_auto_help = Qt;
2900 DEFVAR_BOOL ("completion-ignore-case", &completion_ignore_case,
2901 doc: /* Non-nil means don't consider case significant in completion.
2903 For file-name completion, the variable `read-file-name-completion-ignore-case'
2904 controls the behavior, rather than this variable. */);
2905 completion_ignore_case = 0;
2907 DEFVAR_BOOL ("enable-recursive-minibuffers", &enable_recursive_minibuffers,
2908 doc: /* *Non-nil means to allow minibuffer commands while in the minibuffer.
2909 This variable makes a difference whenever the minibuffer window is active. */);
2910 enable_recursive_minibuffers = 0;
2912 DEFVAR_LISP ("minibuffer-completion-table", &Vminibuffer_completion_table,
2913 doc: /* Alist or obarray used for completion in the minibuffer.
2914 This becomes the ALIST argument to `try-completion' and `all-completions'.
2915 The value can also be a list of strings or a hash table.
2917 The value may alternatively be a function, which is given three arguments:
2918 STRING, the current buffer contents;
2919 PREDICATE, the predicate for filtering possible matches;
2920 CODE, which says what kind of things to do.
2921 CODE can be nil, t or `lambda':
2922 nil -- return the best completion of STRING, or nil if there is none.
2923 t -- return a list of all possible completions of STRING.
2924 lambda -- return t if STRING is a valid completion as it stands. */);
2925 Vminibuffer_completion_table = Qnil;
2927 DEFVAR_LISP ("minibuffer-completion-predicate", &Vminibuffer_completion_predicate,
2928 doc: /* Within call to `completing-read', this holds the PREDICATE argument. */);
2929 Vminibuffer_completion_predicate = Qnil;
2931 DEFVAR_LISP ("minibuffer-completion-confirm", &Vminibuffer_completion_confirm,
2932 doc: /* Non-nil means to demand confirmation of completion before exiting minibuffer. */);
2933 Vminibuffer_completion_confirm = Qnil;
2935 DEFVAR_LISP ("minibuffer-completing-file-name",
2936 &Vminibuffer_completing_file_name,
2937 doc: /* Non-nil and non-`lambda' means completing file names. */);
2938 Vminibuffer_completing_file_name = Qnil;
2940 DEFVAR_LISP ("minibuffer-help-form", &Vminibuffer_help_form,
2941 doc: /* Value that `help-form' takes on inside the minibuffer. */);
2942 Vminibuffer_help_form = Qnil;
2944 DEFVAR_LISP ("minibuffer-history-variable", &Vminibuffer_history_variable,
2945 doc: /* History list symbol to add minibuffer values to.
2946 Each string of minibuffer input, as it appears on exit from the minibuffer,
2947 is added with
2948 (set minibuffer-history-variable
2949 (cons STRING (symbol-value minibuffer-history-variable))) */);
2950 XSETFASTINT (Vminibuffer_history_variable, 0);
2952 DEFVAR_LISP ("minibuffer-history-position", &Vminibuffer_history_position,
2953 doc: /* Current position of redoing in the history list. */);
2954 Vminibuffer_history_position = Qnil;
2956 DEFVAR_BOOL ("minibuffer-auto-raise", &minibuffer_auto_raise,
2957 doc: /* *Non-nil means entering the minibuffer raises the minibuffer's frame.
2958 Some uses of the echo area also raise that frame (since they use it too). */);
2959 minibuffer_auto_raise = 0;
2961 DEFVAR_LISP ("completion-regexp-list", &Vcompletion_regexp_list,
2962 doc: /* List of regexps that should restrict possible completions.
2963 The basic completion functions only consider a completion acceptable
2964 if it matches all regular expressions in this list, with
2965 `case-fold-search' bound to the value of `completion-ignore-case'.
2966 See Info node `(elisp)Basic Completion', for a description of these
2967 functions. */);
2968 Vcompletion_regexp_list = Qnil;
2970 DEFVAR_BOOL ("minibuffer-allow-text-properties",
2971 &minibuffer_allow_text_properties,
2972 doc: /* Non-nil means `read-from-minibuffer' should not discard text properties.
2973 This also affects `read-string', but it does not affect `read-minibuffer',
2974 `read-no-blanks-input', or any of the functions that do minibuffer input
2975 with completion; they always discard text properties. */);
2976 minibuffer_allow_text_properties = 0;
2978 DEFVAR_LISP ("minibuffer-prompt-properties", &Vminibuffer_prompt_properties,
2979 doc: /* Text properties that are added to minibuffer prompts.
2980 These are in addition to the basic `field' property, and stickiness
2981 properties. */);
2982 /* We use `intern' here instead of Qread_only to avoid
2983 initialization-order problems. */
2984 Vminibuffer_prompt_properties
2985 = Fcons (intern ("read-only"), Fcons (Qt, Qnil));
2987 DEFVAR_LISP ("read-expression-map", &Vread_expression_map,
2988 doc: /* Minibuffer keymap used for reading Lisp expressions. */);
2989 Vread_expression_map = Qnil;
2991 defsubr (&Sset_minibuffer_window);
2992 defsubr (&Sread_from_minibuffer);
2993 defsubr (&Seval_minibuffer);
2994 defsubr (&Sread_minibuffer);
2995 defsubr (&Sread_string);
2996 defsubr (&Sread_command);
2997 defsubr (&Sread_variable);
2998 defsubr (&Sinternal_complete_buffer);
2999 defsubr (&Sread_buffer);
3000 defsubr (&Sread_no_blanks_input);
3001 defsubr (&Sminibuffer_depth);
3002 defsubr (&Sminibuffer_prompt);
3004 defsubr (&Sminibufferp);
3005 defsubr (&Sminibuffer_prompt_end);
3006 defsubr (&Sminibuffer_contents);
3007 defsubr (&Sminibuffer_contents_no_properties);
3008 defsubr (&Sminibuffer_completion_contents);
3009 defsubr (&Sdelete_minibuffer_contents);
3011 defsubr (&Stry_completion);
3012 defsubr (&Sall_completions);
3013 defsubr (&Stest_completion);
3014 defsubr (&Sassoc_string);
3015 defsubr (&Scompleting_read);
3016 defsubr (&Sminibuffer_complete);
3017 defsubr (&Sminibuffer_complete_word);
3018 defsubr (&Sminibuffer_complete_and_exit);
3019 defsubr (&Sdisplay_completion_list);
3020 defsubr (&Sminibuffer_completion_help);
3022 defsubr (&Sself_insert_and_exit);
3023 defsubr (&Sexit_minibuffer);
3025 defsubr (&Sminibuffer_message);
3028 void
3029 keys_of_minibuf ()
3031 initial_define_key (Vminibuffer_local_map, Ctl ('g'),
3032 "abort-recursive-edit");
3033 initial_define_key (Vminibuffer_local_map, Ctl ('m'),
3034 "exit-minibuffer");
3035 initial_define_key (Vminibuffer_local_map, Ctl ('j'),
3036 "exit-minibuffer");
3038 initial_define_key (Vminibuffer_local_ns_map, ' ',
3039 "exit-minibuffer");
3040 initial_define_key (Vminibuffer_local_ns_map, '\t',
3041 "exit-minibuffer");
3042 initial_define_key (Vminibuffer_local_ns_map, '?',
3043 "self-insert-and-exit");
3045 initial_define_key (Vminibuffer_local_completion_map, '\t',
3046 "minibuffer-complete");
3047 initial_define_key (Vminibuffer_local_completion_map, ' ',
3048 "minibuffer-complete-word");
3049 initial_define_key (Vminibuffer_local_completion_map, '?',
3050 "minibuffer-completion-help");
3052 Fdefine_key (Vminibuffer_local_filename_completion_map,
3053 build_string (" "), Qnil);
3055 initial_define_key (Vminibuffer_local_must_match_map, Ctl ('m'),
3056 "minibuffer-complete-and-exit");
3057 initial_define_key (Vminibuffer_local_must_match_map, Ctl ('j'),
3058 "minibuffer-complete-and-exit");
3060 Fdefine_key (Vminibuffer_local_must_match_filename_map,
3061 build_string (" "), Qnil);
3064 /* arch-tag: 8f69b601-fba3-484c-a6dd-ceaee54a7a73
3065 (do not change this comment) */