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