(display_text_line): Handle the case of point being in
[emacs.git] / src / minibuf.c
blob31efe44c3a545ca42df57024b5e72804ef07ef51
1 /* Minibuffer input and completion.
2 Copyright (C) 1985, 1986, 93, 94, 95, 1996 Free Software Foundation, Inc.
4 This file is part of GNU Emacs.
6 GNU Emacs is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
11 GNU Emacs is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with GNU Emacs; see the file COPYING. If not, write to
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. */
22 #include <config.h>
23 #include "lisp.h"
24 #include "commands.h"
25 #include "buffer.h"
26 #include "charset.h"
27 #include "dispextern.h"
28 #include "frame.h"
29 #include "window.h"
30 #include "syntax.h"
31 #include "keyboard.h"
33 #define min(a, b) ((a) < (b) ? (a) : (b))
35 extern int quit_char;
37 /* List of buffers for use as minibuffers.
38 The first element of the list is used for the outermost minibuffer
39 invocation, the next element is used for a recursive minibuffer
40 invocation, etc. The list is extended at the end as deeper
41 minibuffer recursions are encountered. */
42 Lisp_Object Vminibuffer_list;
44 /* Data to remember during recursive minibuffer invocations */
45 Lisp_Object minibuf_save_list;
47 /* Depth in minibuffer invocations. */
48 int minibuf_level;
50 /* Nonzero means display completion help for invalid input. */
51 int auto_help;
53 /* The maximum length of a minibuffer history. */
54 Lisp_Object Qhistory_length, Vhistory_length;
56 /* Fread_minibuffer leaves the input here as a string. */
57 Lisp_Object last_minibuf_string;
59 /* Nonzero means let functions called when within a minibuffer
60 invoke recursive minibuffers (to read arguments, or whatever) */
61 int enable_recursive_minibuffers;
63 /* Nonzero means don't ignore text properties
64 in Fread_from_minibuffer. */
65 int minibuffer_allow_text_properties;
67 /* help-form is bound to this while in the minibuffer. */
69 Lisp_Object Vminibuffer_help_form;
71 /* Variable which is the history list to add minibuffer values to. */
73 Lisp_Object Vminibuffer_history_variable;
75 /* Current position in the history list (adjusted by M-n and M-p). */
77 Lisp_Object Vminibuffer_history_position;
79 Lisp_Object Qminibuffer_history;
81 Lisp_Object Qread_file_name_internal;
83 /* Normal hooks for entry to and exit from minibuffer. */
85 Lisp_Object Qminibuffer_setup_hook, Vminibuffer_setup_hook;
86 Lisp_Object Qminibuffer_exit_hook, Vminibuffer_exit_hook;
88 /* Nonzero means completion ignores case. */
90 int completion_ignore_case;
92 /* List of regexps that should restrict possible completions. */
94 Lisp_Object Vcompletion_regexp_list;
96 /* Nonzero means raise the minibuffer frame when the minibuffer
97 is entered. */
99 int minibuffer_auto_raise;
101 /* If last completion attempt reported "Complete but not unique"
102 then this is the string completed then; otherwise this is nil. */
104 static Lisp_Object last_exact_completion;
106 Lisp_Object Quser_variable_p;
108 Lisp_Object Qminibuffer_default;
110 /* Non-nil means it is the window for C-M-v to scroll
111 when the minibuffer is selected. */
112 extern Lisp_Object Vminibuf_scroll_window;
114 extern Lisp_Object Voverriding_local_map;
116 /* Put minibuf on currently selected frame's minibuffer.
117 We do this whenever the user starts a new minibuffer
118 or when a minibuffer exits. */
120 void
121 choose_minibuf_frame ()
123 if (selected_frame != 0
124 && !EQ (minibuf_window, selected_frame->minibuffer_window))
126 /* I don't think that any frames may validly have a null minibuffer
127 window anymore. */
128 if (NILP (selected_frame->minibuffer_window))
129 abort ();
131 Fset_window_buffer (selected_frame->minibuffer_window,
132 XWINDOW (minibuf_window)->buffer);
133 minibuf_window = selected_frame->minibuffer_window;
136 /* Make sure no other frame has a minibuffer as its selected window,
137 because the text would not be displayed in it, and that would be
138 confusing. Only allow the selected frame to do this,
139 and that only if the minibuffer is active. */
141 Lisp_Object tail, frame;
143 FOR_EACH_FRAME (tail, frame)
144 if (MINI_WINDOW_P (XWINDOW (FRAME_SELECTED_WINDOW (XFRAME (frame))))
145 && !(XFRAME (frame) == selected_frame
146 && minibuf_level > 0))
147 Fset_frame_selected_window (frame, Fframe_first_window (frame));
151 DEFUN ("set-minibuffer-window", Fset_minibuffer_window,
152 Sset_minibuffer_window, 1, 1, 0,
153 "Specify which minibuffer window to use for the minibuffer.\n\
154 This effects where the minibuffer is displayed if you put text in it\n\
155 without invoking the usual minibuffer commands.")
156 (window)
157 Lisp_Object window;
159 CHECK_WINDOW (window, 1);
160 if (! MINI_WINDOW_P (XWINDOW (window)))
161 error ("Window is not a minibuffer window");
163 minibuf_window = window;
165 return window;
169 /* Actual minibuffer invocation. */
171 static void read_minibuf_unwind ();
172 Lisp_Object get_minibuffer ();
173 static Lisp_Object read_minibuf ();
175 /* Read from the minibuffer using keymap MAP, initial contents INITIAL
176 (a string), putting point minus BACKUP_N chars from the end of INITIAL,
177 prompting with PROMPT (a string), using history list HISTVAR
178 with initial position HISTPOS. (BACKUP_N should be <= 0.)
180 Normally return the result as a string (the text that was read),
181 but if EXPFLAG is nonzero, read it and return the object read.
182 If HISTVAR is given, save the value read on that history only if it doesn't
183 match the front of that history list exactly. The value is pushed onto
184 the list as the string that was read.
186 DEFALT specifies te default value for the sake of history commands.
188 If ALLOW_PROPS is nonzero, we do not throw away text properties. */
190 static Lisp_Object
191 read_minibuf (map, initial, prompt, backup_n, expflag,
192 histvar, histpos, defalt, allow_props)
193 Lisp_Object map;
194 Lisp_Object initial;
195 Lisp_Object prompt;
196 Lisp_Object backup_n;
197 int expflag;
198 Lisp_Object histvar;
199 Lisp_Object histpos;
200 Lisp_Object defalt;
202 Lisp_Object val;
203 int count = specpdl_ptr - specpdl;
204 Lisp_Object mini_frame, ambient_dir, minibuffer;
205 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
207 specbind (Qminibuffer_default, defalt);
209 single_kboard_state ();
211 val = Qnil;
212 ambient_dir = current_buffer->directory;
214 /* Don't need to protect PROMPT, HISTVAR, and HISTPOS because we
215 store them away before we can GC. Don't need to protect
216 BACKUP_N because we use the value only if it is an integer. */
217 GCPRO4 (map, initial, val, ambient_dir);
219 if (!STRINGP (prompt))
220 prompt = build_string ("");
222 if (!enable_recursive_minibuffers
223 && minibuf_level > 0)
225 if (EQ (selected_window, minibuf_window))
226 error ("Command attempted to use minibuffer while in minibuffer");
227 else
228 /* If we're in another window, cancel the minibuffer that's active. */
229 Fthrow (Qexit,
230 build_string ("Command attempted to use minibuffer while in minibuffer"));
233 /* Choose the minibuffer window and frame, and take action on them. */
235 choose_minibuf_frame ();
237 record_unwind_protect (Fset_window_configuration,
238 Fcurrent_window_configuration (Qnil));
240 /* If the minibuffer window is on a different frame, save that
241 frame's configuration too. */
242 mini_frame = WINDOW_FRAME (XWINDOW (minibuf_window));
243 if (XFRAME (mini_frame) != selected_frame)
244 record_unwind_protect (Fset_window_configuration,
245 Fcurrent_window_configuration (mini_frame));
247 /* If the minibuffer is on an iconified or invisible frame,
248 make it visible now. */
249 Fmake_frame_visible (mini_frame);
251 if (minibuffer_auto_raise)
252 Fraise_frame (mini_frame);
254 /* We have to do this after saving the window configuration
255 since that is what restores the current buffer. */
257 /* Arrange to restore a number of minibuffer-related variables.
258 We could bind each variable separately, but that would use lots of
259 specpdl slots. */
260 minibuf_save_list
261 = Fcons (Voverriding_local_map,
262 Fcons (minibuf_window, minibuf_save_list));
263 minibuf_save_list
264 = Fcons (minibuf_prompt,
265 Fcons (make_number (minibuf_prompt_width),
266 Fcons (Vhelp_form,
267 Fcons (Vcurrent_prefix_arg,
268 Fcons (Vminibuffer_history_position,
269 Fcons (Vminibuffer_history_variable,
270 minibuf_save_list))))));
272 record_unwind_protect (read_minibuf_unwind, Qnil);
273 minibuf_level++;
275 /* Now that we can restore all those variables, start changing them. */
277 minibuf_prompt_width = 0; /* xdisp.c puts in the right value. */
278 minibuf_prompt = Fcopy_sequence (prompt);
279 Vminibuffer_history_position = histpos;
280 Vminibuffer_history_variable = histvar;
281 Vhelp_form = Vminibuffer_help_form;
283 /* Switch to the minibuffer. */
285 minibuffer = get_minibuffer (minibuf_level);
286 Fset_buffer (minibuffer);
288 /* The current buffer's default directory is usually the right thing
289 for our minibuffer here. However, if you're typing a command at
290 a minibuffer-only frame when minibuf_level is zero, then buf IS
291 the current_buffer, so reset_buffer leaves buf's default
292 directory unchanged. This is a bummer when you've just started
293 up Emacs and buf's default directory is Qnil. Here's a hack; can
294 you think of something better to do? Find another buffer with a
295 better directory, and use that one instead. */
296 if (STRINGP (ambient_dir))
297 current_buffer->directory = ambient_dir;
298 else
300 Lisp_Object buf_list;
302 for (buf_list = Vbuffer_alist;
303 CONSP (buf_list);
304 buf_list = XCONS (buf_list)->cdr)
306 Lisp_Object other_buf;
308 other_buf = XCONS (XCONS (buf_list)->car)->cdr;
309 if (STRINGP (XBUFFER (other_buf)->directory))
311 current_buffer->directory = XBUFFER (other_buf)->directory;
312 break;
317 if (XFRAME (mini_frame) != selected_frame)
318 Fredirect_frame_focus (Fselected_frame (), mini_frame);
320 Vminibuf_scroll_window = selected_window;
321 Fset_window_buffer (minibuf_window, Fcurrent_buffer ());
322 Fselect_window (minibuf_window);
323 XSETFASTINT (XWINDOW (minibuf_window)->hscroll, 0);
325 Fmake_local_variable (Qprint_escape_newlines);
326 print_escape_newlines = 1;
328 /* Erase the buffer. */
330 int count1 = specpdl_ptr - specpdl;
331 specbind (Qinhibit_read_only, Qt);
332 Ferase_buffer ();
333 unbind_to (count1, Qnil);
336 /* Put in the initial input. */
337 if (!NILP (initial))
339 Finsert (1, &initial);
340 if (!NILP (backup_n) && INTEGERP (backup_n))
341 Fgoto_char (make_number (PT + XFASTINT (backup_n)));
344 echo_area_glyphs = 0;
345 /* This is in case the minibuffer-setup-hook calls Fsit_for. */
346 previous_echo_glyphs = 0;
348 current_buffer->keymap = map;
350 /* Run our hook, but not if it is empty.
351 (run-hooks would do nothing if it is empty,
352 but it's important to save time here in the usual case). */
353 if (!NILP (Vminibuffer_setup_hook) && !EQ (Vminibuffer_setup_hook, Qunbound)
354 && !NILP (Vrun_hooks))
355 call1 (Vrun_hooks, Qminibuffer_setup_hook);
357 /* ??? MCC did redraw_screen here if switching screens. */
358 recursive_edit_1 ();
360 /* If cursor is on the minibuffer line,
361 show the user we have exited by putting it in column 0. */
362 if ((FRAME_CURSOR_Y (selected_frame)
363 >= XFASTINT (XWINDOW (minibuf_window)->top))
364 && !noninteractive)
366 FRAME_CURSOR_X (selected_frame)
367 = FRAME_LEFT_SCROLL_BAR_WIDTH (selected_frame);
368 update_frame (selected_frame, 1, 1);
371 /* Make minibuffer contents into a string. */
372 Fset_buffer (minibuffer);
373 val = make_buffer_string (1, Z, allow_props);
374 #if 0 /* make_buffer_string should handle the gap. */
375 bcopy (GAP_END_ADDR, XSTRING (val)->data + GPT - BEG, Z - GPT);
376 #endif
378 /* VAL is the string of minibuffer text. */
379 last_minibuf_string = val;
381 /* Add the value to the appropriate history list unless it is empty. */
382 if (XSTRING (val)->size != 0
383 && SYMBOLP (Vminibuffer_history_variable)
384 && ! EQ (XSYMBOL (Vminibuffer_history_variable)->value, Qunbound))
386 /* If the caller wanted to save the value read on a history list,
387 then do so if the value is not already the front of the list. */
388 Lisp_Object histval;
389 histval = Fsymbol_value (Vminibuffer_history_variable);
391 /* The value of the history variable must be a cons or nil. Other
392 values are unacceptable. We silently ignore these values. */
393 if (NILP (histval)
394 || (CONSP (histval)
395 && NILP (Fequal (last_minibuf_string, Fcar (histval)))))
397 Lisp_Object length;
399 histval = Fcons (last_minibuf_string, histval);
400 Fset (Vminibuffer_history_variable, histval);
402 /* Truncate if requested. */
403 length = Fget (Vminibuffer_history_variable, Qhistory_length);
404 if (NILP (length)) length = Vhistory_length;
405 if (INTEGERP (length))
407 if (XINT (length) <= 0)
408 Fset (Vminibuffer_history_variable, Qnil);
409 else
411 Lisp_Object temp;
413 temp = Fnthcdr (Fsub1 (length), histval);
414 if (CONSP (temp)) Fsetcdr (temp, Qnil);
420 /* If Lisp form desired instead of string, parse it. */
421 if (expflag)
423 Lisp_Object expr_and_pos;
424 unsigned char *p;
426 expr_and_pos = Fread_from_string (val, Qnil, Qnil);
427 /* Ignore trailing whitespace; any other trailing junk is an error. */
428 for (p = XSTRING (val)->data + XINT (Fcdr (expr_and_pos)); *p; p++)
429 if (*p != ' ' && *p != '\t' && *p != '\n')
430 error ("Trailing garbage following expression");
431 val = Fcar (expr_and_pos);
434 /* The appropriate frame will get selected
435 in set-window-configuration. */
436 RETURN_UNGCPRO (unbind_to (count, val));
439 /* Return a buffer to be used as the minibuffer at depth `depth'.
440 depth = 0 is the lowest allowed argument, and that is the value
441 used for nonrecursive minibuffer invocations */
443 Lisp_Object
444 get_minibuffer (depth)
445 int depth;
447 Lisp_Object tail, num, buf;
448 char name[24];
449 extern Lisp_Object nconc2 ();
451 XSETFASTINT (num, depth);
452 tail = Fnthcdr (num, Vminibuffer_list);
453 if (NILP (tail))
455 tail = Fcons (Qnil, Qnil);
456 Vminibuffer_list = nconc2 (Vminibuffer_list, tail);
458 buf = Fcar (tail);
459 if (NILP (buf) || NILP (XBUFFER (buf)->name))
461 sprintf (name, " *Minibuf-%d*", depth);
462 buf = Fget_buffer_create (build_string (name));
464 /* Although the buffer's name starts with a space, undo should be
465 enabled in it. */
466 Fbuffer_enable_undo (buf);
468 XCONS (tail)->car = buf;
470 else
472 int count = specpdl_ptr - specpdl;
474 reset_buffer (XBUFFER (buf));
475 record_unwind_protect (Fset_buffer, Fcurrent_buffer ());
476 Fset_buffer (buf);
477 Fkill_all_local_variables ();
478 unbind_to (count, Qnil);
481 return buf;
484 /* This function is called on exiting minibuffer, whether normally or not,
485 and it restores the current window, buffer, etc. */
487 static void
488 read_minibuf_unwind (data)
489 Lisp_Object data;
491 Lisp_Object old_deactivate_mark;
492 Lisp_Object window;
494 /* We are exiting the minibuffer one way or the other,
495 so run the hook. */
496 if (!NILP (Vminibuffer_exit_hook) && !EQ (Vminibuffer_exit_hook, Qunbound)
497 && !NILP (Vrun_hooks))
498 safe_run_hooks (Qminibuffer_exit_hook);
500 /* If this was a recursive minibuffer,
501 tie the minibuffer window back to the outer level minibuffer buffer. */
502 minibuf_level--;
504 window = minibuf_window;
505 /* To keep things predictable, in case it matters, let's be in the minibuffer
506 when we reset the relevant variables. */
507 Fset_buffer (XWINDOW (window)->buffer);
509 /* Restore prompt, etc, from outer minibuffer level. */
510 minibuf_prompt = Fcar (minibuf_save_list);
511 minibuf_save_list = Fcdr (minibuf_save_list);
512 minibuf_prompt_width = XFASTINT (Fcar (minibuf_save_list));
513 minibuf_save_list = Fcdr (minibuf_save_list);
514 Vhelp_form = Fcar (minibuf_save_list);
515 minibuf_save_list = Fcdr (minibuf_save_list);
516 Vcurrent_prefix_arg = Fcar (minibuf_save_list);
517 minibuf_save_list = Fcdr (minibuf_save_list);
518 Vminibuffer_history_position = Fcar (minibuf_save_list);
519 minibuf_save_list = Fcdr (minibuf_save_list);
520 Vminibuffer_history_variable = Fcar (minibuf_save_list);
521 minibuf_save_list = Fcdr (minibuf_save_list);
522 Voverriding_local_map = Fcar (minibuf_save_list);
523 minibuf_save_list = Fcdr (minibuf_save_list);
524 #if 0
525 temp = Fcar (minibuf_save_list);
526 if (FRAME_LIVE_P (XFRAME (WINDOW_FRAME (XWINDOW (temp)))))
527 minibuf_window = temp;
528 #endif
529 minibuf_save_list = Fcdr (minibuf_save_list);
531 /* Erase the minibuffer we were using at this level. */
533 int count = specpdl_ptr - specpdl;
534 /* Prevent error in erase-buffer. */
535 specbind (Qinhibit_read_only, Qt);
536 old_deactivate_mark = Vdeactivate_mark;
537 Ferase_buffer ();
538 Vdeactivate_mark = old_deactivate_mark;
539 unbind_to (count, Qnil);
542 /* Make the minibuffer follow the selected frame
543 (in case we are exiting a recursive minibuffer). */
544 choose_minibuf_frame ();
546 /* Make sure minibuffer window is erased, not ignored. */
547 windows_or_buffers_changed++;
548 XSETFASTINT (XWINDOW (window)->last_modified, 0);
549 XSETFASTINT (XWINDOW (window)->last_overlay_modified, 0);
553 /* This comment supplies the doc string for read-from-minibuffer,
554 for make-docfile to see. We cannot put this in the real DEFUN
555 due to limits in the Unix cpp.
557 DEFUN ("read-from-minibuffer", Fread_from_minibuffer, Sread_from_minibuffer, 1, 6, 0,
558 "Read a string from the minibuffer, prompting with string PROMPT.\n\
559 If optional second arg INITIAL-CONTENTS is non-nil, it is a string\n\
560 to be inserted into the minibuffer before reading input.\n\
561 If INITIAL-CONTENTS is (STRING . POSITION), the initial input\n\
562 is STRING, but point is placed at position POSITION in the minibuffer.\n\
563 Third arg KEYMAP is a keymap to use whilst reading;\n\
564 if omitted or nil, the default is `minibuffer-local-map'.\n\
565 If fourth arg READ is non-nil, then interpret the result as a lisp object\n\
566 and return that object:\n\
567 in other words, do `(car (read-from-string INPUT-STRING))'\n\
568 Fifth arg HIST, if non-nil, specifies a history list\n\
569 and optionally the initial position in the list.\n\
570 It can be a symbol, which is the history list variable to use,\n\
571 or it can be a cons cell (HISTVAR . HISTPOS).\n\
572 In that case, HISTVAR is the history list variable to use,\n\
573 and HISTPOS is the initial position (the position in the list\n\
574 which INITIAL-CONTENTS corresponds to).\n\
575 Positions are counted starting from 1 at the beginning of the list.\n\
576 Sixth arg DEFAULT-VALUE is the default value. If non-nil, it is used\n\
577 for history commands, and as the value to return if the user enters\n\
578 the empty string.\n\
579 If the variable `minibuffer-allow-text-properties is non-nil,\n\
580 then the string which is returned includes whatever text properties\n\
581 were present in the minibuffer. Otherwise the value has no text properties. */
583 DEFUN ("read-from-minibuffer", Fread_from_minibuffer, Sread_from_minibuffer, 1, 6, 0,
584 0 /* See immediately above */)
585 (prompt, initial_contents, keymap, read, hist, default_value)
586 Lisp_Object prompt, initial_contents, keymap, read, hist, default_value;
588 int pos = 0;
589 Lisp_Object histvar, histpos, position, val;
590 struct gcpro gcpro1;
592 position = Qnil;
594 CHECK_STRING (prompt, 0);
595 if (!NILP (initial_contents))
597 if (CONSP (initial_contents))
599 position = Fcdr (initial_contents);
600 initial_contents = Fcar (initial_contents);
602 CHECK_STRING (initial_contents, 1);
603 if (!NILP (position))
605 CHECK_NUMBER (position, 0);
606 /* Convert to distance from end of input. */
607 if (XINT (position) < 1)
608 /* A number too small means the beginning of the string. */
609 pos = - XSTRING (initial_contents)->size;
610 else
611 pos = XINT (position) - 1 - XSTRING (initial_contents)->size;
615 if (NILP (keymap))
616 keymap = Vminibuffer_local_map;
617 else
618 keymap = get_keymap (keymap);
620 if (SYMBOLP (hist))
622 histvar = hist;
623 histpos = Qnil;
625 else
627 histvar = Fcar_safe (hist);
628 histpos = Fcdr_safe (hist);
630 if (NILP (histvar))
631 histvar = Qminibuffer_history;
632 if (NILP (histpos))
633 XSETFASTINT (histpos, 0);
635 GCPRO1 (default_value);
636 val = read_minibuf (keymap, initial_contents, prompt,
637 make_number (pos), !NILP (read),
638 histvar, histpos, default_value,
639 minibuffer_allow_text_properties);
640 if (STRINGP (val) && XSTRING (val)->size == 0 && ! NILP (default_value))
641 val = default_value;
642 UNGCPRO;
643 return val;
646 DEFUN ("read-minibuffer", Fread_minibuffer, Sread_minibuffer, 1, 2, 0,
647 "Return a Lisp object read using the minibuffer.\n\
648 Prompt with PROMPT. If non-nil, optional second arg INITIAL-CONTENTS\n\
649 is a string to insert in the minibuffer before reading.")
650 (prompt, initial_contents)
651 Lisp_Object prompt, initial_contents;
653 CHECK_STRING (prompt, 0);
654 if (!NILP (initial_contents))
655 CHECK_STRING (initial_contents, 1);
656 return read_minibuf (Vminibuffer_local_map, initial_contents,
657 prompt, Qnil, 1, Qminibuffer_history,
658 make_number (0), Qnil, 0);
661 DEFUN ("eval-minibuffer", Feval_minibuffer, Seval_minibuffer, 1, 2, 0,
662 "Return value of Lisp expression read using the minibuffer.\n\
663 Prompt with PROMPT. If non-nil, optional second arg INITIAL-CONTENTS\n\
664 is a string to insert in the minibuffer before reading.")
665 (prompt, initial_contents)
666 Lisp_Object prompt, initial_contents;
668 return Feval (Fread_minibuffer (prompt, initial_contents));
671 /* Functions that use the minibuffer to read various things. */
673 DEFUN ("read-string", Fread_string, Sread_string, 1, 4, 0,
674 "Read a string from the minibuffer, prompting with string PROMPT.\n\
675 If non-nil, second arg INITIAL-INPUT is a string to insert before reading.\n\
676 The third arg HISTORY, if non-nil, specifies a history list\n\
677 and optionally the initial position in the list.\n\
678 See `read-from-minibuffer' for details of HISTORY argument.")
679 (prompt, initial_input, history, default_value)
680 Lisp_Object prompt, initial_input, history, default_value;
682 return Fread_from_minibuffer (prompt, initial_input, Qnil,
683 Qnil, history, default_value);
686 DEFUN ("read-no-blanks-input", Fread_no_blanks_input, Sread_no_blanks_input, 1, 2, 0,
687 "Args PROMPT and INIT, strings. Read a string from the terminal, not allowing blanks.\n\
688 Prompt with PROMPT, and provide INIT as an initial value of the input string.")
689 (prompt, init)
690 Lisp_Object prompt, init;
692 CHECK_STRING (prompt, 0);
693 if (! NILP (init))
694 CHECK_STRING (init, 1);
696 return read_minibuf (Vminibuffer_local_ns_map, init, prompt, Qnil,
697 0, Qminibuffer_history, make_number (0), Qnil, 0);
700 DEFUN ("read-command", Fread_command, Sread_command, 1, 2, 0,
701 "Read the name of a command and return as a symbol.\n\
702 Prompts with PROMPT. By default, return DEFAULT-VALUE.")
703 (prompt, default_value)
704 Lisp_Object prompt, default_value;
706 return Fintern (Fcompleting_read (prompt, Vobarray, Qcommandp, Qt,
707 Qnil, Qnil, default_value),
708 Qnil);
711 #ifdef NOTDEF
712 DEFUN ("read-function", Fread_function, Sread_function, 1, 1, 0,
713 "One arg PROMPT, a string. Read the name of a function and return as a symbol.\n\
714 Prompts with PROMPT.")
715 (prompt)
716 Lisp_Object prompt;
718 return Fintern (Fcompleting_read (prompt, Vobarray, Qfboundp, Qt, Qnil, Qnil, Qnil),
719 Qnil);
721 #endif /* NOTDEF */
723 DEFUN ("read-variable", Fread_variable, Sread_variable, 1, 2, 0,
724 "Read the name of a user variable and return it as a symbol.\n\
725 Prompts with PROMPT. By default, return DEFAULT-VALUE.\n\
726 A user variable is one whose documentation starts with a `*' character.")
727 (prompt, default_value)
728 Lisp_Object prompt, default_value;
730 return Fintern (Fcompleting_read (prompt, Vobarray,
731 Quser_variable_p, Qt,
732 Qnil, Qnil, default_value),
733 Qnil);
736 DEFUN ("read-buffer", Fread_buffer, Sread_buffer, 1, 3, 0,
737 "One arg PROMPT, a string. Read the name of a buffer and return as a string.\n\
738 Prompts with PROMPT.\n\
739 Optional second arg DEF is value to return if user enters an empty line.\n\
740 If optional third arg REQUIRE-MATCH is non-nil, only existing buffer names are allowed.")
741 (prompt, def, require_match)
742 Lisp_Object prompt, def, require_match;
744 Lisp_Object tem;
745 Lisp_Object args[3];
747 if (BUFFERP (def))
748 def = XBUFFER (def)->name;
749 if (!NILP (def))
751 args[0] = build_string ("%s(default %s) ");
752 args[1] = prompt;
753 args[2] = def;
754 prompt = Fformat (3, args);
756 return Fcompleting_read (prompt, Vbuffer_alist, Qnil,
757 require_match, Qnil, Qnil, def);
760 DEFUN ("try-completion", Ftry_completion, Stry_completion, 2, 3, 0,
761 "Return common substring of all completions of STRING in ALIST.\n\
762 Each car of each element of ALIST is tested to see if it begins with STRING.\n\
763 All that match are compared together; the longest initial sequence\n\
764 common to all matches is returned as a string.\n\
765 If there is no match at all, nil is returned.\n\
766 For an exact match, t is returned.\n\
768 ALIST can be an obarray instead of an alist.\n\
769 Then the print names of all symbols in the obarray are the possible matches.\n\
771 ALIST can also be a function to do the completion itself.\n\
772 It receives three arguments: the values STRING, PREDICATE and nil.\n\
773 Whatever it returns becomes the value of `try-completion'.\n\
775 If optional third argument PREDICATE is non-nil,\n\
776 it is used to test each possible match.\n\
777 The match is a candidate only if PREDICATE returns non-nil.\n\
778 The argument given to PREDICATE is the alist element\n\
779 or the symbol from the obarray.")
780 (string, alist, predicate)
781 Lisp_Object string, alist, predicate;
783 Lisp_Object bestmatch, tail, elt, eltstring;
784 int bestmatchsize;
785 int compare, matchsize;
786 int list = CONSP (alist) || NILP (alist);
787 int index, obsize;
788 int matchcount = 0;
789 Lisp_Object bucket, zero, end, tem;
790 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
792 CHECK_STRING (string, 0);
793 if (!list && !VECTORP (alist))
794 return call3 (alist, string, predicate, Qnil);
796 bestmatch = Qnil;
798 /* If ALIST is not a list, set TAIL just for gc pro. */
799 tail = alist;
800 if (! list)
802 index = 0;
803 obsize = XVECTOR (alist)->size;
804 bucket = XVECTOR (alist)->contents[index];
807 while (1)
809 /* Get the next element of the alist or obarray. */
810 /* Exit the loop if the elements are all used up. */
811 /* elt gets the alist element or symbol.
812 eltstring gets the name to check as a completion. */
814 if (list)
816 if (NILP (tail))
817 break;
818 elt = Fcar (tail);
819 eltstring = Fcar (elt);
820 tail = Fcdr (tail);
822 else
824 if (XFASTINT (bucket) != 0)
826 elt = bucket;
827 eltstring = Fsymbol_name (elt);
828 if (XSYMBOL (bucket)->next)
829 XSETSYMBOL (bucket, XSYMBOL (bucket)->next);
830 else
831 XSETFASTINT (bucket, 0);
833 else if (++index >= obsize)
834 break;
835 else
837 bucket = XVECTOR (alist)->contents[index];
838 continue;
842 /* Is this element a possible completion? */
844 if (STRINGP (eltstring)
845 && XSTRING (string)->size <= XSTRING (eltstring)->size
846 && 0 > scmp (XSTRING (eltstring)->data, XSTRING (string)->data,
847 XSTRING (string)->size))
849 /* Yes. */
850 Lisp_Object regexps;
851 Lisp_Object zero;
852 XSETFASTINT (zero, 0);
854 /* Ignore this element if it fails to match all the regexps. */
855 for (regexps = Vcompletion_regexp_list; CONSP (regexps);
856 regexps = XCONS (regexps)->cdr)
858 tem = Fstring_match (XCONS (regexps)->car, eltstring, zero);
859 if (NILP (tem))
860 break;
862 if (CONSP (regexps))
863 continue;
865 /* Ignore this element if there is a predicate
866 and the predicate doesn't like it. */
868 if (!NILP (predicate))
870 if (EQ (predicate, Qcommandp))
871 tem = Fcommandp (elt);
872 else
874 GCPRO4 (tail, string, eltstring, bestmatch);
875 tem = call1 (predicate, elt);
876 UNGCPRO;
878 if (NILP (tem)) continue;
881 /* Update computation of how much all possible completions match */
883 matchcount++;
884 if (NILP (bestmatch))
885 bestmatch = eltstring, bestmatchsize = XSTRING (eltstring)->size;
886 else
888 compare = min (bestmatchsize, XSTRING (eltstring)->size);
889 matchsize = scmp (XSTRING (bestmatch)->data,
890 XSTRING (eltstring)->data,
891 compare);
892 if (matchsize < 0)
893 matchsize = compare;
894 if (completion_ignore_case)
896 /* If this is an exact match except for case,
897 use it as the best match rather than one that is not an
898 exact match. This way, we get the case pattern
899 of the actual match. */
900 if ((matchsize == XSTRING (eltstring)->size
901 && matchsize < XSTRING (bestmatch)->size)
903 /* If there is more than one exact match ignoring case,
904 and one of them is exact including case,
905 prefer that one. */
906 /* If there is no exact match ignoring case,
907 prefer a match that does not change the case
908 of the input. */
909 ((matchsize == XSTRING (eltstring)->size)
911 (matchsize == XSTRING (bestmatch)->size)
912 && !bcmp (XSTRING (eltstring)->data,
913 XSTRING (string)->data, XSTRING (string)->size)
914 && bcmp (XSTRING (bestmatch)->data,
915 XSTRING (string)->data, XSTRING (string)->size)))
916 bestmatch = eltstring;
918 bestmatchsize = matchsize;
923 if (NILP (bestmatch))
924 return Qnil; /* No completions found */
925 /* If we are ignoring case, and there is no exact match,
926 and no additional text was supplied,
927 don't change the case of what the user typed. */
928 if (completion_ignore_case && bestmatchsize == XSTRING (string)->size
929 && XSTRING (bestmatch)->size > bestmatchsize)
930 return string;
932 /* Return t if the supplied string is an exact match (counting case);
933 it does not require any change to be made. */
934 if (matchcount == 1 && bestmatchsize == XSTRING (string)->size
935 && !bcmp (XSTRING (bestmatch)->data, XSTRING (string)->data,
936 bestmatchsize))
937 return Qt;
939 XSETFASTINT (zero, 0); /* Else extract the part in which */
940 XSETFASTINT (end, bestmatchsize); /* all completions agree */
941 return Fsubstring (bestmatch, zero, end);
944 /* Compare exactly LEN chars of strings at S1 and S2,
945 ignoring case if appropriate.
946 Return -1 if strings match,
947 else number of chars that match at the beginning. */
950 scmp (s1, s2, len)
951 register unsigned char *s1, *s2;
952 int len;
954 register int l = len;
955 register unsigned char *start = s1;
957 if (completion_ignore_case)
959 while (l && DOWNCASE (*s1++) == DOWNCASE (*s2++))
960 l--;
962 else
964 while (l && *s1++ == *s2++)
965 l--;
967 if (l == 0)
968 return -1;
969 else
971 int match = len - l;
973 /* Now *--S1 is the unmatching byte. If it is in the middle of
974 multi-byte form, we must say that the multi-byte character
975 there doesn't match. */
976 while (match && *--s1 >= 0xA0) match--;
977 return match;
981 DEFUN ("all-completions", Fall_completions, Sall_completions, 2, 4, 0,
982 "Search for partial matches to STRING in ALIST.\n\
983 Each car of each element of ALIST is tested to see if it begins with STRING.\n\
984 The value is a list of all the strings from ALIST that match.\n\
986 ALIST can be an obarray instead of an alist.\n\
987 Then the print names of all symbols in the obarray are the possible matches.\n\
989 ALIST can also be a function to do the completion itself.\n\
990 It receives three arguments: the values STRING, PREDICATE and t.\n\
991 Whatever it returns becomes the value of `all-completion'.\n\
993 If optional third argument PREDICATE is non-nil,\n\
994 it is used to test each possible match.\n\
995 The match is a candidate only if PREDICATE returns non-nil.\n\
996 The argument given to PREDICATE is the alist element\n\
997 or the symbol from the obarray.\n\
999 If the optional fourth argument HIDE-SPACES is non-nil,\n\
1000 strings in ALIST that start with a space\n\
1001 are ignored unless STRING itself starts with a space.")
1002 (string, alist, predicate, hide_spaces)
1003 Lisp_Object string, alist, predicate, hide_spaces;
1005 Lisp_Object tail, elt, eltstring;
1006 Lisp_Object allmatches;
1007 int list = CONSP (alist) || NILP (alist);
1008 int index, obsize;
1009 Lisp_Object bucket, tem;
1010 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
1012 CHECK_STRING (string, 0);
1013 if (!list && !VECTORP (alist))
1015 return call3 (alist, string, predicate, Qt);
1017 allmatches = Qnil;
1019 /* If ALIST is not a list, set TAIL just for gc pro. */
1020 tail = alist;
1021 if (! list)
1023 index = 0;
1024 obsize = XVECTOR (alist)->size;
1025 bucket = XVECTOR (alist)->contents[index];
1028 while (1)
1030 /* Get the next element of the alist or obarray. */
1031 /* Exit the loop if the elements are all used up. */
1032 /* elt gets the alist element or symbol.
1033 eltstring gets the name to check as a completion. */
1035 if (list)
1037 if (NILP (tail))
1038 break;
1039 elt = Fcar (tail);
1040 eltstring = Fcar (elt);
1041 tail = Fcdr (tail);
1043 else
1045 if (XFASTINT (bucket) != 0)
1047 elt = bucket;
1048 eltstring = Fsymbol_name (elt);
1049 if (XSYMBOL (bucket)->next)
1050 XSETSYMBOL (bucket, XSYMBOL (bucket)->next);
1051 else
1052 XSETFASTINT (bucket, 0);
1054 else if (++index >= obsize)
1055 break;
1056 else
1058 bucket = XVECTOR (alist)->contents[index];
1059 continue;
1063 /* Is this element a possible completion? */
1065 if (STRINGP (eltstring)
1066 && XSTRING (string)->size <= XSTRING (eltstring)->size
1067 /* If HIDE_SPACES, reject alternatives that start with space
1068 unless the input starts with space. */
1069 && ((XSTRING (string)->size > 0 && XSTRING (string)->data[0] == ' ')
1070 || XSTRING (eltstring)->data[0] != ' '
1071 || NILP (hide_spaces))
1072 && 0 > scmp (XSTRING (eltstring)->data, XSTRING (string)->data,
1073 XSTRING (string)->size))
1075 /* Yes. */
1076 Lisp_Object regexps;
1077 Lisp_Object zero;
1078 XSETFASTINT (zero, 0);
1080 /* Ignore this element if it fails to match all the regexps. */
1081 for (regexps = Vcompletion_regexp_list; CONSP (regexps);
1082 regexps = XCONS (regexps)->cdr)
1084 tem = Fstring_match (XCONS (regexps)->car, eltstring, zero);
1085 if (NILP (tem))
1086 break;
1088 if (CONSP (regexps))
1089 continue;
1091 /* Ignore this element if there is a predicate
1092 and the predicate doesn't like it. */
1094 if (!NILP (predicate))
1096 if (EQ (predicate, Qcommandp))
1097 tem = Fcommandp (elt);
1098 else
1100 GCPRO4 (tail, eltstring, allmatches, string);
1101 tem = call1 (predicate, elt);
1102 UNGCPRO;
1104 if (NILP (tem)) continue;
1106 /* Ok => put it on the list. */
1107 allmatches = Fcons (eltstring, allmatches);
1111 return Fnreverse (allmatches);
1114 Lisp_Object Vminibuffer_completion_table, Qminibuffer_completion_table;
1115 Lisp_Object Vminibuffer_completion_predicate, Qminibuffer_completion_predicate;
1116 Lisp_Object Vminibuffer_completion_confirm, Qminibuffer_completion_confirm;
1118 /* This comment supplies the doc string for completing-read,
1119 for make-docfile to see. We cannot put this in the real DEFUN
1120 due to limits in the Unix cpp.
1122 DEFUN ("completing-read", Fcompleting_read, Scompleting_read, 2, 7, 0,
1123 "Read a string in the minibuffer, with completion.\n\
1124 PROMPT is a string to prompt with; normally it ends in a colon and a space.\n\
1125 TABLE is an alist whose elements' cars are strings, or an obarray.\n\
1126 PREDICATE limits completion to a subset of TABLE.\n\
1127 See `try-completion' and `all-completions' for more details
1128 on completion, TABLE, and PREDICATE.\n\
1130 If REQUIRE-MATCH is non-nil, the user is not allowed to exit unless\n\
1131 the input is (or completes to) an element of TABLE or is null.\n\
1132 If it is also not t, Return does not exit if it does non-null completion.\n\
1133 If the input is null, `completing-read' returns an empty string,\n\
1134 regardless of the value of REQUIRE-MATCH.\n\
1136 If INITIAL-INPUT is non-nil, insert it in the minibuffer initially.\n\
1137 If it is (STRING . POSITION), the initial input\n\
1138 is STRING, but point is placed POSITION characters into the string.\n\
1139 HIST, if non-nil, specifies a history list\n\
1140 and optionally the initial position in the list.\n\
1141 It can be a symbol, which is the history list variable to use,\n\
1142 or it can be a cons cell (HISTVAR . HISTPOS).\n\
1143 In that case, HISTVAR is the history list variable to use,\n\
1144 and HISTPOS is the initial position (the position in the list\n\
1145 which INITIAL-CONTENTS corresponds to).\n\
1146 Positions are counted starting from 1 at the beginning of the list.\n\
1147 DEF, if non-nil, is the default value.
1149 Completion ignores case if the ambient value of\n\
1150 `completion-ignore-case' is non-nil."
1152 DEFUN ("completing-read", Fcompleting_read, Scompleting_read, 2, 7, 0,
1153 0 /* See immediately above */)
1154 (prompt, table, predicate, require_match, init, hist, def)
1155 Lisp_Object prompt, table, predicate, require_match, init, hist, def;
1157 Lisp_Object val, histvar, histpos, position;
1158 int pos = 0;
1159 int count = specpdl_ptr - specpdl;
1160 specbind (Qminibuffer_completion_table, table);
1161 specbind (Qminibuffer_completion_predicate, predicate);
1162 specbind (Qminibuffer_completion_confirm,
1163 EQ (require_match, Qt) ? Qnil : Qt);
1164 last_exact_completion = Qnil;
1166 position = Qnil;
1167 if (!NILP (init))
1169 if (CONSP (init))
1171 position = Fcdr (init);
1172 init = Fcar (init);
1174 CHECK_STRING (init, 0);
1175 if (!NILP (position))
1177 CHECK_NUMBER (position, 0);
1178 /* Convert to distance from end of input. */
1179 pos = XINT (position) - XSTRING (init)->size;
1183 if (SYMBOLP (hist))
1185 histvar = hist;
1186 histpos = Qnil;
1188 else
1190 histvar = Fcar_safe (hist);
1191 histpos = Fcdr_safe (hist);
1193 if (NILP (histvar))
1194 histvar = Qminibuffer_history;
1195 if (NILP (histpos))
1196 XSETFASTINT (histpos, 0);
1198 val = read_minibuf (NILP (require_match)
1199 ? Vminibuffer_local_completion_map
1200 : Vminibuffer_local_must_match_map,
1201 init, prompt, make_number (pos), 0,
1202 histvar, histpos, def, 0);
1203 if (STRINGP (val) && XSTRING (val)->size == 0 && ! NILP (def))
1204 val = def;
1205 return unbind_to (count, val);
1208 Lisp_Object Fminibuffer_completion_help ();
1209 Lisp_Object assoc_for_completion ();
1210 /* A subroutine of Fintern_soft. */
1211 extern Lisp_Object oblookup ();
1214 /* Test whether TXT is an exact completion. */
1215 Lisp_Object
1216 test_completion (txt)
1217 Lisp_Object txt;
1219 Lisp_Object tem;
1221 if (CONSP (Vminibuffer_completion_table)
1222 || NILP (Vminibuffer_completion_table))
1223 return assoc_for_completion (txt, Vminibuffer_completion_table);
1224 else if (VECTORP (Vminibuffer_completion_table))
1226 /* Bypass intern-soft as that loses for nil */
1227 tem = oblookup (Vminibuffer_completion_table,
1228 XSTRING (txt)->data, XSTRING (txt)->size);
1229 if (!SYMBOLP (tem))
1230 return Qnil;
1231 else if (!NILP (Vminibuffer_completion_predicate))
1232 return call1 (Vminibuffer_completion_predicate, tem);
1233 else
1234 return Qt;
1236 else
1237 return call3 (Vminibuffer_completion_table, txt,
1238 Vminibuffer_completion_predicate, Qlambda);
1241 /* returns:
1242 * 0 no possible completion
1243 * 1 was already an exact and unique completion
1244 * 3 was already an exact completion
1245 * 4 completed to an exact completion
1246 * 5 some completion happened
1247 * 6 no completion happened
1250 do_completion ()
1252 Lisp_Object completion, tem;
1253 int completedp;
1254 Lisp_Object last;
1255 struct gcpro gcpro1, gcpro2;
1257 completion = Ftry_completion (Fbuffer_string (), Vminibuffer_completion_table,
1258 Vminibuffer_completion_predicate);
1259 last = last_exact_completion;
1260 last_exact_completion = Qnil;
1262 GCPRO2 (completion, last);
1264 if (NILP (completion))
1266 bitch_at_user ();
1267 temp_echo_area_glyphs (" [No match]");
1268 UNGCPRO;
1269 return 0;
1272 if (EQ (completion, Qt)) /* exact and unique match */
1274 UNGCPRO;
1275 return 1;
1278 /* compiler bug */
1279 tem = Fstring_equal (completion, Fbuffer_string());
1280 if (completedp = NILP (tem))
1282 Ferase_buffer (); /* Some completion happened */
1283 Finsert (1, &completion);
1286 /* It did find a match. Do we match some possibility exactly now? */
1287 tem = test_completion (Fbuffer_string ());
1288 if (NILP (tem))
1290 /* not an exact match */
1291 UNGCPRO;
1292 if (completedp)
1293 return 5;
1294 else if (auto_help)
1295 Fminibuffer_completion_help ();
1296 else
1297 temp_echo_area_glyphs (" [Next char not unique]");
1298 return 6;
1300 else if (completedp)
1302 UNGCPRO;
1303 return 4;
1305 /* If the last exact completion and this one were the same,
1306 it means we've already given a "Complete but not unique"
1307 message and the user's hit TAB again, so now we give him help. */
1308 last_exact_completion = completion;
1309 if (!NILP (last))
1311 tem = Fbuffer_string ();
1312 if (!NILP (Fequal (tem, last)))
1313 Fminibuffer_completion_help ();
1315 UNGCPRO;
1316 return 3;
1319 /* Like assoc but assumes KEY is a string, and ignores case if appropriate. */
1321 Lisp_Object
1322 assoc_for_completion (key, list)
1323 register Lisp_Object key;
1324 Lisp_Object list;
1326 register Lisp_Object tail;
1328 if (completion_ignore_case)
1329 key = Fupcase (key);
1331 for (tail = list; !NILP (tail); tail = Fcdr (tail))
1333 register Lisp_Object elt, tem, thiscar;
1334 elt = Fcar (tail);
1335 if (!CONSP (elt)) continue;
1336 thiscar = Fcar (elt);
1337 if (!STRINGP (thiscar))
1338 continue;
1339 if (completion_ignore_case)
1340 thiscar = Fupcase (thiscar);
1341 tem = Fequal (thiscar, key);
1342 if (!NILP (tem)) return elt;
1343 QUIT;
1345 return Qnil;
1348 DEFUN ("minibuffer-complete", Fminibuffer_complete, Sminibuffer_complete, 0, 0, "",
1349 "Complete the minibuffer contents as far as possible.\n\
1350 Return nil if there is no valid completion, else t.\n\
1351 If no characters can be completed, display a list of possible completions.\n\
1352 If you repeat this command after it displayed such a list,\n\
1353 scroll the window of possible completions.")
1356 register int i;
1357 Lisp_Object window, tem;
1359 /* If the previous command was not this, then mark the completion
1360 buffer obsolete. */
1361 if (! EQ (current_kboard->Vlast_command, this_command))
1362 Vminibuf_scroll_window = Qnil;
1364 window = Vminibuf_scroll_window;
1365 /* If there's a fresh completion window with a live buffer,
1366 and this command is repeated, scroll that window. */
1367 if (! NILP (window) && ! NILP (XWINDOW (window)->buffer)
1368 && !NILP (XBUFFER (XWINDOW (window)->buffer)->name))
1370 struct buffer *obuf = current_buffer;
1372 Fset_buffer (XWINDOW (window)->buffer);
1373 tem = Fpos_visible_in_window_p (make_number (ZV), window);
1374 if (! NILP (tem))
1375 /* If end is in view, scroll up to the beginning. */
1376 Fset_window_start (window, make_number (BEGV), Qnil);
1377 else
1378 /* Else scroll down one screen. */
1379 Fscroll_other_window (Qnil);
1381 set_buffer_internal (obuf);
1382 return Qnil;
1385 i = do_completion ();
1386 switch (i)
1388 case 0:
1389 return Qnil;
1391 case 1:
1392 temp_echo_area_glyphs (" [Sole completion]");
1393 break;
1395 case 3:
1396 temp_echo_area_glyphs (" [Complete, but not unique]");
1397 break;
1400 return Qt;
1403 /* Subroutines of Fminibuffer_complete_and_exit. */
1405 /* This one is called by internal_condition_case to do the real work. */
1407 Lisp_Object
1408 complete_and_exit_1 ()
1410 return make_number (do_completion ());
1413 /* This one is called by internal_condition_case if an error happens.
1414 Pretend the current value is an exact match. */
1416 Lisp_Object
1417 complete_and_exit_2 (ignore)
1418 Lisp_Object ignore;
1420 return make_number (1);
1423 DEFUN ("minibuffer-complete-and-exit", Fminibuffer_complete_and_exit,
1424 Sminibuffer_complete_and_exit, 0, 0, "",
1425 "If the minibuffer contents is a valid completion then exit.\n\
1426 Otherwise try to complete it. If completion leads to a valid completion,\n\
1427 a repetition of this command will exit.")
1430 register int i;
1431 Lisp_Object val;
1433 /* Allow user to specify null string */
1434 if (BEGV == ZV)
1435 goto exit;
1437 if (!NILP (test_completion (Fbuffer_string ())))
1438 goto exit;
1440 /* Call do_completion, but ignore errors. */
1441 val = internal_condition_case (complete_and_exit_1, Qerror,
1442 complete_and_exit_2);
1444 i = XFASTINT (val);
1445 switch (i)
1447 case 1:
1448 case 3:
1449 goto exit;
1451 case 4:
1452 if (!NILP (Vminibuffer_completion_confirm))
1454 temp_echo_area_glyphs (" [Confirm]");
1455 return Qnil;
1457 else
1458 goto exit;
1460 default:
1461 return Qnil;
1463 exit:
1464 Fthrow (Qexit, Qnil);
1465 /* NOTREACHED */
1468 DEFUN ("minibuffer-complete-word", Fminibuffer_complete_word, Sminibuffer_complete_word,
1469 0, 0, "",
1470 "Complete the minibuffer contents at most a single word.\n\
1471 After one word is completed as much as possible, a space or hyphen\n\
1472 is added, provided that matches some possible completion.\n\
1473 Return nil if there is no valid completion, else t.")
1476 Lisp_Object completion, tem;
1477 register int i;
1478 register unsigned char *completion_string;
1479 struct gcpro gcpro1, gcpro2;
1481 /* We keep calling Fbuffer_string rather than arrange for GC to
1482 hold onto a pointer to one of the strings thus made. */
1484 completion = Ftry_completion (Fbuffer_string (),
1485 Vminibuffer_completion_table,
1486 Vminibuffer_completion_predicate);
1487 if (NILP (completion))
1489 bitch_at_user ();
1490 temp_echo_area_glyphs (" [No match]");
1491 return Qnil;
1493 if (EQ (completion, Qt))
1494 return Qnil;
1496 #if 0 /* How the below code used to look, for reference. */
1497 tem = Fbuffer_string ();
1498 b = XSTRING (tem)->data;
1499 i = ZV - 1 - XSTRING (completion)->size;
1500 p = XSTRING (completion)->data;
1501 if (i > 0 ||
1502 0 <= scmp (b, p, ZV - 1))
1504 i = 1;
1505 /* Set buffer to longest match of buffer tail and completion head. */
1506 while (0 <= scmp (b + i, p, ZV - 1 - i))
1507 i++;
1508 del_range (1, i + 1);
1509 SET_PT (ZV);
1511 #else /* Rewritten code */
1513 register unsigned char *buffer_string;
1514 int buffer_length, completion_length;
1516 CHECK_STRING (completion, 0);
1517 tem = Fbuffer_string ();
1518 GCPRO2 (completion, tem);
1519 /* If reading a file name,
1520 expand any $ENVVAR refs in the buffer and in TEM. */
1521 if (EQ (Vminibuffer_completion_table, Qread_file_name_internal))
1523 Lisp_Object substituted;
1524 substituted = Fsubstitute_in_file_name (tem);
1525 if (! EQ (substituted, tem))
1527 tem = substituted;
1528 Ferase_buffer ();
1529 insert_from_string (tem, 0, XSTRING (tem)->size, 0);
1532 buffer_string = XSTRING (tem)->data;
1533 completion_string = XSTRING (completion)->data;
1534 buffer_length = XSTRING (tem)->size; /* ie ZV - BEGV */
1535 completion_length = XSTRING (completion)->size;
1536 i = buffer_length - completion_length;
1537 /* Mly: I don't understand what this is supposed to do AT ALL */
1538 if (i > 0 ||
1539 0 <= scmp (buffer_string, completion_string, buffer_length))
1541 /* Set buffer to longest match of buffer tail and completion head. */
1542 if (i <= 0) i = 1;
1543 buffer_string += i;
1544 buffer_length -= i;
1545 while (0 <= scmp (buffer_string++, completion_string, buffer_length--))
1546 i++;
1547 del_range (1, i + 1);
1548 SET_PT (ZV);
1550 UNGCPRO;
1552 #endif /* Rewritten code */
1553 i = ZV - BEGV;
1555 /* If completion finds next char not unique,
1556 consider adding a space or a hyphen. */
1557 if (i == XSTRING (completion)->size)
1559 GCPRO1 (completion);
1560 tem = Ftry_completion (concat2 (Fbuffer_string (), build_string (" ")),
1561 Vminibuffer_completion_table,
1562 Vminibuffer_completion_predicate);
1563 UNGCPRO;
1565 if (STRINGP (tem))
1566 completion = tem;
1567 else
1569 GCPRO1 (completion);
1570 tem =
1571 Ftry_completion (concat2 (Fbuffer_string (), build_string ("-")),
1572 Vminibuffer_completion_table,
1573 Vminibuffer_completion_predicate);
1574 UNGCPRO;
1576 if (STRINGP (tem))
1577 completion = tem;
1581 /* Now find first word-break in the stuff found by completion.
1582 i gets index in string of where to stop completing. */
1584 int len, c;
1586 completion_string = XSTRING (completion)->data;
1587 for (; i < XSTRING (completion)->size; i += len)
1589 c = STRING_CHAR_AND_LENGTH (completion_string + i,
1590 XSTRING (completion)->size - i,
1591 len);
1592 if (SYNTAX (c) != Sword)
1594 i += len;
1595 break;
1600 /* If got no characters, print help for user. */
1602 if (i == ZV - BEGV)
1604 if (auto_help)
1605 Fminibuffer_completion_help ();
1606 return Qnil;
1609 /* Otherwise insert in minibuffer the chars we got */
1611 Ferase_buffer ();
1612 insert_from_string (completion, 0, i, 1);
1613 return Qt;
1616 DEFUN ("display-completion-list", Fdisplay_completion_list, Sdisplay_completion_list,
1617 1, 1, 0,
1618 "Display the list of completions, COMPLETIONS, using `standard-output'.\n\
1619 Each element may be just a symbol or string\n\
1620 or may be a list of two strings to be printed as if concatenated.\n\
1621 `standard-output' must be a buffer.\n\
1622 At the end, run the normal hook `completion-setup-hook'.\n\
1623 It can find the completion buffer in `standard-output'.")
1624 (completions)
1625 Lisp_Object completions;
1627 Lisp_Object tail, elt;
1628 register int i;
1629 int column = 0;
1630 struct gcpro gcpro1, gcpro2;
1631 struct buffer *old = current_buffer;
1632 int first = 1;
1634 /* Note that (when it matters) every variable
1635 points to a non-string that is pointed to by COMPLETIONS,
1636 except for ELT. ELT can be pointing to a string
1637 when terpri or Findent_to calls a change hook. */
1638 elt = Qnil;
1639 GCPRO2 (completions, elt);
1641 if (BUFFERP (Vstandard_output))
1642 set_buffer_internal (XBUFFER (Vstandard_output));
1644 if (NILP (completions))
1645 write_string ("There are no possible completions of what you have typed.",
1646 -1);
1647 else
1649 write_string ("Possible completions are:", -1);
1650 for (tail = completions, i = 0; !NILP (tail); tail = Fcdr (tail), i++)
1652 Lisp_Object tem;
1653 int length;
1654 Lisp_Object startpos, endpos;
1656 elt = Fcar (tail);
1657 /* Compute the length of this element. */
1658 if (CONSP (elt))
1660 tem = XCAR (elt);
1661 CHECK_STRING (tem, 0);
1662 length = XSTRING (tem)->size;
1664 tem = Fcar (XCDR (elt));
1665 CHECK_STRING (tem, 0);
1666 length += XSTRING (tem)->size;
1668 else
1670 CHECK_STRING (elt, 0);
1671 length = XSTRING (elt)->size;
1674 /* This does a bad job for narrower than usual windows.
1675 Sadly, the window it will appear in is not known
1676 until after the text has been made. */
1678 if (BUFFERP (Vstandard_output))
1679 XSETINT (startpos, BUF_PT (XBUFFER (Vstandard_output)));
1681 /* If the previous completion was very wide,
1682 or we have two on this line already,
1683 don't put another on the same line. */
1684 if (column > 33 || first
1685 /* If this is really wide, don't put it second on a line. */
1686 || column > 0 && length > 45)
1688 Fterpri (Qnil);
1689 column = 0;
1691 /* Otherwise advance to column 35. */
1692 else
1694 if (BUFFERP (Vstandard_output))
1696 tem = Findent_to (make_number (35), make_number (2));
1698 column = XINT (tem);
1700 else
1704 write_string (" ", -1);
1705 column++;
1707 while (column < 35);
1711 if (BUFFERP (Vstandard_output))
1713 XSETINT (endpos, BUF_PT (XBUFFER (Vstandard_output)));
1714 Fset_text_properties (startpos, endpos,
1715 Qnil, Vstandard_output);
1718 /* Output this element and update COLUMN. */
1719 if (CONSP (elt))
1721 Fprinc (Fcar (elt), Qnil);
1722 Fprinc (Fcar (Fcdr (elt)), Qnil);
1724 else
1725 Fprinc (elt, Qnil);
1727 column += length;
1729 /* If output is to a buffer, recompute COLUMN in a way
1730 that takes account of character widths. */
1731 if (BUFFERP (Vstandard_output))
1733 tem = Fcurrent_column ();
1734 column = XINT (tem);
1737 first = 0;
1741 UNGCPRO;
1743 if (BUFFERP (Vstandard_output))
1744 set_buffer_internal (old);
1746 if (!NILP (Vrun_hooks))
1747 call1 (Vrun_hooks, intern ("completion-setup-hook"));
1749 return Qnil;
1752 DEFUN ("minibuffer-completion-help", Fminibuffer_completion_help, Sminibuffer_completion_help,
1753 0, 0, "",
1754 "Display a list of possible completions of the current minibuffer contents.")
1757 Lisp_Object completions;
1759 message ("Making completion list...");
1760 completions = Fall_completions (Fbuffer_string (),
1761 Vminibuffer_completion_table,
1762 Vminibuffer_completion_predicate,
1763 Qt);
1764 echo_area_glyphs = 0;
1766 if (NILP (completions))
1768 bitch_at_user ();
1769 temp_echo_area_glyphs (" [No completions]");
1771 else
1772 internal_with_output_to_temp_buffer ("*Completions*",
1773 Fdisplay_completion_list,
1774 Fsort (completions, Qstring_lessp));
1775 return Qnil;
1778 DEFUN ("self-insert-and-exit", Fself_insert_and_exit, Sself_insert_and_exit, 0, 0, "",
1779 "Terminate minibuffer input.")
1782 if (INTEGERP (last_command_char))
1783 internal_self_insert (last_command_char, 0);
1784 else
1785 bitch_at_user ();
1787 Fthrow (Qexit, Qnil);
1790 DEFUN ("exit-minibuffer", Fexit_minibuffer, Sexit_minibuffer, 0, 0, "",
1791 "Terminate this minibuffer argument.")
1794 Fthrow (Qexit, Qnil);
1797 DEFUN ("minibuffer-depth", Fminibuffer_depth, Sminibuffer_depth, 0, 0, 0,
1798 "Return current depth of activations of minibuffer, a nonnegative integer.")
1801 return make_number (minibuf_level);
1804 DEFUN ("minibuffer-prompt", Fminibuffer_prompt, Sminibuffer_prompt, 0, 0, 0,
1805 "Return the prompt string of the currently-active minibuffer.\n\
1806 If no minibuffer is active, return nil.")
1809 return Fcopy_sequence (minibuf_prompt);
1812 DEFUN ("minibuffer-prompt-width", Fminibuffer_prompt_width,
1813 Sminibuffer_prompt_width, 0, 0, 0,
1814 "Return the display width of the minibuffer prompt.")
1817 Lisp_Object width;
1818 XSETFASTINT (width, minibuf_prompt_width);
1819 return width;
1822 /* Temporarily display the string M at the end of the current
1823 minibuffer contents. This is used to display things like
1824 "[No Match]" when the user requests a completion for a prefix
1825 that has no possible completions, and other quick, unobtrusive
1826 messages. */
1828 temp_echo_area_glyphs (m)
1829 char *m;
1831 int osize = ZV;
1832 int opoint = PT;
1833 Lisp_Object oinhibit;
1834 oinhibit = Vinhibit_quit;
1836 /* Clear out any old echo-area message to make way for our new thing. */
1837 message (0);
1839 SET_PT (osize);
1840 insert_string (m);
1841 SET_PT (opoint);
1842 Vinhibit_quit = Qt;
1843 Fsit_for (make_number (2), Qnil, Qnil);
1844 del_range (osize, ZV);
1845 SET_PT (opoint);
1846 if (!NILP (Vquit_flag))
1848 Vquit_flag = Qnil;
1849 Vunread_command_events = Fcons (make_number (quit_char), Qnil);
1851 Vinhibit_quit = oinhibit;
1854 DEFUN ("minibuffer-message", Fminibuffer_message, Sminibuffer_message,
1855 1, 1, 0,
1856 "Temporarily display STRING at the end of the minibuffer.\n\
1857 The text is displayed for two seconds,\n\
1858 or until the next input event arrives, whichever comes first.")
1859 (string)
1860 Lisp_Object string;
1862 temp_echo_area_glyphs (XSTRING (string)->data);
1863 return Qnil;
1866 init_minibuf_once ()
1868 Vminibuffer_list = Qnil;
1869 staticpro (&Vminibuffer_list);
1872 syms_of_minibuf ()
1874 minibuf_level = 0;
1875 minibuf_prompt = Qnil;
1876 staticpro (&minibuf_prompt);
1878 minibuf_save_list = Qnil;
1879 staticpro (&minibuf_save_list);
1881 Qread_file_name_internal = intern ("read-file-name-internal");
1882 staticpro (&Qread_file_name_internal);
1884 Qminibuffer_default = intern ("minibuffer-default");
1885 staticpro (&Qminibuffer_default);
1886 Fset (Qminibuffer_default, Qnil);
1888 Qminibuffer_completion_table = intern ("minibuffer-completion-table");
1889 staticpro (&Qminibuffer_completion_table);
1891 Qminibuffer_completion_confirm = intern ("minibuffer-completion-confirm");
1892 staticpro (&Qminibuffer_completion_confirm);
1894 Qminibuffer_completion_predicate = intern ("minibuffer-completion-predicate");
1895 staticpro (&Qminibuffer_completion_predicate);
1897 staticpro (&last_exact_completion);
1898 last_exact_completion = Qnil;
1900 staticpro (&last_minibuf_string);
1901 last_minibuf_string = Qnil;
1903 Quser_variable_p = intern ("user-variable-p");
1904 staticpro (&Quser_variable_p);
1906 Qminibuffer_history = intern ("minibuffer-history");
1907 staticpro (&Qminibuffer_history);
1909 Qminibuffer_setup_hook = intern ("minibuffer-setup-hook");
1910 staticpro (&Qminibuffer_setup_hook);
1912 Qminibuffer_exit_hook = intern ("minibuffer-exit-hook");
1913 staticpro (&Qminibuffer_exit_hook);
1915 Qhistory_length = intern ("history-length");
1916 staticpro (&Qhistory_length);
1918 DEFVAR_LISP ("minibuffer-setup-hook", &Vminibuffer_setup_hook,
1919 "Normal hook run just after entry to minibuffer.");
1920 Vminibuffer_setup_hook = Qnil;
1922 DEFVAR_LISP ("minibuffer-exit-hook", &Vminibuffer_exit_hook,
1923 "Normal hook run just after exit from minibuffer.");
1924 Vminibuffer_exit_hook = Qnil;
1926 DEFVAR_LISP ("history-length", &Vhistory_length,
1927 "*Maximum length for history lists before truncation takes place.\n\
1928 A number means that length; t means infinite. Truncation takes place\n\
1929 just after a new element is inserted. Setting the history-length\n\
1930 property of a history variable overrides this default.");
1931 XSETFASTINT (Vhistory_length, 30);
1933 DEFVAR_BOOL ("completion-auto-help", &auto_help,
1934 "*Non-nil means automatically provide help for invalid completion input.");
1935 auto_help = 1;
1937 DEFVAR_BOOL ("completion-ignore-case", &completion_ignore_case,
1938 "Non-nil means don't consider case significant in completion.");
1939 completion_ignore_case = 0;
1941 DEFVAR_BOOL ("enable-recursive-minibuffers", &enable_recursive_minibuffers,
1942 "*Non-nil means to allow minibuffer commands while in the minibuffer.\n\
1943 More precisely, this variable makes a difference when the minibuffer window\n\
1944 is the selected window. If you are in some other window, minibuffer commands\n\
1945 are allowed even if a minibuffer is active.");
1946 enable_recursive_minibuffers = 0;
1948 DEFVAR_LISP ("minibuffer-completion-table", &Vminibuffer_completion_table,
1949 "Alist or obarray used for completion in the minibuffer.\n\
1950 This becomes the ALIST argument to `try-completion' and `all-completion'.\n\
1952 The value may alternatively be a function, which is given three arguments:\n\
1953 STRING, the current buffer contents;\n\
1954 PREDICATE, the predicate for filtering possible matches;\n\
1955 CODE, which says what kind of things to do.\n\
1956 CODE can be nil, t or `lambda'.\n\
1957 nil means to return the best completion of STRING, or nil if there is none.\n\
1958 t means to return a list of all possible completions of STRING.\n\
1959 `lambda' means to return t if STRING is a valid completion as it stands.");
1960 Vminibuffer_completion_table = Qnil;
1962 DEFVAR_LISP ("minibuffer-completion-predicate", &Vminibuffer_completion_predicate,
1963 "Within call to `completing-read', this holds the PREDICATE argument.");
1964 Vminibuffer_completion_predicate = Qnil;
1966 DEFVAR_LISP ("minibuffer-completion-confirm", &Vminibuffer_completion_confirm,
1967 "Non-nil => demand confirmation of completion before exiting minibuffer.");
1968 Vminibuffer_completion_confirm = Qnil;
1970 DEFVAR_LISP ("minibuffer-help-form", &Vminibuffer_help_form,
1971 "Value that `help-form' takes on inside the minibuffer.");
1972 Vminibuffer_help_form = Qnil;
1974 DEFVAR_LISP ("minibuffer-history-variable", &Vminibuffer_history_variable,
1975 "History list symbol to add minibuffer values to.\n\
1976 Each string of minibuffer input, as it appears on exit from the minibuffer,\n\
1977 is added with\n\
1978 (set minibuffer-history-variable\n\
1979 (cons STRING (symbol-value minibuffer-history-variable)))");
1980 XSETFASTINT (Vminibuffer_history_variable, 0);
1982 DEFVAR_LISP ("minibuffer-history-position", &Vminibuffer_history_position,
1983 "Current position of redoing in the history list.");
1984 Vminibuffer_history_position = Qnil;
1986 DEFVAR_BOOL ("minibuffer-auto-raise", &minibuffer_auto_raise,
1987 "*Non-nil means entering the minibuffer raises the minibuffer's frame.\n\
1988 Some uses of the echo area also raise that frame (since they use it too).");
1989 minibuffer_auto_raise = 0;
1991 DEFVAR_LISP ("completion-regexp-list", &Vcompletion_regexp_list,
1992 "List of regexps that should restrict possible completions.");
1993 Vcompletion_regexp_list = Qnil;
1995 DEFVAR_BOOL ("minibuffer-allow-text-properties",
1996 &minibuffer_allow_text_properties,
1997 "Non-nil means `read-from-miniffer' should not discard text properties.\n\
1998 This also affects `read-string', but it does not affect `read-minibuffer',\n\
1999 `read-no-blanks-input', or any of the functions that do minibuffer input\n\
2000 with completion; they always discard text properties.");
2001 minibuffer_allow_text_properties = 0;
2003 defsubr (&Sset_minibuffer_window);
2004 defsubr (&Sread_from_minibuffer);
2005 defsubr (&Seval_minibuffer);
2006 defsubr (&Sread_minibuffer);
2007 defsubr (&Sread_string);
2008 defsubr (&Sread_command);
2009 defsubr (&Sread_variable);
2010 defsubr (&Sread_buffer);
2011 defsubr (&Sread_no_blanks_input);
2012 defsubr (&Sminibuffer_depth);
2013 defsubr (&Sminibuffer_prompt);
2014 defsubr (&Sminibuffer_prompt_width);
2016 defsubr (&Stry_completion);
2017 defsubr (&Sall_completions);
2018 defsubr (&Scompleting_read);
2019 defsubr (&Sminibuffer_complete);
2020 defsubr (&Sminibuffer_complete_word);
2021 defsubr (&Sminibuffer_complete_and_exit);
2022 defsubr (&Sdisplay_completion_list);
2023 defsubr (&Sminibuffer_completion_help);
2025 defsubr (&Sself_insert_and_exit);
2026 defsubr (&Sexit_minibuffer);
2028 defsubr (&Sminibuffer_message);
2031 keys_of_minibuf ()
2033 initial_define_key (Vminibuffer_local_map, Ctl ('g'),
2034 "abort-recursive-edit");
2035 initial_define_key (Vminibuffer_local_map, Ctl ('m'),
2036 "exit-minibuffer");
2037 initial_define_key (Vminibuffer_local_map, Ctl ('j'),
2038 "exit-minibuffer");
2040 initial_define_key (Vminibuffer_local_ns_map, Ctl ('g'),
2041 "abort-recursive-edit");
2042 initial_define_key (Vminibuffer_local_ns_map, Ctl ('m'),
2043 "exit-minibuffer");
2044 initial_define_key (Vminibuffer_local_ns_map, Ctl ('j'),
2045 "exit-minibuffer");
2047 initial_define_key (Vminibuffer_local_ns_map, ' ',
2048 "exit-minibuffer");
2049 initial_define_key (Vminibuffer_local_ns_map, '\t',
2050 "exit-minibuffer");
2051 initial_define_key (Vminibuffer_local_ns_map, '?',
2052 "self-insert-and-exit");
2054 initial_define_key (Vminibuffer_local_completion_map, Ctl ('g'),
2055 "abort-recursive-edit");
2056 initial_define_key (Vminibuffer_local_completion_map, Ctl ('m'),
2057 "exit-minibuffer");
2058 initial_define_key (Vminibuffer_local_completion_map, Ctl ('j'),
2059 "exit-minibuffer");
2061 initial_define_key (Vminibuffer_local_completion_map, '\t',
2062 "minibuffer-complete");
2063 initial_define_key (Vminibuffer_local_completion_map, ' ',
2064 "minibuffer-complete-word");
2065 initial_define_key (Vminibuffer_local_completion_map, '?',
2066 "minibuffer-completion-help");
2068 initial_define_key (Vminibuffer_local_must_match_map, Ctl ('g'),
2069 "abort-recursive-edit");
2070 initial_define_key (Vminibuffer_local_must_match_map, Ctl ('m'),
2071 "minibuffer-complete-and-exit");
2072 initial_define_key (Vminibuffer_local_must_match_map, Ctl ('j'),
2073 "minibuffer-complete-and-exit");
2074 initial_define_key (Vminibuffer_local_must_match_map, '\t',
2075 "minibuffer-complete");
2076 initial_define_key (Vminibuffer_local_must_match_map, ' ',
2077 "minibuffer-complete-word");
2078 initial_define_key (Vminibuffer_local_must_match_map, '?',
2079 "minibuffer-completion-help");