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