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