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