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