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