(High-Level Completion): Explain that the prompt
[bpt/emacs.git] / src / minibuf.c
1 /* Minibuffer input and completion.
2 Copyright (C) 1985, 1986, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002, 2003, 2004, 2005 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., 51 Franklin Street, Fifth Floor,
20 Boston, MA 02110-1301, 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 minibuffer. */)
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 The argument PROMPT should be a string ending with a colon and a space. */)
1137 (prompt, def, require_match)
1138 Lisp_Object prompt, def, require_match;
1139 {
1140 Lisp_Object args[4];
1141 unsigned char *s;
1142 int len;
1143
1144 if (BUFFERP (def))
1145 def = XBUFFER (def)->name;
1146
1147 if (NILP (Vread_buffer_function))
1148 {
1149 if (!NILP (def))
1150 {
1151 /* A default value was provided: we must change PROMPT,
1152 editing the default value in before the colon. To achieve
1153 this, we replace PROMPT with a substring that doesn't
1154 contain the terminal space and colon (if present). They
1155 are then added back using Fformat. */
1156
1157 if (STRINGP (prompt))
1158 {
1159 s = SDATA (prompt);
1160 len = strlen (s);
1161 if (len >= 2 && s[len - 2] == ':' && s[len - 1] == ' ')
1162 len = len - 2;
1163 else if (len >= 1 && (s[len - 1] == ':' || s[len - 1] == ' '))
1164 len--;
1165
1166 prompt = make_specified_string (s, -1, len,
1167 STRING_MULTIBYTE (prompt));
1168 }
1169
1170 args[0] = build_string ("%s (default %s): ");
1171 args[1] = prompt;
1172 args[2] = def;
1173 prompt = Fformat (3, args);
1174 }
1175
1176 return Fcompleting_read (prompt, Vbuffer_alist, Qnil,
1177 require_match, Qnil, Qbuffer_name_history,
1178 def, Qnil);
1179 }
1180 else
1181 {
1182 args[0] = Vread_buffer_function;
1183 args[1] = prompt;
1184 args[2] = def;
1185 args[3] = require_match;
1186 return Ffuncall(4, args);
1187 }
1188 }
1189 \f
1190 static Lisp_Object
1191 minibuf_conform_representation (string, basis)
1192 Lisp_Object string, basis;
1193 {
1194 if (STRING_MULTIBYTE (string) == STRING_MULTIBYTE (basis))
1195 return string;
1196
1197 if (STRING_MULTIBYTE (string))
1198 return Fstring_make_unibyte (string);
1199 else
1200 return Fstring_make_multibyte (string);
1201 }
1202
1203 DEFUN ("try-completion", Ftry_completion, Stry_completion, 2, 3, 0,
1204 doc: /* Return common substring of all completions of STRING in ALIST.
1205 Each car of each element of ALIST (or each element if it is not a cons cell)
1206 is tested to see if it begins with STRING. The possible matches may be
1207 strings or symbols. Symbols are converted to strings before testing,
1208 see `symbol-name'.
1209 All that match are compared together; the longest initial sequence
1210 common to all matches is returned as a string.
1211 If there is no match at all, nil is returned.
1212 For a unique match which is exact, t is returned.
1213
1214 If ALIST is a hash-table, all the string and symbol keys are the
1215 possible matches.
1216 If ALIST is an obarray, the names of all symbols in the obarray
1217 are the possible matches.
1218
1219 ALIST can also be a function to do the completion itself.
1220 It receives three arguments: the values STRING, PREDICATE and nil.
1221 Whatever it returns becomes the value of `try-completion'.
1222
1223 If optional third argument PREDICATE is non-nil,
1224 it is used to test each possible match.
1225 The match is a candidate only if PREDICATE returns non-nil.
1226 The argument given to PREDICATE is the alist element
1227 or the symbol from the obarray. If ALIST is a hash-table,
1228 predicate is called with two arguments: the key and the value.
1229 Additionally to this predicate, `completion-regexp-list'
1230 is used to further constrain the set of candidates. */)
1231 (string, alist, predicate)
1232 Lisp_Object string, alist, predicate;
1233 {
1234 Lisp_Object bestmatch, tail, elt, eltstring;
1235 /* Size in bytes of BESTMATCH. */
1236 int bestmatchsize = 0;
1237 /* These are in bytes, too. */
1238 int compare, matchsize;
1239 int type = HASH_TABLE_P (alist) ? 3
1240 : VECTORP (alist) ? 2
1241 : NILP (alist) || (CONSP (alist)
1242 && (!SYMBOLP (XCAR (alist))
1243 || NILP (XCAR (alist))));
1244 int index = 0, obsize = 0;
1245 int matchcount = 0;
1246 int bindcount = -1;
1247 Lisp_Object bucket, zero, end, tem;
1248 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
1249
1250 CHECK_STRING (string);
1251 if (type == 0)
1252 return call3 (alist, string, predicate, Qnil);
1253
1254 bestmatch = bucket = Qnil;
1255 zero = make_number (0);
1256
1257 /* If ALIST is not a list, set TAIL just for gc pro. */
1258 tail = alist;
1259 if (type == 2)
1260 {
1261 obsize = XVECTOR (alist)->size;
1262 bucket = XVECTOR (alist)->contents[index];
1263 }
1264
1265 while (1)
1266 {
1267 /* Get the next element of the alist, obarray, or hash-table. */
1268 /* Exit the loop if the elements are all used up. */
1269 /* elt gets the alist element or symbol.
1270 eltstring gets the name to check as a completion. */
1271
1272 if (type == 1)
1273 {
1274 if (!CONSP (tail))
1275 break;
1276 elt = XCAR (tail);
1277 eltstring = CONSP (elt) ? XCAR (elt) : elt;
1278 tail = XCDR (tail);
1279 }
1280 else if (type == 2)
1281 {
1282 if (!EQ (bucket, zero))
1283 {
1284 elt = bucket;
1285 eltstring = elt;
1286 if (XSYMBOL (bucket)->next)
1287 XSETSYMBOL (bucket, XSYMBOL (bucket)->next);
1288 else
1289 XSETFASTINT (bucket, 0);
1290 }
1291 else if (++index >= obsize)
1292 break;
1293 else
1294 {
1295 bucket = XVECTOR (alist)->contents[index];
1296 continue;
1297 }
1298 }
1299 else /* if (type == 3) */
1300 {
1301 while (index < HASH_TABLE_SIZE (XHASH_TABLE (alist))
1302 && NILP (HASH_HASH (XHASH_TABLE (alist), index)))
1303 index++;
1304 if (index >= HASH_TABLE_SIZE (XHASH_TABLE (alist)))
1305 break;
1306 else
1307 elt = eltstring = HASH_KEY (XHASH_TABLE (alist), index++);
1308 }
1309
1310 /* Is this element a possible completion? */
1311
1312 if (SYMBOLP (eltstring))
1313 eltstring = Fsymbol_name (eltstring);
1314
1315 if (STRINGP (eltstring)
1316 && SCHARS (string) <= SCHARS (eltstring)
1317 && (tem = Fcompare_strings (eltstring, zero,
1318 make_number (SCHARS (string)),
1319 string, zero, Qnil,
1320 completion_ignore_case ? Qt : Qnil),
1321 EQ (Qt, tem)))
1322 {
1323 /* Yes. */
1324 Lisp_Object regexps;
1325
1326 /* Ignore this element if it fails to match all the regexps. */
1327 {
1328 for (regexps = Vcompletion_regexp_list; CONSP (regexps);
1329 regexps = XCDR (regexps))
1330 {
1331 if (bindcount < 0) {
1332 bindcount = SPECPDL_INDEX ();
1333 specbind (Qcase_fold_search,
1334 completion_ignore_case ? Qt : Qnil);
1335 }
1336 tem = Fstring_match (XCAR (regexps), eltstring, zero);
1337 if (NILP (tem))
1338 break;
1339 }
1340 if (CONSP (regexps))
1341 continue;
1342 }
1343
1344 /* Ignore this element if there is a predicate
1345 and the predicate doesn't like it. */
1346
1347 if (!NILP (predicate))
1348 {
1349 if (EQ (predicate, Qcommandp))
1350 tem = Fcommandp (elt, Qnil);
1351 else
1352 {
1353 if (bindcount >= 0) {
1354 unbind_to (bindcount, Qnil);
1355 bindcount = -1;
1356 }
1357 GCPRO4 (tail, string, eltstring, bestmatch);
1358 tem = type == 3
1359 ? call2 (predicate, elt,
1360 HASH_VALUE (XHASH_TABLE (alist), index - 1))
1361 : call1 (predicate, elt);
1362 UNGCPRO;
1363 }
1364 if (NILP (tem)) continue;
1365 }
1366
1367 /* Update computation of how much all possible completions match */
1368
1369 if (NILP (bestmatch))
1370 {
1371 matchcount = 1;
1372 bestmatch = eltstring;
1373 bestmatchsize = SCHARS (eltstring);
1374 }
1375 else
1376 {
1377 compare = min (bestmatchsize, SCHARS (eltstring));
1378 tem = Fcompare_strings (bestmatch, zero,
1379 make_number (compare),
1380 eltstring, zero,
1381 make_number (compare),
1382 completion_ignore_case ? Qt : Qnil);
1383 if (EQ (tem, Qt))
1384 matchsize = compare;
1385 else if (XINT (tem) < 0)
1386 matchsize = - XINT (tem) - 1;
1387 else
1388 matchsize = XINT (tem) - 1;
1389
1390 if (matchsize < 0)
1391 /* When can this happen ? -stef */
1392 matchsize = compare;
1393 if (completion_ignore_case)
1394 {
1395 /* If this is an exact match except for case,
1396 use it as the best match rather than one that is not an
1397 exact match. This way, we get the case pattern
1398 of the actual match. */
1399 if ((matchsize == SCHARS (eltstring)
1400 && matchsize < SCHARS (bestmatch))
1401 ||
1402 /* If there is more than one exact match ignoring case,
1403 and one of them is exact including case,
1404 prefer that one. */
1405 /* If there is no exact match ignoring case,
1406 prefer a match that does not change the case
1407 of the input. */
1408 ((matchsize == SCHARS (eltstring))
1409 ==
1410 (matchsize == SCHARS (bestmatch))
1411 && (tem = Fcompare_strings (eltstring, zero,
1412 make_number (SCHARS (string)),
1413 string, zero,
1414 Qnil,
1415 Qnil),
1416 EQ (Qt, tem))
1417 && (tem = Fcompare_strings (bestmatch, zero,
1418 make_number (SCHARS (string)),
1419 string, zero,
1420 Qnil,
1421 Qnil),
1422 ! EQ (Qt, tem))))
1423 bestmatch = eltstring;
1424 }
1425 if (bestmatchsize != SCHARS (eltstring)
1426 || bestmatchsize != matchsize)
1427 /* Don't count the same string multiple times. */
1428 matchcount++;
1429 bestmatchsize = matchsize;
1430 if (matchsize <= SCHARS (string)
1431 && matchcount > 1)
1432 /* No need to look any further. */
1433 break;
1434 }
1435 }
1436 }
1437
1438 if (bindcount >= 0) {
1439 unbind_to (bindcount, Qnil);
1440 bindcount = -1;
1441 }
1442
1443 if (NILP (bestmatch))
1444 return Qnil; /* No completions found */
1445 /* If we are ignoring case, and there is no exact match,
1446 and no additional text was supplied,
1447 don't change the case of what the user typed. */
1448 if (completion_ignore_case && bestmatchsize == SCHARS (string)
1449 && SCHARS (bestmatch) > bestmatchsize)
1450 return minibuf_conform_representation (string, bestmatch);
1451
1452 /* Return t if the supplied string is an exact match (counting case);
1453 it does not require any change to be made. */
1454 if (matchcount == 1 && bestmatchsize == SCHARS (string)
1455 && (tem = Fcompare_strings (bestmatch, make_number (0),
1456 make_number (bestmatchsize),
1457 string, make_number (0),
1458 make_number (bestmatchsize),
1459 Qnil),
1460 EQ (Qt, tem)))
1461 return Qt;
1462
1463 XSETFASTINT (zero, 0); /* Else extract the part in which */
1464 XSETFASTINT (end, bestmatchsize); /* all completions agree */
1465 return Fsubstring (bestmatch, zero, end);
1466 }
1467 \f
1468 DEFUN ("all-completions", Fall_completions, Sall_completions, 2, 4, 0,
1469 doc: /* Search for partial matches to STRING in ALIST.
1470 Each car of each element of ALIST (or each element if it is not a cons cell)
1471 is tested to see if it begins with STRING. The possible matches may be
1472 strings or symbols. Symbols are converted to strings before testing,
1473 see `symbol-name'.
1474 The value is a list of all the strings from ALIST that match.
1475
1476 If ALIST is a hash-table, all the string and symbol keys are the
1477 possible matches.
1478 If ALIST is an obarray, the names of all symbols in the obarray
1479 are the possible matches.
1480
1481 ALIST can also be a function to do the completion itself.
1482 It receives three arguments: the values STRING, PREDICATE and t.
1483 Whatever it returns becomes the value of `all-completions'.
1484
1485 If optional third argument PREDICATE is non-nil,
1486 it is used to test each possible match.
1487 The match is a candidate only if PREDICATE returns non-nil.
1488 The argument given to PREDICATE is the alist element
1489 or the symbol from the obarray. If ALIST is a hash-table,
1490 predicate is called with two arguments: the key and the value.
1491 Additionally to this predicate, `completion-regexp-list'
1492 is used to further constrain the set of candidates.
1493
1494 If the optional fourth argument HIDE-SPACES is non-nil,
1495 strings in ALIST that start with a space
1496 are ignored unless STRING itself starts with a space. */)
1497 (string, alist, predicate, hide_spaces)
1498 Lisp_Object string, alist, predicate, hide_spaces;
1499 {
1500 Lisp_Object tail, elt, eltstring;
1501 Lisp_Object allmatches;
1502 int type = HASH_TABLE_P (alist) ? 3
1503 : VECTORP (alist) ? 2
1504 : NILP (alist) || (CONSP (alist)
1505 && (!SYMBOLP (XCAR (alist))
1506 || NILP (XCAR (alist))));
1507 int index = 0, obsize = 0;
1508 int bindcount = -1;
1509 Lisp_Object bucket, tem, zero;
1510 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
1511
1512 CHECK_STRING (string);
1513 if (type == 0)
1514 return call3 (alist, string, predicate, Qt);
1515 allmatches = bucket = Qnil;
1516 zero = make_number (0);
1517
1518 /* If ALIST is not a list, set TAIL just for gc pro. */
1519 tail = alist;
1520 if (type == 2)
1521 {
1522 obsize = XVECTOR (alist)->size;
1523 bucket = XVECTOR (alist)->contents[index];
1524 }
1525
1526 while (1)
1527 {
1528 /* Get the next element of the alist, obarray, or hash-table. */
1529 /* Exit the loop if the elements are all used up. */
1530 /* elt gets the alist element or symbol.
1531 eltstring gets the name to check as a completion. */
1532
1533 if (type == 1)
1534 {
1535 if (!CONSP (tail))
1536 break;
1537 elt = XCAR (tail);
1538 eltstring = CONSP (elt) ? XCAR (elt) : elt;
1539 tail = XCDR (tail);
1540 }
1541 else if (type == 2)
1542 {
1543 if (!EQ (bucket, zero))
1544 {
1545 elt = bucket;
1546 eltstring = elt;
1547 if (XSYMBOL (bucket)->next)
1548 XSETSYMBOL (bucket, XSYMBOL (bucket)->next);
1549 else
1550 XSETFASTINT (bucket, 0);
1551 }
1552 else if (++index >= obsize)
1553 break;
1554 else
1555 {
1556 bucket = XVECTOR (alist)->contents[index];
1557 continue;
1558 }
1559 }
1560 else /* if (type == 3) */
1561 {
1562 while (index < HASH_TABLE_SIZE (XHASH_TABLE (alist))
1563 && NILP (HASH_HASH (XHASH_TABLE (alist), index)))
1564 index++;
1565 if (index >= HASH_TABLE_SIZE (XHASH_TABLE (alist)))
1566 break;
1567 else
1568 elt = eltstring = HASH_KEY (XHASH_TABLE (alist), index++);
1569 }
1570
1571 /* Is this element a possible completion? */
1572
1573 if (SYMBOLP (eltstring))
1574 eltstring = Fsymbol_name (eltstring);
1575
1576 if (STRINGP (eltstring)
1577 && SCHARS (string) <= SCHARS (eltstring)
1578 /* If HIDE_SPACES, reject alternatives that start with space
1579 unless the input starts with space. */
1580 && ((SBYTES (string) > 0
1581 && SREF (string, 0) == ' ')
1582 || SREF (eltstring, 0) != ' '
1583 || NILP (hide_spaces))
1584 && (tem = Fcompare_strings (eltstring, zero,
1585 make_number (SCHARS (string)),
1586 string, zero,
1587 make_number (SCHARS (string)),
1588 completion_ignore_case ? Qt : Qnil),
1589 EQ (Qt, tem)))
1590 {
1591 /* Yes. */
1592 Lisp_Object regexps;
1593 Lisp_Object zero;
1594 XSETFASTINT (zero, 0);
1595
1596 /* Ignore this element if it fails to match all the regexps. */
1597 {
1598 for (regexps = Vcompletion_regexp_list; CONSP (regexps);
1599 regexps = XCDR (regexps))
1600 {
1601 if (bindcount < 0) {
1602 bindcount = SPECPDL_INDEX ();
1603 specbind (Qcase_fold_search,
1604 completion_ignore_case ? Qt : Qnil);
1605 }
1606 tem = Fstring_match (XCAR (regexps), eltstring, zero);
1607 if (NILP (tem))
1608 break;
1609 }
1610 if (CONSP (regexps))
1611 continue;
1612 }
1613
1614 /* Ignore this element if there is a predicate
1615 and the predicate doesn't like it. */
1616
1617 if (!NILP (predicate))
1618 {
1619 if (EQ (predicate, Qcommandp))
1620 tem = Fcommandp (elt, Qnil);
1621 else
1622 {
1623 if (bindcount >= 0) {
1624 unbind_to (bindcount, Qnil);
1625 bindcount = -1;
1626 }
1627 GCPRO4 (tail, eltstring, allmatches, string);
1628 tem = type == 3
1629 ? call2 (predicate, elt,
1630 HASH_VALUE (XHASH_TABLE (alist), index - 1))
1631 : call1 (predicate, elt);
1632 UNGCPRO;
1633 }
1634 if (NILP (tem)) continue;
1635 }
1636 /* Ok => put it on the list. */
1637 allmatches = Fcons (eltstring, allmatches);
1638 }
1639 }
1640
1641 if (bindcount >= 0) {
1642 unbind_to (bindcount, Qnil);
1643 bindcount = -1;
1644 }
1645
1646 return Fnreverse (allmatches);
1647 }
1648 \f
1649 Lisp_Object Vminibuffer_completion_table, Qminibuffer_completion_table;
1650 Lisp_Object Vminibuffer_completion_predicate, Qminibuffer_completion_predicate;
1651 Lisp_Object Vminibuffer_completion_confirm, Qminibuffer_completion_confirm;
1652 Lisp_Object Vminibuffer_completing_file_name;
1653
1654 DEFUN ("completing-read", Fcompleting_read, Scompleting_read, 2, 8, 0,
1655 doc: /* Read a string in the minibuffer, with completion.
1656 PROMPT is a string to prompt with; normally it ends in a colon and a space.
1657 TABLE can be an list of strings, an alist, an obarray or a hash table.
1658 TABLE can also be a function to do the completion itself.
1659 PREDICATE limits completion to a subset of TABLE.
1660 See `try-completion' and `all-completions' for more details
1661 on completion, TABLE, and PREDICATE.
1662
1663 If REQUIRE-MATCH is non-nil, the user is not allowed to exit unless
1664 the input is (or completes to) an element of TABLE or is null.
1665 If it is also not t, typing RET does not exit if it does non-null completion.
1666 If the input is null, `completing-read' returns DEF, or an empty string
1667 if DEF is nil, regardless of the value of REQUIRE-MATCH.
1668
1669 If INITIAL-INPUT is non-nil, insert it in the minibuffer initially,
1670 with point positioned at the end.
1671 If it is (STRING . POSITION), the initial input is STRING, but point
1672 is placed at _zero-indexed_ position POSITION in STRING. (*Note*
1673 that this is different from `read-from-minibuffer' and related
1674 functions, which use one-indexing for POSITION.) This feature is
1675 deprecated--it is best to pass nil for INITIAL-INPUT and supply the
1676 default value DEF instead. The user can yank the default value into
1677 the minibuffer easily using \\[next-history-element].
1678
1679 HIST, if non-nil, specifies a history list and optionally the initial
1680 position in the list. It can be a symbol, which is the history list
1681 variable to use, or it can be a cons cell (HISTVAR . HISTPOS). In
1682 that case, HISTVAR is the history list variable to use, and HISTPOS
1683 is the initial position (the position in the list used by the
1684 minibuffer history commands). For consistency, you should also
1685 specify that element of the history as the value of
1686 INITIAL-INPUT. (This is the only case in which you should use
1687 INITIAL-INPUT instead of DEF.) Positions are counted starting from
1688 1 at the beginning of the list. The variable `history-length'
1689 controls the maximum length of a history list.
1690
1691 DEF, if non-nil, is the default value.
1692
1693 If INHERIT-INPUT-METHOD is non-nil, the minibuffer inherits
1694 the current input method and the setting of `enable-multibyte-characters'.
1695
1696 Completion ignores case if the ambient value of
1697 `completion-ignore-case' is non-nil. */)
1698 (prompt, table, predicate, require_match, initial_input, hist, def, inherit_input_method)
1699 Lisp_Object prompt, table, predicate, require_match, initial_input;
1700 Lisp_Object hist, def, inherit_input_method;
1701 {
1702 Lisp_Object val, histvar, histpos, position;
1703 Lisp_Object init;
1704 int pos = 0;
1705 int count = SPECPDL_INDEX ();
1706 struct gcpro gcpro1;
1707
1708 init = initial_input;
1709 GCPRO1 (def);
1710
1711 specbind (Qminibuffer_completion_table, table);
1712 specbind (Qminibuffer_completion_predicate, predicate);
1713 specbind (Qminibuffer_completion_confirm,
1714 EQ (require_match, Qt) ? Qnil : require_match);
1715 last_exact_completion = Qnil;
1716
1717 position = Qnil;
1718 if (!NILP (init))
1719 {
1720 if (CONSP (init))
1721 {
1722 position = Fcdr (init);
1723 init = Fcar (init);
1724 }
1725 CHECK_STRING (init);
1726 if (!NILP (position))
1727 {
1728 CHECK_NUMBER (position);
1729 /* Convert to distance from end of input. */
1730 pos = XINT (position) - SCHARS (init);
1731 }
1732 }
1733
1734 if (SYMBOLP (hist))
1735 {
1736 histvar = hist;
1737 histpos = Qnil;
1738 }
1739 else
1740 {
1741 histvar = Fcar_safe (hist);
1742 histpos = Fcdr_safe (hist);
1743 }
1744 if (NILP (histvar))
1745 histvar = Qminibuffer_history;
1746 if (NILP (histpos))
1747 XSETFASTINT (histpos, 0);
1748
1749 val = read_minibuf (NILP (require_match)
1750 ? Vminibuffer_local_completion_map
1751 : Vminibuffer_local_must_match_map,
1752 init, prompt, make_number (pos), 0,
1753 histvar, histpos, def, 0,
1754 !NILP (inherit_input_method), 0);
1755
1756 if (STRINGP (val) && SCHARS (val) == 0 && ! NILP (def))
1757 val = def;
1758
1759 RETURN_UNGCPRO (unbind_to (count, val));
1760 }
1761 \f
1762 Lisp_Object Fminibuffer_completion_help ();
1763 Lisp_Object Fassoc_string ();
1764
1765 /* Test whether TXT is an exact completion. */
1766 DEFUN ("test-completion", Ftest_completion, Stest_completion, 2, 3, 0,
1767 doc: /* Return non-nil if STRING is a valid completion.
1768 Takes the same arguments as `all-completions' and `try-completion'.
1769 If ALIST is a function, it is called with three arguments:
1770 the values STRING, PREDICATE and `lambda'. */)
1771 (string, alist, predicate)
1772 Lisp_Object string, alist, predicate;
1773 {
1774 Lisp_Object regexps, tail, tem = Qnil;
1775 int i = 0;
1776
1777 CHECK_STRING (string);
1778
1779 if ((CONSP (alist) && (!SYMBOLP (XCAR (alist)) || NILP (XCAR (alist))))
1780 || NILP (alist))
1781 {
1782 tem = Fassoc_string (string, alist, completion_ignore_case ? Qt : Qnil);
1783 if (NILP (tem))
1784 return Qnil;
1785 }
1786 else if (VECTORP (alist))
1787 {
1788 /* Bypass intern-soft as that loses for nil. */
1789 tem = oblookup (alist,
1790 SDATA (string),
1791 SCHARS (string),
1792 SBYTES (string));
1793 if (!SYMBOLP (tem))
1794 {
1795 if (STRING_MULTIBYTE (string))
1796 string = Fstring_make_unibyte (string);
1797 else
1798 string = Fstring_make_multibyte (string);
1799
1800 tem = oblookup (alist,
1801 SDATA (string),
1802 SCHARS (string),
1803 SBYTES (string));
1804 }
1805
1806 if (completion_ignore_case && !SYMBOLP (tem))
1807 {
1808 for (i = XVECTOR (alist)->size - 1; i >= 0; i--)
1809 {
1810 tail = XVECTOR (alist)->contents[i];
1811 if (SYMBOLP (tail))
1812 while (1)
1813 {
1814 if (EQ((Fcompare_strings (string, make_number (0), Qnil,
1815 Fsymbol_name (tail),
1816 make_number (0) , Qnil, Qt)),
1817 Qt))
1818 {
1819 tem = tail;
1820 break;
1821 }
1822 if (XSYMBOL (tail)->next == 0)
1823 break;
1824 XSETSYMBOL (tail, XSYMBOL (tail)->next);
1825 }
1826 }
1827 }
1828
1829 if (!SYMBOLP (tem))
1830 return Qnil;
1831 }
1832 else if (HASH_TABLE_P (alist))
1833 {
1834 struct Lisp_Hash_Table *h = XHASH_TABLE (alist);
1835 i = hash_lookup (h, string, NULL);
1836 if (i >= 0)
1837 tem = HASH_KEY (h, i);
1838 else
1839 for (i = 0; i < HASH_TABLE_SIZE (h); ++i)
1840 if (!NILP (HASH_HASH (h, i)) &&
1841 EQ (Fcompare_strings (string, make_number (0), Qnil,
1842 HASH_KEY (h, i), make_number (0) , Qnil,
1843 completion_ignore_case ? Qt : Qnil),
1844 Qt))
1845 {
1846 tem = HASH_KEY (h, i);
1847 break;
1848 }
1849 if (!STRINGP (tem))
1850 return Qnil;
1851 }
1852 else
1853 return call3 (alist, string, predicate, Qlambda);
1854
1855 /* Reject this element if it fails to match all the regexps. */
1856 if (CONSP (Vcompletion_regexp_list))
1857 {
1858 int count = SPECPDL_INDEX ();
1859 specbind (Qcase_fold_search, completion_ignore_case ? Qt : Qnil);
1860 for (regexps = Vcompletion_regexp_list; CONSP (regexps);
1861 regexps = XCDR (regexps))
1862 {
1863 if (NILP (Fstring_match (XCAR (regexps),
1864 SYMBOLP (tem) ? string : tem,
1865 Qnil)))
1866 return unbind_to (count, Qnil);
1867 }
1868 unbind_to (count, Qnil);
1869 }
1870
1871 /* Finally, check the predicate. */
1872 if (!NILP (predicate))
1873 {
1874 return HASH_TABLE_P (alist)
1875 ? call2 (predicate, tem, HASH_VALUE (XHASH_TABLE (alist), i))
1876 : call1 (predicate, tem);
1877 }
1878 else
1879 return Qt;
1880 }
1881
1882 /* returns:
1883 * 0 no possible completion
1884 * 1 was already an exact and unique completion
1885 * 3 was already an exact completion
1886 * 4 completed to an exact completion
1887 * 5 some completion happened
1888 * 6 no completion happened
1889 */
1890 int
1891 do_completion ()
1892 {
1893 Lisp_Object completion, string, tem;
1894 int completedp;
1895 Lisp_Object last;
1896 struct gcpro gcpro1, gcpro2;
1897
1898 completion = Ftry_completion (minibuffer_completion_contents (),
1899 Vminibuffer_completion_table,
1900 Vminibuffer_completion_predicate);
1901 last = last_exact_completion;
1902 last_exact_completion = Qnil;
1903
1904 GCPRO2 (completion, last);
1905
1906 if (NILP (completion))
1907 {
1908 bitch_at_user ();
1909 temp_echo_area_glyphs (build_string (" [No match]"));
1910 UNGCPRO;
1911 return 0;
1912 }
1913
1914 if (EQ (completion, Qt)) /* exact and unique match */
1915 {
1916 UNGCPRO;
1917 return 1;
1918 }
1919
1920 string = minibuffer_completion_contents ();
1921
1922 /* COMPLETEDP should be true if some completion was done, which
1923 doesn't include simply changing the case of the entered string.
1924 However, for appearance, the string is rewritten if the case
1925 changes. */
1926 tem = Fcompare_strings (completion, Qnil, Qnil, string, Qnil, Qnil, Qt);
1927 completedp = !EQ (tem, Qt);
1928
1929 tem = Fcompare_strings (completion, Qnil, Qnil, string, Qnil, Qnil, Qnil);
1930 if (!EQ (tem, Qt))
1931 /* Rewrite the user's input. */
1932 {
1933 int prompt_end = XINT (Fminibuffer_prompt_end ());
1934 /* Some completion happened */
1935
1936 if (! NILP (Vminibuffer_completing_file_name)
1937 && SREF (completion, SBYTES (completion) - 1) == '/'
1938 && PT < ZV
1939 && FETCH_CHAR (PT_BYTE) == '/')
1940 {
1941 del_range (prompt_end, PT + 1);
1942 }
1943 else
1944 del_range (prompt_end, PT);
1945
1946 Finsert (1, &completion);
1947
1948 if (! completedp)
1949 /* The case of the string changed, but that's all. We're not
1950 sure whether this is a unique completion or not, so try again
1951 using the real case (this shouldn't recurse again, because
1952 the next time try-completion will return either `t' or the
1953 exact string). */
1954 {
1955 UNGCPRO;
1956 return do_completion ();
1957 }
1958 }
1959
1960 /* It did find a match. Do we match some possibility exactly now? */
1961 tem = Ftest_completion (Fminibuffer_contents (),
1962 Vminibuffer_completion_table,
1963 Vminibuffer_completion_predicate);
1964 if (NILP (tem))
1965 {
1966 /* not an exact match */
1967 UNGCPRO;
1968 if (completedp)
1969 return 5;
1970 else if (!NILP (Vcompletion_auto_help))
1971 Fminibuffer_completion_help ();
1972 else
1973 temp_echo_area_glyphs (build_string (" [Next char not unique]"));
1974 return 6;
1975 }
1976 else if (completedp)
1977 {
1978 UNGCPRO;
1979 return 4;
1980 }
1981 /* If the last exact completion and this one were the same,
1982 it means we've already given a "Complete but not unique"
1983 message and the user's hit TAB again, so now we give him help. */
1984 last_exact_completion = completion;
1985 if (!NILP (last))
1986 {
1987 tem = minibuffer_completion_contents ();
1988 if (!NILP (Fequal (tem, last)))
1989 Fminibuffer_completion_help ();
1990 }
1991 UNGCPRO;
1992 return 3;
1993 }
1994
1995 /* Like assoc but assumes KEY is a string, and ignores case if appropriate. */
1996
1997 DEFUN ("assoc-string", Fassoc_string, Sassoc_string, 2, 3, 0,
1998 doc: /* Like `assoc' but specifically for strings.
1999 Unibyte strings are converted to multibyte for comparison.
2000 And case is ignored if CASE-FOLD is non-nil.
2001 As opposed to `assoc', it will also match an entry consisting of a single
2002 string rather than a cons cell whose car is a string. */)
2003 (key, list, case_fold)
2004 register Lisp_Object key;
2005 Lisp_Object list, case_fold;
2006 {
2007 register Lisp_Object tail;
2008
2009 for (tail = list; !NILP (tail); tail = Fcdr (tail))
2010 {
2011 register Lisp_Object elt, tem, thiscar;
2012 elt = Fcar (tail);
2013 thiscar = CONSP (elt) ? XCAR (elt) : elt;
2014 if (!STRINGP (thiscar))
2015 continue;
2016 tem = Fcompare_strings (thiscar, make_number (0), Qnil,
2017 key, make_number (0), Qnil,
2018 case_fold);
2019 if (EQ (tem, Qt))
2020 return elt;
2021 QUIT;
2022 }
2023 return Qnil;
2024 }
2025
2026 DEFUN ("minibuffer-complete", Fminibuffer_complete, Sminibuffer_complete, 0, 0, "",
2027 doc: /* Complete the minibuffer contents as far as possible.
2028 Return nil if there is no valid completion, else t.
2029 If no characters can be completed, display a list of possible completions.
2030 If you repeat this command after it displayed such a list,
2031 scroll the window of possible completions. */)
2032 ()
2033 {
2034 register int i;
2035 Lisp_Object window, tem;
2036
2037 /* If the previous command was not this,
2038 mark the completion buffer obsolete. */
2039 if (! EQ (current_kboard->Vlast_command, Vthis_command))
2040 Vminibuf_scroll_window = Qnil;
2041
2042 window = Vminibuf_scroll_window;
2043 /* If there's a fresh completion window with a live buffer,
2044 and this command is repeated, scroll that window. */
2045 if (! NILP (window) && ! NILP (XWINDOW (window)->buffer)
2046 && !NILP (XBUFFER (XWINDOW (window)->buffer)->name))
2047 {
2048 struct buffer *obuf = current_buffer;
2049
2050 Fset_buffer (XWINDOW (window)->buffer);
2051 tem = Fpos_visible_in_window_p (make_number (ZV), window, Qnil);
2052 if (! NILP (tem))
2053 /* If end is in view, scroll up to the beginning. */
2054 Fset_window_start (window, make_number (BEGV), Qnil);
2055 else
2056 /* Else scroll down one screen. */
2057 Fscroll_other_window (Qnil);
2058
2059 set_buffer_internal (obuf);
2060 return Qnil;
2061 }
2062
2063 i = do_completion ();
2064 switch (i)
2065 {
2066 case 0:
2067 return Qnil;
2068
2069 case 1:
2070 if (PT != ZV)
2071 Fgoto_char (make_number (ZV));
2072 temp_echo_area_glyphs (build_string (" [Sole completion]"));
2073 break;
2074
2075 case 3:
2076 if (PT != ZV)
2077 Fgoto_char (make_number (ZV));
2078 temp_echo_area_glyphs (build_string (" [Complete, but not unique]"));
2079 break;
2080 }
2081
2082 return Qt;
2083 }
2084 \f
2085 /* Subroutines of Fminibuffer_complete_and_exit. */
2086
2087 /* This one is called by internal_condition_case to do the real work. */
2088
2089 Lisp_Object
2090 complete_and_exit_1 ()
2091 {
2092 return make_number (do_completion ());
2093 }
2094
2095 /* This one is called by internal_condition_case if an error happens.
2096 Pretend the current value is an exact match. */
2097
2098 Lisp_Object
2099 complete_and_exit_2 (ignore)
2100 Lisp_Object ignore;
2101 {
2102 return make_number (1);
2103 }
2104
2105 EXFUN (Fexit_minibuffer, 0) NO_RETURN;
2106
2107 DEFUN ("minibuffer-complete-and-exit", Fminibuffer_complete_and_exit,
2108 Sminibuffer_complete_and_exit, 0, 0, "",
2109 doc: /* If the minibuffer contents is a valid completion then exit.
2110 Otherwise try to complete it. If completion leads to a valid completion,
2111 a repetition of this command will exit. */)
2112 ()
2113 {
2114 register int i;
2115 Lisp_Object val;
2116
2117 /* Allow user to specify null string */
2118 if (XINT (Fminibuffer_prompt_end ()) == ZV)
2119 goto exit;
2120
2121 val = Fminibuffer_contents ();
2122 if (!NILP (Ftest_completion (val,
2123 Vminibuffer_completion_table,
2124 Vminibuffer_completion_predicate)))
2125 {
2126 if (completion_ignore_case)
2127 { /* Fixup case of the field, if necessary. */
2128 Lisp_Object compl
2129 = Ftry_completion (val,
2130 Vminibuffer_completion_table,
2131 Vminibuffer_completion_predicate);
2132 if (STRINGP (compl)
2133 /* If it weren't for this piece of paranoia, I'd replace
2134 the whole thing with a call to do_completion. */
2135 && EQ (Flength (val), Flength (compl)))
2136 {
2137 del_range (XINT (Fminibuffer_prompt_end ()), ZV);
2138 Finsert (1, &compl);
2139 }
2140 }
2141 goto exit;
2142 }
2143
2144 /* Call do_completion, but ignore errors. */
2145 SET_PT (ZV);
2146 val = internal_condition_case (complete_and_exit_1, Qerror,
2147 complete_and_exit_2);
2148
2149 i = XFASTINT (val);
2150 switch (i)
2151 {
2152 case 1:
2153 case 3:
2154 goto exit;
2155
2156 case 4:
2157 if (!NILP (Vminibuffer_completion_confirm))
2158 {
2159 temp_echo_area_glyphs (build_string (" [Confirm]"));
2160 return Qnil;
2161 }
2162 else
2163 goto exit;
2164
2165 default:
2166 return Qnil;
2167 }
2168 exit:
2169 return Fexit_minibuffer ();
2170 /* NOTREACHED */
2171 }
2172
2173 DEFUN ("minibuffer-complete-word", Fminibuffer_complete_word, Sminibuffer_complete_word,
2174 0, 0, "",
2175 doc: /* Complete the minibuffer contents at most a single word.
2176 After one word is completed as much as possible, a space or hyphen
2177 is added, provided that matches some possible completion.
2178 Return nil if there is no valid completion, else t. */)
2179 ()
2180 {
2181 Lisp_Object completion, tem, tem1;
2182 register int i, i_byte;
2183 struct gcpro gcpro1, gcpro2;
2184 int prompt_end_charpos = XINT (Fminibuffer_prompt_end ());
2185
2186 /* We keep calling Fbuffer_string rather than arrange for GC to
2187 hold onto a pointer to one of the strings thus made. */
2188
2189 completion = Ftry_completion (minibuffer_completion_contents (),
2190 Vminibuffer_completion_table,
2191 Vminibuffer_completion_predicate);
2192 if (NILP (completion))
2193 {
2194 bitch_at_user ();
2195 temp_echo_area_glyphs (build_string (" [No match]"));
2196 return Qnil;
2197 }
2198 if (EQ (completion, Qt))
2199 return Qnil;
2200
2201 #if 0 /* How the below code used to look, for reference. */
2202 tem = Fminibuffer_contents ();
2203 b = SDATA (tem);
2204 i = ZV - 1 - SCHARS (completion);
2205 p = SDATA (completion);
2206 if (i > 0 ||
2207 0 <= scmp (b, p, ZV - 1))
2208 {
2209 i = 1;
2210 /* Set buffer to longest match of buffer tail and completion head. */
2211 while (0 <= scmp (b + i, p, ZV - 1 - i))
2212 i++;
2213 del_range (1, i + 1);
2214 SET_PT (ZV);
2215 }
2216 #else /* Rewritten code */
2217 {
2218 int buffer_nchars, completion_nchars;
2219
2220 CHECK_STRING (completion);
2221 tem = minibuffer_completion_contents ();
2222 GCPRO2 (completion, tem);
2223 /* If reading a file name,
2224 expand any $ENVVAR refs in the buffer and in TEM. */
2225 if (! NILP (Vminibuffer_completing_file_name))
2226 {
2227 Lisp_Object substituted;
2228 substituted = Fsubstitute_in_file_name (tem);
2229 if (! EQ (substituted, tem))
2230 {
2231 tem = substituted;
2232 del_range (prompt_end_charpos, PT);
2233 Finsert (1, &tem);
2234 }
2235 }
2236 buffer_nchars = SCHARS (tem); /* # chars in what we completed. */
2237 completion_nchars = SCHARS (completion);
2238 i = buffer_nchars - completion_nchars;
2239 if (i > 0
2240 ||
2241 (tem1 = Fcompare_strings (tem, make_number (0),
2242 make_number (buffer_nchars),
2243 completion, make_number (0),
2244 make_number (buffer_nchars),
2245 completion_ignore_case ? Qt : Qnil),
2246 ! EQ (tem1, Qt)))
2247 {
2248 int start_pos;
2249
2250 /* Make buffer (before point) contain the longest match
2251 of TEM's tail and COMPLETION's head. */
2252 if (i <= 0) i = 1;
2253 start_pos= i;
2254 buffer_nchars -= i;
2255 while (i > 0)
2256 {
2257 tem1 = Fcompare_strings (tem, make_number (start_pos), Qnil,
2258 completion, make_number (0),
2259 make_number (buffer_nchars),
2260 completion_ignore_case ? Qt : Qnil);
2261 start_pos++;
2262 if (EQ (tem1, Qt))
2263 break;
2264 i++;
2265 buffer_nchars--;
2266 }
2267 del_range (start_pos, start_pos + buffer_nchars);
2268 }
2269 UNGCPRO;
2270 }
2271 #endif /* Rewritten code */
2272
2273 {
2274 int prompt_end_bytepos;
2275 prompt_end_bytepos = CHAR_TO_BYTE (prompt_end_charpos);
2276 i = PT - prompt_end_charpos;
2277 i_byte = PT_BYTE - prompt_end_bytepos;
2278 }
2279
2280 /* If completion finds next char not unique,
2281 consider adding a space or a hyphen. */
2282 if (i == SCHARS (completion))
2283 {
2284 GCPRO1 (completion);
2285 tem = Ftry_completion (concat2 (minibuffer_completion_contents (),
2286 build_string (" ")),
2287 Vminibuffer_completion_table,
2288 Vminibuffer_completion_predicate);
2289 UNGCPRO;
2290
2291 if (STRINGP (tem))
2292 completion = tem;
2293 else
2294 {
2295 GCPRO1 (completion);
2296 tem =
2297 Ftry_completion (concat2 (minibuffer_completion_contents (),
2298 build_string ("-")),
2299 Vminibuffer_completion_table,
2300 Vminibuffer_completion_predicate);
2301 UNGCPRO;
2302
2303 if (STRINGP (tem))
2304 completion = tem;
2305 }
2306 }
2307
2308 /* Now find first word-break in the stuff found by completion.
2309 i gets index in string of where to stop completing. */
2310 {
2311 int len, c;
2312 int bytes = SBYTES (completion);
2313 register const unsigned char *completion_string = SDATA (completion);
2314 for (; i_byte < SBYTES (completion); i_byte += len, i++)
2315 {
2316 c = STRING_CHAR_AND_LENGTH (completion_string + i_byte,
2317 bytes - i_byte,
2318 len);
2319 if (SYNTAX (c) != Sword)
2320 {
2321 i_byte += len;
2322 i++;
2323 break;
2324 }
2325 }
2326 }
2327
2328 /* If got no characters, print help for user. */
2329
2330 if (i == PT - prompt_end_charpos)
2331 {
2332 if (!NILP (Vcompletion_auto_help))
2333 Fminibuffer_completion_help ();
2334 return Qnil;
2335 }
2336
2337 /* Otherwise insert in minibuffer the chars we got */
2338
2339 if (! NILP (Vminibuffer_completing_file_name)
2340 && SREF (completion, SBYTES (completion) - 1) == '/'
2341 && PT < ZV
2342 && FETCH_CHAR (PT_BYTE) == '/')
2343 {
2344 del_range (prompt_end_charpos, PT + 1);
2345 }
2346 else
2347 del_range (prompt_end_charpos, PT);
2348
2349 insert_from_string (completion, 0, 0, i, i_byte, 1);
2350 return Qt;
2351 }
2352 \f
2353 DEFUN ("display-completion-list", Fdisplay_completion_list, Sdisplay_completion_list,
2354 1, 1, 0,
2355 doc: /* Display the list of completions, COMPLETIONS, using `standard-output'.
2356 Each element may be just a symbol or string
2357 or may be a list of two strings to be printed as if concatenated.
2358 If it is a list of two strings, the first is the actual completion
2359 alternative, the second serves as annotation.
2360 `standard-output' must be a buffer.
2361 The actual completion alternatives, as inserted, are given `mouse-face'
2362 properties of `highlight'.
2363 At the end, this runs the normal hook `completion-setup-hook'.
2364 It can find the completion buffer in `standard-output'. */)
2365 (completions)
2366 Lisp_Object completions;
2367 {
2368 Lisp_Object tail, elt;
2369 register int i;
2370 int column = 0;
2371 struct gcpro gcpro1, gcpro2;
2372 struct buffer *old = current_buffer;
2373 int first = 1;
2374
2375 /* Note that (when it matters) every variable
2376 points to a non-string that is pointed to by COMPLETIONS,
2377 except for ELT. ELT can be pointing to a string
2378 when terpri or Findent_to calls a change hook. */
2379 elt = Qnil;
2380 GCPRO2 (completions, elt);
2381
2382 if (BUFFERP (Vstandard_output))
2383 set_buffer_internal (XBUFFER (Vstandard_output));
2384
2385 if (NILP (completions))
2386 write_string ("There are no possible completions of what you have typed.",
2387 -1);
2388 else
2389 {
2390 write_string ("Possible completions are:", -1);
2391 for (tail = completions, i = 0; !NILP (tail); tail = Fcdr (tail), i++)
2392 {
2393 Lisp_Object tem, string;
2394 int length;
2395 Lisp_Object startpos, endpos;
2396
2397 startpos = Qnil;
2398
2399 elt = Fcar (tail);
2400 if (SYMBOLP (elt))
2401 elt = SYMBOL_NAME (elt);
2402 /* Compute the length of this element. */
2403 if (CONSP (elt))
2404 {
2405 tem = XCAR (elt);
2406 CHECK_STRING (tem);
2407 length = SCHARS (tem);
2408
2409 tem = Fcar (XCDR (elt));
2410 CHECK_STRING (tem);
2411 length += SCHARS (tem);
2412 }
2413 else
2414 {
2415 CHECK_STRING (elt);
2416 length = SCHARS (elt);
2417 }
2418
2419 /* This does a bad job for narrower than usual windows.
2420 Sadly, the window it will appear in is not known
2421 until after the text has been made. */
2422
2423 if (BUFFERP (Vstandard_output))
2424 XSETINT (startpos, BUF_PT (XBUFFER (Vstandard_output)));
2425
2426 /* If the previous completion was very wide,
2427 or we have two on this line already,
2428 don't put another on the same line. */
2429 if (column > 33 || first
2430 /* If this is really wide, don't put it second on a line. */
2431 || (column > 0 && length > 45))
2432 {
2433 Fterpri (Qnil);
2434 column = 0;
2435 }
2436 /* Otherwise advance to column 35. */
2437 else
2438 {
2439 if (BUFFERP (Vstandard_output))
2440 {
2441 tem = Findent_to (make_number (35), make_number (2));
2442
2443 column = XINT (tem);
2444 }
2445 else
2446 {
2447 do
2448 {
2449 write_string (" ", -1);
2450 column++;
2451 }
2452 while (column < 35);
2453 }
2454 }
2455
2456 if (BUFFERP (Vstandard_output))
2457 {
2458 XSETINT (endpos, BUF_PT (XBUFFER (Vstandard_output)));
2459 Fset_text_properties (startpos, endpos,
2460 Qnil, Vstandard_output);
2461 }
2462
2463 /* Output this element.
2464 If necessary, convert it to unibyte or to multibyte first. */
2465 if (CONSP (elt))
2466 string = Fcar (elt);
2467 else
2468 string = elt;
2469 if (NILP (current_buffer->enable_multibyte_characters)
2470 && STRING_MULTIBYTE (string))
2471 string = Fstring_make_unibyte (string);
2472 else if (!NILP (current_buffer->enable_multibyte_characters)
2473 && !STRING_MULTIBYTE (string))
2474 string = Fstring_make_multibyte (string);
2475
2476 if (BUFFERP (Vstandard_output))
2477 {
2478 XSETINT (startpos, BUF_PT (XBUFFER (Vstandard_output)));
2479
2480 Fprinc (string, Qnil);
2481
2482 XSETINT (endpos, BUF_PT (XBUFFER (Vstandard_output)));
2483
2484 Fput_text_property (startpos, endpos,
2485 Qmouse_face, intern ("highlight"),
2486 Vstandard_output);
2487 }
2488 else
2489 {
2490 Fprinc (string, Qnil);
2491 }
2492
2493 /* Output the annotation for this element. */
2494 if (CONSP (elt))
2495 {
2496 if (BUFFERP (Vstandard_output))
2497 {
2498 XSETINT (startpos, BUF_PT (XBUFFER (Vstandard_output)));
2499
2500 Fprinc (Fcar (Fcdr (elt)), Qnil);
2501
2502 XSETINT (endpos, BUF_PT (XBUFFER (Vstandard_output)));
2503
2504 Fset_text_properties (startpos, endpos, Qnil,
2505 Vstandard_output);
2506 }
2507 else
2508 {
2509 Fprinc (Fcar (Fcdr (elt)), Qnil);
2510 }
2511 }
2512
2513
2514 /* Update COLUMN for what we have output. */
2515 column += length;
2516
2517 /* If output is to a buffer, recompute COLUMN in a way
2518 that takes account of character widths. */
2519 if (BUFFERP (Vstandard_output))
2520 {
2521 tem = Fcurrent_column ();
2522 column = XINT (tem);
2523 }
2524
2525 first = 0;
2526 }
2527 }
2528
2529 UNGCPRO;
2530
2531 if (BUFFERP (Vstandard_output))
2532 set_buffer_internal (old);
2533
2534 if (!NILP (Vrun_hooks))
2535 call1 (Vrun_hooks, intern ("completion-setup-hook"));
2536
2537 return Qnil;
2538 }
2539
2540 DEFUN ("minibuffer-completion-help", Fminibuffer_completion_help, Sminibuffer_completion_help,
2541 0, 0, "",
2542 doc: /* Display a list of possible completions of the current minibuffer contents. */)
2543 ()
2544 {
2545 Lisp_Object completions;
2546
2547 message ("Making completion list...");
2548 completions = Fall_completions (minibuffer_completion_contents (),
2549 Vminibuffer_completion_table,
2550 Vminibuffer_completion_predicate,
2551 Qt);
2552 clear_message (1, 0);
2553
2554 if (NILP (completions))
2555 {
2556 bitch_at_user ();
2557 temp_echo_area_glyphs (build_string (" [No completions]"));
2558 }
2559 else
2560 internal_with_output_to_temp_buffer ("*Completions*",
2561 Fdisplay_completion_list,
2562 Fsort (completions, Qstring_lessp));
2563 return Qnil;
2564 }
2565 \f
2566 DEFUN ("self-insert-and-exit", Fself_insert_and_exit, Sself_insert_and_exit, 0, 0, "",
2567 doc: /* Terminate minibuffer input. */)
2568 ()
2569 {
2570 if (INTEGERP (last_command_char))
2571 internal_self_insert (XINT (last_command_char), 0);
2572 else
2573 bitch_at_user ();
2574
2575 return Fexit_minibuffer ();
2576 }
2577
2578 DEFUN ("exit-minibuffer", Fexit_minibuffer, Sexit_minibuffer, 0, 0, "",
2579 doc: /* Terminate this minibuffer argument. */)
2580 ()
2581 {
2582 /* If the command that uses this has made modifications in the minibuffer,
2583 we don't want them to cause deactivation of the mark in the original
2584 buffer.
2585 A better solution would be to make deactivate-mark buffer-local
2586 (or to turn it into a list of buffers, ...), but in the mean time,
2587 this should do the trick in most cases. */
2588 Vdeactivate_mark = Qnil;
2589 Fthrow (Qexit, Qnil);
2590 }
2591
2592 DEFUN ("minibuffer-depth", Fminibuffer_depth, Sminibuffer_depth, 0, 0, 0,
2593 doc: /* Return current depth of activations of minibuffer, a nonnegative integer. */)
2594 ()
2595 {
2596 return make_number (minibuf_level);
2597 }
2598
2599 DEFUN ("minibuffer-prompt", Fminibuffer_prompt, Sminibuffer_prompt, 0, 0, 0,
2600 doc: /* Return the prompt string of the currently-active minibuffer.
2601 If no minibuffer is active, return nil. */)
2602 ()
2603 {
2604 return Fcopy_sequence (minibuf_prompt);
2605 }
2606
2607 \f
2608 /* Temporarily display STRING at the end of the current
2609 minibuffer contents. This is used to display things like
2610 "[No Match]" when the user requests a completion for a prefix
2611 that has no possible completions, and other quick, unobtrusive
2612 messages. */
2613
2614 void
2615 temp_echo_area_glyphs (string)
2616 Lisp_Object string;
2617 {
2618 int osize = ZV;
2619 int osize_byte = ZV_BYTE;
2620 int opoint = PT;
2621 int opoint_byte = PT_BYTE;
2622 Lisp_Object oinhibit;
2623 oinhibit = Vinhibit_quit;
2624
2625 /* Clear out any old echo-area message to make way for our new thing. */
2626 message (0);
2627
2628 SET_PT_BOTH (osize, osize_byte);
2629 insert_from_string (string, 0, 0, SCHARS (string), SBYTES (string), 0);
2630 SET_PT_BOTH (opoint, opoint_byte);
2631 Vinhibit_quit = Qt;
2632 Fsit_for (make_number (2), Qnil, Qnil);
2633 del_range_both (osize, osize_byte, ZV, ZV_BYTE, 1);
2634 SET_PT_BOTH (opoint, opoint_byte);
2635 if (!NILP (Vquit_flag))
2636 {
2637 Vquit_flag = Qnil;
2638 Vunread_command_events = Fcons (make_number (quit_char), Qnil);
2639 }
2640 Vinhibit_quit = oinhibit;
2641 }
2642
2643 DEFUN ("minibuffer-message", Fminibuffer_message, Sminibuffer_message,
2644 1, 1, 0,
2645 doc: /* Temporarily display STRING at the end of the minibuffer.
2646 The text is displayed for two seconds,
2647 or until the next input event arrives, whichever comes first. */)
2648 (string)
2649 Lisp_Object string;
2650 {
2651 CHECK_STRING (string);
2652 temp_echo_area_glyphs (string);
2653 return Qnil;
2654 }
2655 \f
2656 void
2657 init_minibuf_once ()
2658 {
2659 Vminibuffer_list = Qnil;
2660 staticpro (&Vminibuffer_list);
2661 }
2662
2663 void
2664 syms_of_minibuf ()
2665 {
2666 minibuf_level = 0;
2667 minibuf_prompt = Qnil;
2668 staticpro (&minibuf_prompt);
2669
2670 minibuf_save_list = Qnil;
2671 staticpro (&minibuf_save_list);
2672
2673 Qread_file_name_internal = intern ("read-file-name-internal");
2674 staticpro (&Qread_file_name_internal);
2675
2676 Qminibuffer_default = intern ("minibuffer-default");
2677 staticpro (&Qminibuffer_default);
2678 Fset (Qminibuffer_default, Qnil);
2679
2680 Qminibuffer_completion_table = intern ("minibuffer-completion-table");
2681 staticpro (&Qminibuffer_completion_table);
2682
2683 Qminibuffer_completion_confirm = intern ("minibuffer-completion-confirm");
2684 staticpro (&Qminibuffer_completion_confirm);
2685
2686 Qminibuffer_completion_predicate = intern ("minibuffer-completion-predicate");
2687 staticpro (&Qminibuffer_completion_predicate);
2688
2689 staticpro (&last_exact_completion);
2690 last_exact_completion = Qnil;
2691
2692 staticpro (&last_minibuf_string);
2693 last_minibuf_string = Qnil;
2694
2695 Quser_variable_p = intern ("user-variable-p");
2696 staticpro (&Quser_variable_p);
2697
2698 Qminibuffer_history = intern ("minibuffer-history");
2699 staticpro (&Qminibuffer_history);
2700
2701 Qbuffer_name_history = intern ("buffer-name-history");
2702 staticpro (&Qbuffer_name_history);
2703 Fset (Qbuffer_name_history, Qnil);
2704
2705 Qminibuffer_setup_hook = intern ("minibuffer-setup-hook");
2706 staticpro (&Qminibuffer_setup_hook);
2707
2708 Qminibuffer_exit_hook = intern ("minibuffer-exit-hook");
2709 staticpro (&Qminibuffer_exit_hook);
2710
2711 Qhistory_length = intern ("history-length");
2712 staticpro (&Qhistory_length);
2713
2714 Qcurrent_input_method = intern ("current-input-method");
2715 staticpro (&Qcurrent_input_method);
2716
2717 Qactivate_input_method = intern ("activate-input-method");
2718 staticpro (&Qactivate_input_method);
2719
2720 Qcase_fold_search = intern ("case-fold-search");
2721 staticpro (&Qcase_fold_search);
2722
2723 DEFVAR_LISP ("read-buffer-function", &Vread_buffer_function,
2724 doc: /* If this is non-nil, `read-buffer' does its work by calling this function. */);
2725 Vread_buffer_function = Qnil;
2726
2727 DEFVAR_LISP ("minibuffer-setup-hook", &Vminibuffer_setup_hook,
2728 doc: /* Normal hook run just after entry to minibuffer. */);
2729 Vminibuffer_setup_hook = Qnil;
2730
2731 DEFVAR_LISP ("minibuffer-exit-hook", &Vminibuffer_exit_hook,
2732 doc: /* Normal hook run just after exit from minibuffer. */);
2733 Vminibuffer_exit_hook = Qnil;
2734
2735 DEFVAR_LISP ("history-length", &Vhistory_length,
2736 doc: /* *Maximum length for history lists before truncation takes place.
2737 A number means that length; t means infinite. Truncation takes place
2738 just after a new element is inserted. Setting the history-length
2739 property of a history variable overrides this default. */);
2740 XSETFASTINT (Vhistory_length, 30);
2741
2742 DEFVAR_BOOL ("history-delete-duplicates", &history_delete_duplicates,
2743 doc: /* *Non-nil means to delete duplicates in history.
2744 If set to t when adding a new history element, all previous identical
2745 elements are deleted. */);
2746 history_delete_duplicates = 0;
2747
2748 DEFVAR_LISP ("completion-auto-help", &Vcompletion_auto_help,
2749 doc: /* *Non-nil means automatically provide help for invalid completion input. */);
2750 Vcompletion_auto_help = Qt;
2751
2752 DEFVAR_BOOL ("completion-ignore-case", &completion_ignore_case,
2753 doc: /* Non-nil means don't consider case significant in completion.
2754
2755 For file-name completion, the variable `read-file-name-completion-ignore-case'
2756 controls the behavior, rather than this variable. */);
2757 completion_ignore_case = 0;
2758
2759 DEFVAR_BOOL ("enable-recursive-minibuffers", &enable_recursive_minibuffers,
2760 doc: /* *Non-nil means to allow minibuffer commands while in the minibuffer.
2761 This variable makes a difference whenever the minibuffer window is active. */);
2762 enable_recursive_minibuffers = 0;
2763
2764 DEFVAR_LISP ("minibuffer-completion-table", &Vminibuffer_completion_table,
2765 doc: /* Alist or obarray used for completion in the minibuffer.
2766 This becomes the ALIST argument to `try-completion' and `all-completions'.
2767 The value can also be a list of strings or a hash table.
2768
2769 The value may alternatively be a function, which is given three arguments:
2770 STRING, the current buffer contents;
2771 PREDICATE, the predicate for filtering possible matches;
2772 CODE, which says what kind of things to do.
2773 CODE can be nil, t or `lambda'.
2774 nil means to return the best completion of STRING, or nil if there is none.
2775 t means to return a list of all possible completions of STRING.
2776 `lambda' means to return t if STRING is a valid completion as it stands. */);
2777 Vminibuffer_completion_table = Qnil;
2778
2779 DEFVAR_LISP ("minibuffer-completion-predicate", &Vminibuffer_completion_predicate,
2780 doc: /* Within call to `completing-read', this holds the PREDICATE argument. */);
2781 Vminibuffer_completion_predicate = Qnil;
2782
2783 DEFVAR_LISP ("minibuffer-completion-confirm", &Vminibuffer_completion_confirm,
2784 doc: /* Non-nil means to demand confirmation of completion before exiting minibuffer. */);
2785 Vminibuffer_completion_confirm = Qnil;
2786
2787 DEFVAR_LISP ("minibuffer-completing-file-name",
2788 &Vminibuffer_completing_file_name,
2789 doc: /* Non-nil means completing file names. */);
2790 Vminibuffer_completing_file_name = Qnil;
2791
2792 DEFVAR_LISP ("minibuffer-help-form", &Vminibuffer_help_form,
2793 doc: /* Value that `help-form' takes on inside the minibuffer. */);
2794 Vminibuffer_help_form = Qnil;
2795
2796 DEFVAR_LISP ("minibuffer-history-variable", &Vminibuffer_history_variable,
2797 doc: /* History list symbol to add minibuffer values to.
2798 Each string of minibuffer input, as it appears on exit from the minibuffer,
2799 is added with
2800 (set minibuffer-history-variable
2801 (cons STRING (symbol-value minibuffer-history-variable))) */);
2802 XSETFASTINT (Vminibuffer_history_variable, 0);
2803
2804 DEFVAR_LISP ("minibuffer-history-position", &Vminibuffer_history_position,
2805 doc: /* Current position of redoing in the history list. */);
2806 Vminibuffer_history_position = Qnil;
2807
2808 DEFVAR_BOOL ("minibuffer-auto-raise", &minibuffer_auto_raise,
2809 doc: /* *Non-nil means entering the minibuffer raises the minibuffer's frame.
2810 Some uses of the echo area also raise that frame (since they use it too). */);
2811 minibuffer_auto_raise = 0;
2812
2813 DEFVAR_LISP ("completion-regexp-list", &Vcompletion_regexp_list,
2814 doc: /* List of regexps that should restrict possible completions.
2815 The basic completion functions only consider a completion acceptable
2816 if it matches all regular expressions in this list, with
2817 `case-fold-search' bound to the value of `completion-ignore-case'.
2818 See Info node `(elisp)Basic Completion', for a description of these
2819 functions. */);
2820 Vcompletion_regexp_list = Qnil;
2821
2822 DEFVAR_BOOL ("minibuffer-allow-text-properties",
2823 &minibuffer_allow_text_properties,
2824 doc: /* Non-nil means `read-from-minibuffer' should not discard text properties.
2825 This also affects `read-string', but it does not affect `read-minibuffer',
2826 `read-no-blanks-input', or any of the functions that do minibuffer input
2827 with completion; they always discard text properties. */);
2828 minibuffer_allow_text_properties = 0;
2829
2830 DEFVAR_LISP ("minibuffer-prompt-properties", &Vminibuffer_prompt_properties,
2831 doc: /* Text properties that are added to minibuffer prompts.
2832 These are in addition to the basic `field' property, and stickiness
2833 properties. */);
2834 /* We use `intern' here instead of Qread_only to avoid
2835 initialization-order problems. */
2836 Vminibuffer_prompt_properties
2837 = Fcons (intern ("read-only"), Fcons (Qt, Qnil));
2838
2839 defsubr (&Sset_minibuffer_window);
2840 defsubr (&Sread_from_minibuffer);
2841 defsubr (&Seval_minibuffer);
2842 defsubr (&Sread_minibuffer);
2843 defsubr (&Sread_string);
2844 defsubr (&Sread_command);
2845 defsubr (&Sread_variable);
2846 defsubr (&Sread_buffer);
2847 defsubr (&Sread_no_blanks_input);
2848 defsubr (&Sminibuffer_depth);
2849 defsubr (&Sminibuffer_prompt);
2850
2851 defsubr (&Sminibufferp);
2852 defsubr (&Sminibuffer_prompt_end);
2853 defsubr (&Sminibuffer_contents);
2854 defsubr (&Sminibuffer_contents_no_properties);
2855 defsubr (&Sdelete_minibuffer_contents);
2856
2857 defsubr (&Stry_completion);
2858 defsubr (&Sall_completions);
2859 defsubr (&Stest_completion);
2860 defsubr (&Sassoc_string);
2861 defsubr (&Scompleting_read);
2862 defsubr (&Sminibuffer_complete);
2863 defsubr (&Sminibuffer_complete_word);
2864 defsubr (&Sminibuffer_complete_and_exit);
2865 defsubr (&Sdisplay_completion_list);
2866 defsubr (&Sminibuffer_completion_help);
2867
2868 defsubr (&Sself_insert_and_exit);
2869 defsubr (&Sexit_minibuffer);
2870
2871 defsubr (&Sminibuffer_message);
2872 }
2873
2874 void
2875 keys_of_minibuf ()
2876 {
2877 initial_define_key (Vminibuffer_local_map, Ctl ('g'),
2878 "abort-recursive-edit");
2879 initial_define_key (Vminibuffer_local_map, Ctl ('m'),
2880 "exit-minibuffer");
2881 initial_define_key (Vminibuffer_local_map, Ctl ('j'),
2882 "exit-minibuffer");
2883
2884 initial_define_key (Vminibuffer_local_ns_map, ' ',
2885 "exit-minibuffer");
2886 initial_define_key (Vminibuffer_local_ns_map, '\t',
2887 "exit-minibuffer");
2888 initial_define_key (Vminibuffer_local_ns_map, '?',
2889 "self-insert-and-exit");
2890
2891 initial_define_key (Vminibuffer_local_completion_map, '\t',
2892 "minibuffer-complete");
2893 initial_define_key (Vminibuffer_local_completion_map, ' ',
2894 "minibuffer-complete-word");
2895 initial_define_key (Vminibuffer_local_completion_map, '?',
2896 "minibuffer-completion-help");
2897
2898 initial_define_key (Vminibuffer_local_must_match_map, Ctl ('m'),
2899 "minibuffer-complete-and-exit");
2900 initial_define_key (Vminibuffer_local_must_match_map, Ctl ('j'),
2901 "minibuffer-complete-and-exit");
2902 }
2903
2904 /* arch-tag: 8f69b601-fba3-484c-a6dd-ceaee54a7a73
2905 (do not change this comment) */