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