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