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