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