Fix bugs with inappropriate mixing of Lisp_Object with int.
[bpt/emacs.git] / src / minibuf.c
1 /* Minibuffer input and completion.
2 Copyright (C) 1985, 1986, 93, 94, 95, 1996 Free Software Foundation, Inc.
3
4 This file is part of GNU Emacs.
5
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.
10
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.
15
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. */
20
21
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"
32
33 #define min(a, b) ((a) < (b) ? (a) : (b))
34
35 extern int quit_char;
36
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;
43
44 /* Data to remember during recursive minibuffer invocations */
45 Lisp_Object minibuf_save_list;
46
47 /* Depth in minibuffer invocations. */
48 int minibuf_level;
49
50 /* Nonzero means display completion help for invalid input. */
51 int auto_help;
52
53 /* The maximum length of a minibuffer history. */
54 Lisp_Object Qhistory_length, Vhistory_length;
55
56 /* Fread_minibuffer leaves the input here as a string. */
57 Lisp_Object last_minibuf_string;
58
59 /* Nonzero means let functions called when within a minibuffer
60 invoke recursive minibuffers (to read arguments, or whatever) */
61 int enable_recursive_minibuffers;
62
63 /* Nonzero means don't ignore text properties
64 in Fread_from_minibuffer. */
65 int minibuffer_allow_text_properties;
66
67 /* help-form is bound to this while in the minibuffer. */
68
69 Lisp_Object Vminibuffer_help_form;
70
71 /* Variable which is the history list to add minibuffer values to. */
72
73 Lisp_Object Vminibuffer_history_variable;
74
75 /* Current position in the history list (adjusted by M-n and M-p). */
76
77 Lisp_Object Vminibuffer_history_position;
78
79 Lisp_Object Qminibuffer_history;
80
81 Lisp_Object Qread_file_name_internal;
82
83 /* Normal hooks for entry to and exit from minibuffer. */
84
85 Lisp_Object Qminibuffer_setup_hook, Vminibuffer_setup_hook;
86 Lisp_Object Qminibuffer_exit_hook, Vminibuffer_exit_hook;
87
88 /* Nonzero means completion ignores case. */
89
90 int completion_ignore_case;
91
92 /* List of regexps that should restrict possible completions. */
93
94 Lisp_Object Vcompletion_regexp_list;
95
96 /* Nonzero means raise the minibuffer frame when the minibuffer
97 is entered. */
98
99 int minibuffer_auto_raise;
100
101 /* If last completion attempt reported "Complete but not unique"
102 then this is the string completed then; otherwise this is nil. */
103
104 static Lisp_Object last_exact_completion;
105
106 Lisp_Object Quser_variable_p;
107
108 Lisp_Object Qminibuffer_default;
109
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;
113
114 extern Lisp_Object Voverriding_local_map;
115 \f
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. */
119
120 void
121 choose_minibuf_frame ()
122 {
123 if (selected_frame != 0
124 && !EQ (minibuf_window, selected_frame->minibuffer_window))
125 {
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 ();
130
131 Fset_window_buffer (selected_frame->minibuffer_window,
132 XWINDOW (minibuf_window)->buffer);
133 minibuf_window = selected_frame->minibuffer_window;
134 }
135
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. */
140 {
141 Lisp_Object tail, frame;
142
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));
148 }
149 }
150
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;
158 {
159 CHECK_WINDOW (window, 1);
160 if (! MINI_WINDOW_P (XWINDOW (window)))
161 error ("Window is not a minibuffer window");
162
163 minibuf_window = window;
164
165 return window;
166 }
167
168 \f
169 /* Actual minibuffer invocation. */
170
171 static void read_minibuf_unwind ();
172 Lisp_Object get_minibuffer ();
173 static Lisp_Object read_minibuf ();
174
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.)
179
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.
185
186 DEFALT specifies te default value for the sake of history commands.
187
188 If ALLOW_PROPS is nonzero, we do not throw away text properties. */
189
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;
201 {
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;
206
207 specbind (Qminibuffer_default, defalt);
208
209 single_kboard_state ();
210
211 val = Qnil;
212 ambient_dir = current_buffer->directory;
213
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);
218
219 if (!STRINGP (prompt))
220 prompt = build_string ("");
221
222 if (!enable_recursive_minibuffers
223 && minibuf_level > 0)
224 {
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"));
231 }
232
233 /* Choose the minibuffer window and frame, and take action on them. */
234
235 choose_minibuf_frame ();
236
237 record_unwind_protect (Fset_window_configuration,
238 Fcurrent_window_configuration (Qnil));
239
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));
246
247 /* If the minibuffer is on an iconified or invisible frame,
248 make it visible now. */
249 Fmake_frame_visible (mini_frame);
250
251 if (minibuffer_auto_raise)
252 Fraise_frame (mini_frame);
253
254 /* We have to do this after saving the window configuration
255 since that is what restores the current buffer. */
256
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))))));
271
272 record_unwind_protect (read_minibuf_unwind, Qnil);
273 minibuf_level++;
274
275 /* Now that we can restore all those variables, start changing them. */
276
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;
282
283 /* Switch to the minibuffer. */
284
285 minibuffer = get_minibuffer (minibuf_level);
286 Fset_buffer (minibuffer);
287
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
299 {
300 Lisp_Object buf_list;
301
302 for (buf_list = Vbuffer_alist;
303 CONSP (buf_list);
304 buf_list = XCONS (buf_list)->cdr)
305 {
306 Lisp_Object other_buf;
307
308 other_buf = XCONS (XCONS (buf_list)->car)->cdr;
309 if (STRINGP (XBUFFER (other_buf)->directory))
310 {
311 current_buffer->directory = XBUFFER (other_buf)->directory;
312 break;
313 }
314 }
315 }
316
317 if (XFRAME (mini_frame) != selected_frame)
318 Fredirect_frame_focus (Fselected_frame (), mini_frame);
319
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);
324
325 Fmake_local_variable (Qprint_escape_newlines);
326 print_escape_newlines = 1;
327
328 /* Erase the buffer. */
329 {
330 int count1 = specpdl_ptr - specpdl;
331 specbind (Qinhibit_read_only, Qt);
332 Ferase_buffer ();
333 unbind_to (count1, Qnil);
334 }
335
336 /* Put in the initial input. */
337 if (!NILP (initial))
338 {
339 Finsert (1, &initial);
340 if (!NILP (backup_n) && INTEGERP (backup_n))
341 Fgoto_char (make_number (PT + XFASTINT (backup_n)));
342 }
343
344 echo_area_glyphs = 0;
345 /* This is in case the minibuffer-setup-hook calls Fsit_for. */
346 previous_echo_glyphs = 0;
347
348 current_buffer->keymap = map;
349
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);
356
357 /* ??? MCC did redraw_screen here if switching screens. */
358 recursive_edit_1 ();
359
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)
365 {
366 FRAME_CURSOR_X (selected_frame)
367 = FRAME_LEFT_SCROLL_BAR_WIDTH (selected_frame);
368 update_frame (selected_frame, 1, 1);
369 }
370
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
377
378 /* VAL is the string of minibuffer text. */
379 last_minibuf_string = val;
380
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))
385 {
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);
390
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)))))
396 {
397 Lisp_Object length;
398
399 histval = Fcons (last_minibuf_string, histval);
400 Fset (Vminibuffer_history_variable, histval);
401
402 /* Truncate if requested. */
403 length = Fget (Vminibuffer_history_variable, Qhistory_length);
404 if (NILP (length)) length = Vhistory_length;
405 if (INTEGERP (length))
406 {
407 if (XINT (length) <= 0)
408 Fset (Vminibuffer_history_variable, Qnil);
409 else
410 {
411 Lisp_Object temp;
412
413 temp = Fnthcdr (Fsub1 (length), histval);
414 if (CONSP (temp)) Fsetcdr (temp, Qnil);
415 }
416 }
417 }
418 }
419
420 /* If Lisp form desired instead of string, parse it. */
421 if (expflag)
422 {
423 Lisp_Object expr_and_pos;
424 unsigned char *p;
425
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);
432 }
433
434 /* The appropriate frame will get selected
435 in set-window-configuration. */
436 RETURN_UNGCPRO (unbind_to (count, val));
437 }
438
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 */
442
443 Lisp_Object
444 get_minibuffer (depth)
445 int depth;
446 {
447 Lisp_Object tail, num, buf;
448 char name[24];
449 extern Lisp_Object nconc2 ();
450
451 XSETFASTINT (num, depth);
452 tail = Fnthcdr (num, Vminibuffer_list);
453 if (NILP (tail))
454 {
455 tail = Fcons (Qnil, Qnil);
456 Vminibuffer_list = nconc2 (Vminibuffer_list, tail);
457 }
458 buf = Fcar (tail);
459 if (NILP (buf) || NILP (XBUFFER (buf)->name))
460 {
461 sprintf (name, " *Minibuf-%d*", depth);
462 buf = Fget_buffer_create (build_string (name));
463
464 /* Although the buffer's name starts with a space, undo should be
465 enabled in it. */
466 Fbuffer_enable_undo (buf);
467
468 XCONS (tail)->car = buf;
469 }
470 else
471 {
472 int count = specpdl_ptr - specpdl;
473
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);
479 }
480
481 return buf;
482 }
483
484 /* This function is called on exiting minibuffer, whether normally or not,
485 and it restores the current window, buffer, etc. */
486
487 static void
488 read_minibuf_unwind (data)
489 Lisp_Object data;
490 {
491 Lisp_Object old_deactivate_mark;
492 Lisp_Object window;
493
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);
499
500 /* If this was a recursive minibuffer,
501 tie the minibuffer window back to the outer level minibuffer buffer. */
502 minibuf_level--;
503
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);
508
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);
530
531 /* Erase the minibuffer we were using at this level. */
532 {
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);
540 }
541
542 /* Make the minibuffer follow the selected frame
543 (in case we are exiting a recursive minibuffer). */
544 choose_minibuf_frame ();
545
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);
550 }
551 \f
552
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.
556
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. */
582
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;
587 {
588 int pos = 0;
589 Lisp_Object histvar, histpos, position, val;
590 struct gcpro gcpro1;
591
592 position = Qnil;
593
594 CHECK_STRING (prompt, 0);
595 if (!NILP (initial_contents))
596 {
597 if (CONSP (initial_contents))
598 {
599 position = Fcdr (initial_contents);
600 initial_contents = Fcar (initial_contents);
601 }
602 CHECK_STRING (initial_contents, 1);
603 if (!NILP (position))
604 {
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;
612 }
613 }
614
615 if (NILP (keymap))
616 keymap = Vminibuffer_local_map;
617 else
618 keymap = get_keymap (keymap,2);
619
620 if (SYMBOLP (hist))
621 {
622 histvar = hist;
623 histpos = Qnil;
624 }
625 else
626 {
627 histvar = Fcar_safe (hist);
628 histpos = Fcdr_safe (hist);
629 }
630 if (NILP (histvar))
631 histvar = Qminibuffer_history;
632 if (NILP (histpos))
633 XSETFASTINT (histpos, 0);
634
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;
644 }
645
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;
652 {
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);
659 }
660
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;
667 {
668 return Feval (Fread_minibuffer (prompt, initial_contents));
669 }
670
671 /* Functions that use the minibuffer to read various things. */
672
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;
681 {
682 return Fread_from_minibuffer (prompt, initial_input, Qnil,
683 Qnil, history, default_value);
684 }
685
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;
691 {
692 CHECK_STRING (prompt, 0);
693 if (! NILP (init))
694 CHECK_STRING (init, 1);
695
696 return read_minibuf (Vminibuffer_local_ns_map, init, prompt, Qnil,
697 0, Qminibuffer_history, make_number (0), Qnil, 0);
698 }
699
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;
705 {
706 return Fintern (Fcompleting_read (prompt, Vobarray, Qcommandp, Qt,
707 Qnil, Qnil, default_value),
708 Qnil);
709 }
710
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;
717 {
718 return Fintern (Fcompleting_read (prompt, Vobarray, Qfboundp, Qt, Qnil, Qnil, Qnil),
719 Qnil);
720 }
721 #endif /* NOTDEF */
722
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;
729 {
730 return Fintern (Fcompleting_read (prompt, Vobarray,
731 Quser_variable_p, Qt,
732 Qnil, Qnil, default_value),
733 Qnil);
734 }
735
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;
743 {
744 Lisp_Object tem;
745 Lisp_Object args[3];
746
747 if (BUFFERP (def))
748 def = XBUFFER (def)->name;
749 if (!NILP (def))
750 {
751 args[0] = build_string ("%s(default %s) ");
752 args[1] = prompt;
753 args[2] = def;
754 prompt = Fformat (3, args);
755 }
756 return Fcompleting_read (prompt, Vbuffer_alist, Qnil,
757 require_match, Qnil, Qnil, def);
758 }
759 \f
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\
767 \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\
770 \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\
774 \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;
782 {
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;
791
792 CHECK_STRING (string, 0);
793 if (!list && !VECTORP (alist))
794 return call3 (alist, string, predicate, Qnil);
795
796 bestmatch = Qnil;
797
798 /* If ALIST is not a list, set TAIL just for gc pro. */
799 tail = alist;
800 if (! list)
801 {
802 index = 0;
803 obsize = XVECTOR (alist)->size;
804 bucket = XVECTOR (alist)->contents[index];
805 }
806
807 while (1)
808 {
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. */
813
814 if (list)
815 {
816 if (NILP (tail))
817 break;
818 elt = Fcar (tail);
819 eltstring = Fcar (elt);
820 tail = Fcdr (tail);
821 }
822 else
823 {
824 if (XFASTINT (bucket) != 0)
825 {
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);
832 }
833 else if (++index >= obsize)
834 break;
835 else
836 {
837 bucket = XVECTOR (alist)->contents[index];
838 continue;
839 }
840 }
841
842 /* Is this element a possible completion? */
843
844 if (STRINGP (eltstring)
845 && XSTRING (string)->size <= XSTRING (eltstring)->size
846 && 0 > scmp (XSTRING (eltstring)->data, XSTRING (string)->data,
847 XSTRING (string)->size))
848 {
849 /* Yes. */
850 Lisp_Object regexps;
851 Lisp_Object zero;
852 XSETFASTINT (zero, 0);
853
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)
857 {
858 tem = Fstring_match (XCONS (regexps)->car, eltstring, zero);
859 if (NILP (tem))
860 break;
861 }
862 if (CONSP (regexps))
863 continue;
864
865 /* Ignore this element if there is a predicate
866 and the predicate doesn't like it. */
867
868 if (!NILP (predicate))
869 {
870 if (EQ (predicate, Qcommandp))
871 tem = Fcommandp (elt);
872 else
873 {
874 GCPRO4 (tail, string, eltstring, bestmatch);
875 tem = call1 (predicate, elt);
876 UNGCPRO;
877 }
878 if (NILP (tem)) continue;
879 }
880
881 /* Update computation of how much all possible completions match */
882
883 matchcount++;
884 if (NILP (bestmatch))
885 bestmatch = eltstring, bestmatchsize = XSTRING (eltstring)->size;
886 else
887 {
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)
895 {
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)
902 ||
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)
910 ==
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;
917 }
918 bestmatchsize = matchsize;
919 }
920 }
921 }
922
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;
931
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;
938
939 XSETFASTINT (zero, 0); /* Else extract the part in which */
940 XSETFASTINT (end, bestmatchsize); /* all completions agree */
941 return Fsubstring (bestmatch, zero, end);
942 }
943
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. */
948
949 int
950 scmp (s1, s2, len)
951 register unsigned char *s1, *s2;
952 int len;
953 {
954 register int l = len;
955 register unsigned char *start = s1;
956
957 if (completion_ignore_case)
958 {
959 while (l && DOWNCASE (*s1++) == DOWNCASE (*s2++))
960 l--;
961 }
962 else
963 {
964 while (l && *s1++ == *s2++)
965 l--;
966 }
967 if (l == 0)
968 return -1;
969 else
970 {
971 int match = len - l;
972
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;
978 }
979 }
980 \f
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\
985 \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\
988 \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\
992 \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\
998 \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;
1004 {
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;
1011
1012 CHECK_STRING (string, 0);
1013 if (!list && !VECTORP (alist))
1014 {
1015 return call3 (alist, string, predicate, Qt);
1016 }
1017 allmatches = Qnil;
1018
1019 /* If ALIST is not a list, set TAIL just for gc pro. */
1020 tail = alist;
1021 if (! list)
1022 {
1023 index = 0;
1024 obsize = XVECTOR (alist)->size;
1025 bucket = XVECTOR (alist)->contents[index];
1026 }
1027
1028 while (1)
1029 {
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. */
1034
1035 if (list)
1036 {
1037 if (NILP (tail))
1038 break;
1039 elt = Fcar (tail);
1040 eltstring = Fcar (elt);
1041 tail = Fcdr (tail);
1042 }
1043 else
1044 {
1045 if (XFASTINT (bucket) != 0)
1046 {
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);
1053 }
1054 else if (++index >= obsize)
1055 break;
1056 else
1057 {
1058 bucket = XVECTOR (alist)->contents[index];
1059 continue;
1060 }
1061 }
1062
1063 /* Is this element a possible completion? */
1064
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))
1074 {
1075 /* Yes. */
1076 Lisp_Object regexps;
1077 Lisp_Object zero;
1078 XSETFASTINT (zero, 0);
1079
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)
1083 {
1084 tem = Fstring_match (XCONS (regexps)->car, eltstring, zero);
1085 if (NILP (tem))
1086 break;
1087 }
1088 if (CONSP (regexps))
1089 continue;
1090
1091 /* Ignore this element if there is a predicate
1092 and the predicate doesn't like it. */
1093
1094 if (!NILP (predicate))
1095 {
1096 if (EQ (predicate, Qcommandp))
1097 tem = Fcommandp (elt);
1098 else
1099 {
1100 GCPRO4 (tail, eltstring, allmatches, string);
1101 tem = call1 (predicate, elt);
1102 UNGCPRO;
1103 }
1104 if (NILP (tem)) continue;
1105 }
1106 /* Ok => put it on the list. */
1107 allmatches = Fcons (eltstring, allmatches);
1108 }
1109 }
1110
1111 return Fnreverse (allmatches);
1112 }
1113 \f
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;
1117
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.
1121
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\
1129 \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\
1135 \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.
1148
1149 Completion ignores case if the ambient value of\n\
1150 `completion-ignore-case' is non-nil."
1151 */
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;
1156 {
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;
1165
1166 position = Qnil;
1167 if (!NILP (init))
1168 {
1169 if (CONSP (init))
1170 {
1171 position = Fcdr (init);
1172 init = Fcar (init);
1173 }
1174 CHECK_STRING (init, 0);
1175 if (!NILP (position))
1176 {
1177 CHECK_NUMBER (position, 0);
1178 /* Convert to distance from end of input. */
1179 pos = XINT (position) - XSTRING (init)->size;
1180 }
1181 }
1182
1183 if (SYMBOLP (hist))
1184 {
1185 histvar = hist;
1186 histpos = Qnil;
1187 }
1188 else
1189 {
1190 histvar = Fcar_safe (hist);
1191 histpos = Fcdr_safe (hist);
1192 }
1193 if (NILP (histvar))
1194 histvar = Qminibuffer_history;
1195 if (NILP (histpos))
1196 XSETFASTINT (histpos, 0);
1197
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);
1206 }
1207 \f
1208 Lisp_Object Fminibuffer_completion_help ();
1209 Lisp_Object assoc_for_completion ();
1210 /* A subroutine of Fintern_soft. */
1211 extern Lisp_Object oblookup ();
1212
1213
1214 /* Test whether TXT is an exact completion. */
1215 Lisp_Object
1216 test_completion (txt)
1217 Lisp_Object txt;
1218 {
1219 Lisp_Object tem;
1220
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))
1225 {
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;
1235 }
1236 else
1237 return call3 (Vminibuffer_completion_table, txt,
1238 Vminibuffer_completion_predicate, Qlambda);
1239 }
1240
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
1248 */
1249 int
1250 do_completion ()
1251 {
1252 Lisp_Object completion, tem;
1253 int completedp;
1254 Lisp_Object last;
1255 struct gcpro gcpro1, gcpro2;
1256
1257 completion = Ftry_completion (Fbuffer_string (), Vminibuffer_completion_table,
1258 Vminibuffer_completion_predicate);
1259 last = last_exact_completion;
1260 last_exact_completion = Qnil;
1261
1262 GCPRO2 (completion, last);
1263
1264 if (NILP (completion))
1265 {
1266 bitch_at_user ();
1267 temp_echo_area_glyphs (" [No match]");
1268 UNGCPRO;
1269 return 0;
1270 }
1271
1272 if (EQ (completion, Qt)) /* exact and unique match */
1273 {
1274 UNGCPRO;
1275 return 1;
1276 }
1277
1278 /* compiler bug */
1279 tem = Fstring_equal (completion, Fbuffer_string());
1280 if (completedp = NILP (tem))
1281 {
1282 Ferase_buffer (); /* Some completion happened */
1283 Finsert (1, &completion);
1284 }
1285
1286 /* It did find a match. Do we match some possibility exactly now? */
1287 tem = test_completion (Fbuffer_string ());
1288 if (NILP (tem))
1289 {
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;
1299 }
1300 else if (completedp)
1301 {
1302 UNGCPRO;
1303 return 4;
1304 }
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))
1310 {
1311 tem = Fbuffer_string ();
1312 if (!NILP (Fequal (tem, last)))
1313 Fminibuffer_completion_help ();
1314 }
1315 UNGCPRO;
1316 return 3;
1317 }
1318
1319 /* Like assoc but assumes KEY is a string, and ignores case if appropriate. */
1320
1321 Lisp_Object
1322 assoc_for_completion (key, list)
1323 register Lisp_Object key;
1324 Lisp_Object list;
1325 {
1326 register Lisp_Object tail;
1327
1328 if (completion_ignore_case)
1329 key = Fupcase (key);
1330
1331 for (tail = list; !NILP (tail); tail = Fcdr (tail))
1332 {
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;
1344 }
1345 return Qnil;
1346 }
1347
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.")
1354 ()
1355 {
1356 register int i;
1357 Lisp_Object window, tem;
1358
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;
1363
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))
1369 {
1370 struct buffer *obuf = current_buffer;
1371
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, BEGV, Qnil);
1377 else
1378 /* Else scroll down one screen. */
1379 Fscroll_other_window (Qnil);
1380
1381 set_buffer_internal (obuf);
1382 return Qnil;
1383 }
1384
1385 i = do_completion ();
1386 switch (i)
1387 {
1388 case 0:
1389 return Qnil;
1390
1391 case 1:
1392 temp_echo_area_glyphs (" [Sole completion]");
1393 break;
1394
1395 case 3:
1396 temp_echo_area_glyphs (" [Complete, but not unique]");
1397 break;
1398 }
1399
1400 return Qt;
1401 }
1402 \f
1403 /* Subroutines of Fminibuffer_complete_and_exit. */
1404
1405 /* This one is called by internal_condition_case to do the real work. */
1406
1407 Lisp_Object
1408 complete_and_exit_1 ()
1409 {
1410 return make_number (do_completion ());
1411 }
1412
1413 /* This one is called by internal_condition_case if an error happens.
1414 Pretend the current value is an exact match. */
1415
1416 Lisp_Object
1417 complete_and_exit_2 (ignore)
1418 Lisp_Object ignore;
1419 {
1420 return make_number (1);
1421 }
1422
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.")
1428 ()
1429 {
1430 register int i;
1431 Lisp_Object val;
1432
1433 /* Allow user to specify null string */
1434 if (BEGV == ZV)
1435 goto exit;
1436
1437 if (!NILP (test_completion (Fbuffer_string ())))
1438 goto exit;
1439
1440 /* Call do_completion, but ignore errors. */
1441 val = internal_condition_case (complete_and_exit_1, Qerror,
1442 complete_and_exit_2);
1443
1444 i = XFASTINT (val);
1445 switch (i)
1446 {
1447 case 1:
1448 case 3:
1449 goto exit;
1450
1451 case 4:
1452 if (!NILP (Vminibuffer_completion_confirm))
1453 {
1454 temp_echo_area_glyphs (" [Confirm]");
1455 return Qnil;
1456 }
1457 else
1458 goto exit;
1459
1460 default:
1461 return Qnil;
1462 }
1463 exit:
1464 Fthrow (Qexit, Qnil);
1465 /* NOTREACHED */
1466 }
1467
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.")
1474 ()
1475 {
1476 Lisp_Object completion, tem;
1477 register int i;
1478 register unsigned char *completion_string;
1479 struct gcpro gcpro1, gcpro2;
1480
1481 /* We keep calling Fbuffer_string rather than arrange for GC to
1482 hold onto a pointer to one of the strings thus made. */
1483
1484 completion = Ftry_completion (Fbuffer_string (),
1485 Vminibuffer_completion_table,
1486 Vminibuffer_completion_predicate);
1487 if (NILP (completion))
1488 {
1489 bitch_at_user ();
1490 temp_echo_area_glyphs (" [No match]");
1491 return Qnil;
1492 }
1493 if (EQ (completion, Qt))
1494 return Qnil;
1495
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))
1503 {
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);
1510 }
1511 #else /* Rewritten code */
1512 {
1513 register unsigned char *buffer_string;
1514 int buffer_length, completion_length;
1515
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))
1522 {
1523 Lisp_Object substituted;
1524 substituted = Fsubstitute_in_file_name (tem);
1525 if (! EQ (substituted, tem))
1526 {
1527 tem = substituted;
1528 Ferase_buffer ();
1529 insert_from_string (tem, 0, XSTRING (tem)->size, 0);
1530 }
1531 }
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))
1540 {
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);
1549 }
1550 UNGCPRO;
1551 }
1552 #endif /* Rewritten code */
1553 i = ZV - BEGV;
1554
1555 /* If completion finds next char not unique,
1556 consider adding a space or a hyphen. */
1557 if (i == XSTRING (completion)->size)
1558 {
1559 GCPRO1 (completion);
1560 tem = Ftry_completion (concat2 (Fbuffer_string (), build_string (" ")),
1561 Vminibuffer_completion_table,
1562 Vminibuffer_completion_predicate);
1563 UNGCPRO;
1564
1565 if (STRINGP (tem))
1566 completion = tem;
1567 else
1568 {
1569 GCPRO1 (completion);
1570 tem =
1571 Ftry_completion (concat2 (Fbuffer_string (), build_string ("-")),
1572 Vminibuffer_completion_table,
1573 Vminibuffer_completion_predicate);
1574 UNGCPRO;
1575
1576 if (STRINGP (tem))
1577 completion = tem;
1578 }
1579 }
1580
1581 /* Now find first word-break in the stuff found by completion.
1582 i gets index in string of where to stop completing. */
1583 {
1584 int len, c;
1585
1586 completion_string = XSTRING (completion)->data;
1587 for (; i < XSTRING (completion)->size; i += len)
1588 {
1589 c = STRING_CHAR_AND_LENGTH (completion_string + i,
1590 XSTRING (completion)->size - i,
1591 len);
1592 if (SYNTAX (c) != Sword)
1593 {
1594 i += len;
1595 break;
1596 }
1597 }
1598 }
1599
1600 /* If got no characters, print help for user. */
1601
1602 if (i == ZV - BEGV)
1603 {
1604 if (auto_help)
1605 Fminibuffer_completion_help ();
1606 return Qnil;
1607 }
1608
1609 /* Otherwise insert in minibuffer the chars we got */
1610
1611 Ferase_buffer ();
1612 insert_from_string (completion, 0, i, 1);
1613 return Qt;
1614 }
1615 \f
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;
1626 {
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;
1633
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);
1640
1641 if (BUFFERP (Vstandard_output))
1642 set_buffer_internal (XBUFFER (Vstandard_output));
1643
1644 if (NILP (completions))
1645 write_string ("There are no possible completions of what you have typed.",
1646 -1);
1647 else
1648 {
1649 write_string ("Possible completions are:", -1);
1650 for (tail = completions, i = 0; !NILP (tail); tail = Fcdr (tail), i++)
1651 {
1652 Lisp_Object tem;
1653 int length;
1654 Lisp_Object startpos, endpos;
1655
1656 elt = Fcar (tail);
1657 /* Compute the length of this element. */
1658 if (CONSP (elt))
1659 {
1660 tem = XCAR (elt);
1661 CHECK_STRING (tem, 0);
1662 length = XSTRING (tem)->size;
1663
1664 tem = Fcar (XCDR (elt));
1665 CHECK_STRING (tem, 0);
1666 length += XSTRING (tem)->size;
1667 }
1668 else
1669 {
1670 CHECK_STRING (elt, 0);
1671 length = XSTRING (elt)->size;
1672 }
1673
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. */
1677
1678 if (BUFFERP (Vstandard_output))
1679 XSETINT (startpos, BUF_PT (XBUFFER (Vstandard_output)));
1680
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)
1687 {
1688 Fterpri (Qnil);
1689 column = 0;
1690 }
1691 /* Otherwise advance to column 35. */
1692 else
1693 {
1694 if (BUFFERP (Vstandard_output))
1695 {
1696 tem = Findent_to (make_number (35), make_number (2));
1697
1698 column = XINT (tem);
1699 }
1700 else
1701 {
1702 do
1703 {
1704 write_string (" ", -1);
1705 column++;
1706 }
1707 while (column < 35);
1708 }
1709 }
1710
1711 if (BUFFERP (Vstandard_output))
1712 {
1713 XSETINT (endpos, BUF_PT (XBUFFER (Vstandard_output)));
1714 Fset_text_properties (startpos, endpos,
1715 Qnil, Vstandard_output);
1716 }
1717
1718 /* Output this element and update COLUMN. */
1719 if (CONSP (elt))
1720 {
1721 Fprinc (Fcar (elt), Qnil);
1722 Fprinc (Fcar (Fcdr (elt)), Qnil);
1723 }
1724 else
1725 Fprinc (elt, Qnil);
1726
1727 column += length;
1728
1729 /* If output is to a buffer, recompute COLUMN in a way
1730 that takes account of character widths. */
1731 if (BUFFERP (Vstandard_output))
1732 {
1733 tem = Fcurrent_column ();
1734 column = XINT (tem);
1735 }
1736
1737 first = 0;
1738 }
1739 }
1740
1741 UNGCPRO;
1742
1743 if (BUFFERP (Vstandard_output))
1744 set_buffer_internal (old);
1745
1746 if (!NILP (Vrun_hooks))
1747 call1 (Vrun_hooks, intern ("completion-setup-hook"));
1748
1749 return Qnil;
1750 }
1751
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.")
1755 ()
1756 {
1757 Lisp_Object completions;
1758
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;
1765
1766 if (NILP (completions))
1767 {
1768 bitch_at_user ();
1769 temp_echo_area_glyphs (" [No completions]");
1770 }
1771 else
1772 internal_with_output_to_temp_buffer ("*Completions*",
1773 Fdisplay_completion_list,
1774 Fsort (completions, Qstring_lessp));
1775 return Qnil;
1776 }
1777 \f
1778 DEFUN ("self-insert-and-exit", Fself_insert_and_exit, Sself_insert_and_exit, 0, 0, "",
1779 "Terminate minibuffer input.")
1780 ()
1781 {
1782 if (INTEGERP (last_command_char))
1783 internal_self_insert (last_command_char, 0);
1784 else
1785 bitch_at_user ();
1786
1787 Fthrow (Qexit, Qnil);
1788 }
1789
1790 DEFUN ("exit-minibuffer", Fexit_minibuffer, Sexit_minibuffer, 0, 0, "",
1791 "Terminate this minibuffer argument.")
1792 ()
1793 {
1794 Fthrow (Qexit, Qnil);
1795 }
1796
1797 DEFUN ("minibuffer-depth", Fminibuffer_depth, Sminibuffer_depth, 0, 0, 0,
1798 "Return current depth of activations of minibuffer, a nonnegative integer.")
1799 ()
1800 {
1801 return make_number (minibuf_level);
1802 }
1803
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.")
1807 ()
1808 {
1809 return Fcopy_sequence (minibuf_prompt);
1810 }
1811
1812 DEFUN ("minibuffer-prompt-width", Fminibuffer_prompt_width,
1813 Sminibuffer_prompt_width, 0, 0, 0,
1814 "Return the display width of the minibuffer prompt.")
1815 ()
1816 {
1817 Lisp_Object width;
1818 XSETFASTINT (width, minibuf_prompt_width);
1819 return width;
1820 }
1821 \f
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. */
1827
1828 temp_echo_area_glyphs (m)
1829 char *m;
1830 {
1831 int osize = ZV;
1832 int opoint = PT;
1833 Lisp_Object oinhibit;
1834 oinhibit = Vinhibit_quit;
1835
1836 /* Clear out any old echo-area message to make way for our new thing. */
1837 message (0);
1838
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))
1847 {
1848 Vquit_flag = Qnil;
1849 Vunread_command_events = Fcons (make_number (quit_char), Qnil);
1850 }
1851 Vinhibit_quit = oinhibit;
1852 }
1853
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;
1861 {
1862 temp_echo_area_glyphs (XSTRING (string)->data);
1863 return Qnil;
1864 }
1865 \f
1866 init_minibuf_once ()
1867 {
1868 Vminibuffer_list = Qnil;
1869 staticpro (&Vminibuffer_list);
1870 }
1871
1872 syms_of_minibuf ()
1873 {
1874 minibuf_level = 0;
1875 minibuf_prompt = Qnil;
1876 staticpro (&minibuf_prompt);
1877
1878 minibuf_save_list = Qnil;
1879 staticpro (&minibuf_save_list);
1880
1881 Qread_file_name_internal = intern ("read-file-name-internal");
1882 staticpro (&Qread_file_name_internal);
1883
1884 Qminibuffer_default = intern ("minibuffer-default");
1885 staticpro (&Qminibuffer_default);
1886 Fset (Qminibuffer_default, Qnil);
1887
1888 Qminibuffer_completion_table = intern ("minibuffer-completion-table");
1889 staticpro (&Qminibuffer_completion_table);
1890
1891 Qminibuffer_completion_confirm = intern ("minibuffer-completion-confirm");
1892 staticpro (&Qminibuffer_completion_confirm);
1893
1894 Qminibuffer_completion_predicate = intern ("minibuffer-completion-predicate");
1895 staticpro (&Qminibuffer_completion_predicate);
1896
1897 staticpro (&last_exact_completion);
1898 last_exact_completion = Qnil;
1899
1900 staticpro (&last_minibuf_string);
1901 last_minibuf_string = Qnil;
1902
1903 Quser_variable_p = intern ("user-variable-p");
1904 staticpro (&Quser_variable_p);
1905
1906 Qminibuffer_history = intern ("minibuffer-history");
1907 staticpro (&Qminibuffer_history);
1908
1909 Qminibuffer_setup_hook = intern ("minibuffer-setup-hook");
1910 staticpro (&Qminibuffer_setup_hook);
1911
1912 Qminibuffer_exit_hook = intern ("minibuffer-exit-hook");
1913 staticpro (&Qminibuffer_exit_hook);
1914
1915 Qhistory_length = intern ("history-length");
1916 staticpro (&Qhistory_length);
1917
1918 DEFVAR_LISP ("minibuffer-setup-hook", &Vminibuffer_setup_hook,
1919 "Normal hook run just after entry to minibuffer.");
1920 Vminibuffer_setup_hook = Qnil;
1921
1922 DEFVAR_LISP ("minibuffer-exit-hook", &Vminibuffer_exit_hook,
1923 "Normal hook run just after exit from minibuffer.");
1924 Vminibuffer_exit_hook = Qnil;
1925
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);
1932
1933 DEFVAR_BOOL ("completion-auto-help", &auto_help,
1934 "*Non-nil means automatically provide help for invalid completion input.");
1935 auto_help = 1;
1936
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;
1940
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;
1947
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\
1951 \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;
1961
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;
1965
1966 DEFVAR_LISP ("minibuffer-completion-confirm", &Vminibuffer_completion_confirm,
1967 "Non-nil => demand confirmation of completion before exiting minibuffer.");
1968 Vminibuffer_completion_confirm = Qnil;
1969
1970 DEFVAR_LISP ("minibuffer-help-form", &Vminibuffer_help_form,
1971 "Value that `help-form' takes on inside the minibuffer.");
1972 Vminibuffer_help_form = Qnil;
1973
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);
1981
1982 DEFVAR_LISP ("minibuffer-history-position", &Vminibuffer_history_position,
1983 "Current position of redoing in the history list.");
1984 Vminibuffer_history_position = Qnil;
1985
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;
1990
1991 DEFVAR_LISP ("completion-regexp-list", &Vcompletion_regexp_list,
1992 "List of regexps that should restrict possible completions.");
1993 Vcompletion_regexp_list = Qnil;
1994
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;
2002
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);
2015
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);
2024
2025 defsubr (&Sself_insert_and_exit);
2026 defsubr (&Sexit_minibuffer);
2027
2028 defsubr (&Sminibuffer_message);
2029 }
2030
2031 keys_of_minibuf ()
2032 {
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");
2039
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");
2046
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");
2053
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");
2060
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");
2067
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");
2080 }