(save_excursion_restore): Don't call Vrun_hooks if nil.
[bpt/emacs.git] / src / minibuf.c
CommitLineData
f927c5ae 1/* Minibuffer input and completion.
c6c5df7f 2 Copyright (C) 1985, 1986, 1993 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
18the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
19
20
18160b98 21#include <config.h>
f927c5ae
JB
22#include "lisp.h"
23#include "commands.h"
24#include "buffer.h"
25#include "dispextern.h"
ff11dfa1 26#include "frame.h"
f927c5ae
JB
27#include "window.h"
28#include "syntax.h"
29
30#define min(a, b) ((a) < (b) ? (a) : (b))
31
32/* List of buffers for use as minibuffers.
33 The first element of the list is used for the outermost minibuffer invocation,
34 the next element is used for a recursive minibuffer invocation, etc.
35 The list is extended at the end as deeped minibuffer recursions are encountered. */
36Lisp_Object Vminibuffer_list;
37
38struct minibuf_save_data
39 {
40 char *prompt;
41 int prompt_width;
42 Lisp_Object help_form;
43 Lisp_Object current_prefix_arg;
770970cb
RS
44 Lisp_Object history_position;
45 Lisp_Object history_variable;
f927c5ae
JB
46 };
47
48int minibuf_save_vector_size;
49struct minibuf_save_data *minibuf_save_vector;
50
51/* Depth in minibuffer invocations. */
52int minibuf_level;
53
54/* Nonzero means display completion help for invalid input */
55int auto_help;
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
64/* help-form is bound to this while in the minibuffer. */
65
66Lisp_Object Vminibuffer_help_form;
67
770970cb
RS
68/* Variable which is the history list to add minibuffer values to. */
69
70Lisp_Object Vminibuffer_history_variable;
71
72/* Current position in the history list (adjusted by M-n and M-p). */
73
74Lisp_Object Vminibuffer_history_position;
75
76Lisp_Object Qminibuffer_history;
77
719b4a40
RS
78Lisp_Object Qread_file_name_internal;
79
5c781212
RS
80/* Normal hook for entry to minibuffer. */
81
82Lisp_Object Qminibuffer_setup_hook, Vminibuffer_setup_hook;
83
f927c5ae
JB
84/* Nonzero means completion ignores case. */
85
86int completion_ignore_case;
87
6a9ee000
RS
88/* Nonzero means raise the minibuffer frame when the minibuffer
89 is entered. */
90
91int minibuffer_auto_raise;
92
f927c5ae
JB
93/* If last completion attempt reported "Complete but not unique"
94 then this is the string completed then; otherwise this is nil. */
95
96static Lisp_Object last_exact_completion;
97
98Lisp_Object Quser_variable_p;
f927c5ae
JB
99\f
100/* Actual minibuffer invocation. */
101
102void read_minibuf_unwind ();
103Lisp_Object get_minibuffer ();
104Lisp_Object read_minibuf ();
105
770970cb 106/* Read from the minibuffer using keymap MAP, initial contents INITIAL
85b5fe07 107 (a string), putting point minus BACKUP_N chars from the end of INITIAL,
770970cb 108 prompting with PROMPT (a string), using history list HISTVAR
85b5fe07 109 with initial position HISTPOS. (BACKUP_N should be <= 0.)
770970cb
RS
110
111 Normally return the result as a string (the text that was read),
b278606c
BF
112 but if EXPFLAG is non-nil, read it and return the object read.
113 If HISTVAR is given, save the value read on that history only if it doesn't
114 match the front of that history list exactly. The value is pushed onto
115 the list as the string that was read, or as the object that resulted iff
116 EXPFLAG is non-nil. */
770970cb 117
f927c5ae 118Lisp_Object
770970cb 119read_minibuf (map, initial, prompt, backup_n, expflag, histvar, histpos)
f927c5ae
JB
120 Lisp_Object map;
121 Lisp_Object initial;
122 Lisp_Object prompt;
5061d9c3 123 Lisp_Object backup_n;
f927c5ae 124 int expflag;
770970cb
RS
125 Lisp_Object histvar;
126 Lisp_Object histpos;
f927c5ae
JB
127{
128 register Lisp_Object val;
129 int count = specpdl_ptr - specpdl;
5061d9c3 130 Lisp_Object mini_frame;
f927c5ae 131 struct gcpro gcpro1, gcpro2;
f927c5ae
JB
132
133 if (XTYPE (prompt) != Lisp_String)
134 prompt = build_string ("");
135
136 /* Emacs in -batch mode calls minibuffer: print the prompt. */
137 if (noninteractive && XTYPE (prompt) == Lisp_String)
138 printf ("%s", XSTRING (prompt)->data);
139
140 if (!enable_recursive_minibuffers
141 && minibuf_level > 0
142 && (EQ (selected_window, minibuf_window)))
143#if 0
ff11dfa1 144 || selected_frame != XFRAME (WINDOW_FRAME (XWINDOW (minibuf_window)))
f927c5ae
JB
145#endif
146 error ("Command attempted to use minibuffer while in minibuffer");
147
148 if (minibuf_level == minibuf_save_vector_size)
149 minibuf_save_vector =
150 (struct minibuf_save_data *)
151 xrealloc (minibuf_save_vector,
152 (minibuf_save_vector_size *= 2)
153 * sizeof (struct minibuf_save_data));
154 minibuf_save_vector[minibuf_level].prompt = minibuf_prompt;
155 minibuf_save_vector[minibuf_level].prompt_width = minibuf_prompt_width;
156 minibuf_prompt_width = 0;
157 /* >> Why is this done this way rather than binding these variables? */
158 minibuf_save_vector[minibuf_level].help_form = Vhelp_form;
159 minibuf_save_vector[minibuf_level].current_prefix_arg = Vcurrent_prefix_arg;
770970cb
RS
160 minibuf_save_vector[minibuf_level].history_position = Vminibuffer_history_position;
161 minibuf_save_vector[minibuf_level].history_variable = Vminibuffer_history_variable;
f927c5ae
JB
162 GCPRO2 (minibuf_save_vector[minibuf_level].help_form,
163 minibuf_save_vector[minibuf_level].current_prefix_arg);
164
165 record_unwind_protect (Fset_window_configuration,
b2b2c677
JB
166 Fcurrent_window_configuration (Qnil));
167
ff11dfa1
JB
168 /* If the minibuffer window is on a different frame, save that
169 frame's configuration too. */
5061d9c3
RS
170#ifdef MULTI_FRAME
171 XSET (mini_frame, Lisp_Frame, WINDOW_FRAME (XWINDOW (minibuf_window)));
ff11dfa1 172 if (XFRAME (mini_frame) != selected_frame)
5061d9c3
RS
173 record_unwind_protect (Fset_window_configuration,
174 Fcurrent_window_configuration (mini_frame));
6a9ee000
RS
175 if (minibuffer_auto_raise)
176 Fraise_frame (mini_frame);
5061d9c3 177#endif
f927c5ae
JB
178
179 val = current_buffer->directory;
180 Fset_buffer (get_minibuffer (minibuf_level));
64a3a3c0
JB
181
182 /* The current buffer's default directory is usually the right thing
183 for our minibuffer here. However, if you're typing a command at
184 a minibuffer-only frame when minibuf_level is zero, then buf IS
185 the current_buffer, so reset_buffer leaves buf's default
186 directory unchanged. This is a bummer when you've just started
187 up Emacs and buf's default directory is Qnil. Here's a hack; can
188 you think of something better to do? Find another buffer with a
189 better directory, and use that one instead. */
190 if (XTYPE (val) == Lisp_String)
191 current_buffer->directory = val;
192 else
193 {
194 Lisp_Object buf_list;
195
196 for (buf_list = Vbuffer_alist;
197 CONSP (buf_list);
198 buf_list = XCONS (buf_list)->cdr)
199 {
200 Lisp_Object other_buf = XCONS (XCONS (buf_list)->car)->cdr;
201
202 if (XTYPE (XBUFFER (other_buf)->directory) == Lisp_String)
203 {
204 current_buffer->directory = XBUFFER (other_buf)->directory;
205 break;
206 }
207 }
208 }
209
33b1baf6 210#ifdef MULTI_FRAME
91dc12bb 211 Fredirect_frame_focus (Fselected_frame (), mini_frame);
33b1baf6 212#endif
f927c5ae
JB
213 Fmake_local_variable (Qprint_escape_newlines);
214 print_escape_newlines = 1;
215
43bad991 216 record_unwind_protect (read_minibuf_unwind, Qnil);
43bad991 217
f927c5ae
JB
218 Vminibuf_scroll_window = selected_window;
219 Fset_window_buffer (minibuf_window, Fcurrent_buffer ());
f927c5ae
JB
220 Fselect_window (minibuf_window);
221 XFASTINT (XWINDOW (minibuf_window)->hscroll) = 0;
222
223 Ferase_buffer ();
224 minibuf_level++;
f927c5ae 225
56a98455 226 if (!NILP (initial))
f927c5ae
JB
227 {
228 Finsert (1, &initial);
56a98455 229 if (!NILP (backup_n) && XTYPE (backup_n) == Lisp_Int)
f927c5ae
JB
230 Fforward_char (backup_n);
231 }
232
233 minibuf_prompt = (char *) alloca (XSTRING (prompt)->size + 1);
234 bcopy (XSTRING (prompt)->data, minibuf_prompt, XSTRING (prompt)->size + 1);
235 echo_area_glyphs = 0;
236
237 Vhelp_form = Vminibuffer_help_form;
238 current_buffer->keymap = map;
770970cb
RS
239 Vminibuffer_history_position = histpos;
240 Vminibuffer_history_variable = histvar;
f927c5ae 241
5c781212
RS
242 /* Run our hook, but not if it is empty.
243 (run-hooks would do nothing if it is empty,
244 but it's important to save time here in the usual case. */
245 if (!NILP (Vminibuffer_setup_hook) && !EQ (Vminibuffer_setup_hook, Qunbound))
246 call1 (Vrun_hooks, Qminibuffer_setup_hook);
247
f927c5ae
JB
248/* ??? MCC did redraw_screen here if switching screens. */
249 recursive_edit_1 ();
250
251 /* If cursor is on the minibuffer line,
252 show the user we have exited by putting it in column 0. */
ff11dfa1 253 if ((FRAME_CURSOR_Y (selected_frame)
f927c5ae
JB
254 >= XFASTINT (XWINDOW (minibuf_window)->top))
255 && !noninteractive)
256 {
ff11dfa1
JB
257 FRAME_CURSOR_X (selected_frame) = 0;
258 update_frame (selected_frame, 1, 1);
f927c5ae
JB
259 }
260
261 /* Make minibuffer contents into a string */
ffd56f97 262 val = make_buffer_string (1, Z);
f927c5ae 263 bcopy (GAP_END_ADDR, XSTRING (val)->data + GPT - BEG, Z - GPT);
770970cb 264
b278606c
BF
265 /* VAL is the string of minibuffer text. */
266 last_minibuf_string = val;
267
770970cb
RS
268 /* Add the value to the appropriate history list. */
269 if (XTYPE (Vminibuffer_history_variable) == Lisp_Symbol
b278606c
BF
270 && ! EQ (XSYMBOL (Vminibuffer_history_variable)->value, Qunbound))
271 {
272 /* If the caller wanted to save the value read on a history list,
60b73b25
RS
273 then do so if the value is not already the front of the list. */
274 Lisp_Object histval;
275 histval = Fsymbol_value (Vminibuffer_history_variable);
b278606c
BF
276
277 /* The value of the history variable must be a cons or nil. Other
60b73b25 278 values are unacceptable. We silently ignore these values. */
b278606c 279 if (NILP (histval)
60b73b25
RS
280 || (CONSP (histval)
281 && NILP (Fequal (last_minibuf_string, Fcar (histval)))))
282 Fset (Vminibuffer_history_variable,
283 Fcons (last_minibuf_string, histval));
b278606c 284 }
770970cb 285
60b73b25
RS
286 /* If Lisp form desired instead of string, parse it. */
287 if (expflag)
288 val = Fread (val);
289
ff11dfa1 290 unbind_to (count, Qnil); /* The appropriate frame will get selected
43bad991 291 in set-window-configuration. */
f927c5ae
JB
292
293 UNGCPRO;
294
f927c5ae
JB
295 return val;
296}
297
298/* Return a buffer to be used as the minibuffer at depth `depth'.
299 depth = 0 is the lowest allowed argument, and that is the value
300 used for nonrecursive minibuffer invocations */
301
302Lisp_Object
303get_minibuffer (depth)
304 int depth;
305{
306 Lisp_Object tail, num, buf;
307 char name[14];
308 extern Lisp_Object nconc2 ();
309
310 XFASTINT (num) = depth;
311 tail = Fnthcdr (num, Vminibuffer_list);
56a98455 312 if (NILP (tail))
f927c5ae
JB
313 {
314 tail = Fcons (Qnil, Qnil);
315 Vminibuffer_list = nconc2 (Vminibuffer_list, tail);
316 }
317 buf = Fcar (tail);
56a98455 318 if (NILP (buf) || NILP (XBUFFER (buf)->name))
f927c5ae
JB
319 {
320 sprintf (name, " *Minibuf-%d*", depth);
321 buf = Fget_buffer_create (build_string (name));
5d6533f1
JB
322
323 /* Although the buffer's name starts with a space, undo should be
324 enabled in it. */
325 Fbuffer_enable_undo (buf);
326
f927c5ae
JB
327 XCONS (tail)->car = buf;
328 }
329 else
330 reset_buffer (XBUFFER (buf));
64a3a3c0 331
f927c5ae
JB
332 return buf;
333}
334
335/* This function is called on exiting minibuffer, whether normally or not,
336 and it restores the current window, buffer, etc. */
337
338void
43bad991
JB
339read_minibuf_unwind (data)
340 Lisp_Object data;
f927c5ae
JB
341{
342 /* Erase the minibuffer we were using at this level. */
343 Fset_buffer (XWINDOW (minibuf_window)->buffer);
344
345 /* Prevent error in erase-buffer. */
346 current_buffer->read_only = Qnil;
347 Ferase_buffer ();
348
349 /* If this was a recursive minibuffer,
350 tie the minibuffer window back to the outer level minibuffer buffer */
351 minibuf_level--;
352 /* Make sure minibuffer window is erased, not ignored */
353 windows_or_buffers_changed++;
354 XFASTINT (XWINDOW (minibuf_window)->last_modified) = 0;
355
356 /* Restore prompt from outer minibuffer */
357 minibuf_prompt = minibuf_save_vector[minibuf_level].prompt;
358 minibuf_prompt_width = minibuf_save_vector[minibuf_level].prompt_width;
359 Vhelp_form = minibuf_save_vector[minibuf_level].help_form;
360 Vcurrent_prefix_arg = minibuf_save_vector[minibuf_level].current_prefix_arg;
770970cb
RS
361 Vminibuffer_history_position
362 = minibuf_save_vector[minibuf_level].history_position;
363 Vminibuffer_history_variable
364 = minibuf_save_vector[minibuf_level].history_variable;
f927c5ae
JB
365}
366\f
b9d721de
JB
367
368/* This comment supplies the doc string for read-from-minibuffer,
369 for make-docfile to see. We cannot put this in the real DEFUN
370 due to limits in the Unix cpp.
371
f927c5ae
JB
372DEFUN ("read-from-minibuffer", Fread_from_minibuffer, Sread_from_minibuffer, 1, 5, 0,
373 "Read a string from the minibuffer, prompting with string PROMPT.\n\
374If optional second arg INITIAL-CONTENTS is non-nil, it is a string\n\
375 to be inserted into the minibuffer before reading input.\n\
770970cb
RS
376 If INITIAL-CONTENTS is (STRING . POSITION), the initial input\n\
377 is STRING, but point is placed POSITION characters into the string.\n\
f927c5ae
JB
378Third arg KEYMAP is a keymap to use whilst reading;\n\
379 if omitted or nil, the default is `minibuffer-local-map'.\n\
380If fourth arg READ is non-nil, then interpret the result as a lisp object\n\
381 and return that object:\n\
382 in other words, do `(car (read-from-string INPUT-STRING))'\n\
770970cb
RS
383Fifth arg HIST, if non-nil, specifies a history list\n\
384 and optionally the initial position in the list.\n\
385 It can be a symbol, which is the history list variable to use,\n\
386 or it can be a cons cell (HISTVAR . HISTPOS).\n\
387 In that case, HISTVAR is the history list variable to use,\n\
388 and HISTPOS is the initial position (the position in the list\n\
389 which INITIAL-CONTENTS corresponds to).\n\
b9d721de
JB
390 Positions are counted starting from 1 at the beginning of the list."
391*/
392
393DEFUN ("read-from-minibuffer", Fread_from_minibuffer, Sread_from_minibuffer, 1, 5, 0,
394 0 /* See immediately above */)
68e5a8a2
RS
395 (prompt, initial_contents, keymap, read, hist)
396 Lisp_Object prompt, initial_contents, keymap, read, hist;
f927c5ae
JB
397{
398 int pos = 0;
770970cb
RS
399 Lisp_Object histvar, histpos, position;
400 position = Qnil;
f927c5ae
JB
401
402 CHECK_STRING (prompt, 0);
68e5a8a2 403 if (!NILP (initial_contents))
f927c5ae 404 {
68e5a8a2 405 if (XTYPE (initial_contents) == Lisp_Cons)
770970cb 406 {
68e5a8a2
RS
407 position = Fcdr (initial_contents);
408 initial_contents = Fcar (initial_contents);
770970cb 409 }
68e5a8a2 410 CHECK_STRING (initial_contents, 1);
56a98455 411 if (!NILP (position))
f927c5ae
JB
412 {
413 CHECK_NUMBER (position, 0);
414 /* Convert to distance from end of input. */
68e5a8a2 415 pos = XINT (position) - 1 - XSTRING (initial_contents)->size;
f927c5ae
JB
416 }
417 }
418
56a98455 419 if (NILP (keymap))
f927c5ae
JB
420 keymap = Vminibuffer_local_map;
421 else
422 keymap = get_keymap (keymap,2);
770970cb
RS
423
424 if (XTYPE (hist) == Lisp_Symbol)
425 {
426 histvar = hist;
427 histpos = Qnil;
428 }
429 else
430 {
431 histvar = Fcar_safe (hist);
432 histpos = Fcdr_safe (hist);
433 }
434 if (NILP (histvar))
435 histvar = Qminibuffer_history;
436 if (NILP (histpos))
437 XFASTINT (histpos) = 0;
438
68e5a8a2 439 return read_minibuf (keymap, initial_contents, prompt,
85b5fe07 440 make_number (pos), !NILP (read), histvar, histpos);
f927c5ae
JB
441}
442
443DEFUN ("read-minibuffer", Fread_minibuffer, Sread_minibuffer, 1, 2, 0,
444 "Return a Lisp object read using the minibuffer.\n\
445Prompt with PROMPT. If non-nil, optional second arg INITIAL-CONTENTS\n\
446is a string to insert in the minibuffer before reading.")
447 (prompt, initial_contents)
448 Lisp_Object prompt, initial_contents;
449{
450 CHECK_STRING (prompt, 0);
56a98455 451 if (!NILP (initial_contents))
a1b4b084 452 CHECK_STRING (initial_contents, 1);
770970cb
RS
453 return read_minibuf (Vminibuffer_local_map, initial_contents,
454 prompt, Qnil, 1, Qminibuffer_history, make_number (0));
f927c5ae
JB
455}
456
457DEFUN ("eval-minibuffer", Feval_minibuffer, Seval_minibuffer, 1, 2, 0,
458 "Return value of Lisp expression read using the minibuffer.\n\
459Prompt with PROMPT. If non-nil, optional second arg INITIAL-CONTENTS\n\
460is a string to insert in the minibuffer before reading.")
461 (prompt, initial_contents)
462 Lisp_Object prompt, initial_contents;
463{
464 return Feval (Fread_minibuffer (prompt, initial_contents));
465}
466
467/* Functions that use the minibuffer to read various things. */
468
469DEFUN ("read-string", Fread_string, Sread_string, 1, 2, 0,
470 "Read a string from the minibuffer, prompting with string PROMPT.\n\
471If non-nil second arg INITIAL-INPUT is a string to insert before reading.")
472 (prompt, initial_input)
473 Lisp_Object prompt, initial_input;
474{
475 return Fread_from_minibuffer (prompt, initial_input, Qnil, Qnil, Qnil);
476}
477
b278606c 478DEFUN ("read-no-blanks-input", Fread_no_blanks_input, Sread_no_blanks_input, 1, 2, 0,
f927c5ae
JB
479 "Args PROMPT and INIT, strings. Read a string from the terminal, not allowing blanks.\n\
480Prompt with PROMPT, and provide INIT as an initial value of the input string.")
481 (prompt, init)
482 Lisp_Object prompt, init;
483{
484 CHECK_STRING (prompt, 0);
56a98455 485 if (! NILP (init))
f927c5ae
JB
486 CHECK_STRING (init, 1);
487
770970cb
RS
488 return read_minibuf (Vminibuffer_local_ns_map, init, prompt, Qnil, 0,
489 Qminibuffer_history, make_number (0));
f927c5ae
JB
490}
491
492DEFUN ("read-command", Fread_command, Sread_command, 1, 1, 0,
493 "One arg PROMPT, a string. Read the name of a command and return as a symbol.\n\
494Prompts with PROMPT.")
495 (prompt)
496 Lisp_Object prompt;
497{
498 return Fintern (Fcompleting_read (prompt, Vobarray, Qcommandp, Qt, Qnil, Qnil),
499 Qnil);
500}
501
502#ifdef NOTDEF
503DEFUN ("read-function", Fread_function, Sread_function, 1, 1, 0,
504 "One arg PROMPT, a string. Read the name of a function and return as a symbol.\n\
505Prompts with PROMPT.")
506 (prompt)
507 Lisp_Object prompt;
508{
509 return Fintern (Fcompleting_read (prompt, Vobarray, Qfboundp, Qt, Qnil, Qnil),
510 Qnil);
511}
512#endif /* NOTDEF */
513
514DEFUN ("read-variable", Fread_variable, Sread_variable, 1, 1, 0,
515 "One arg PROMPT, a string. Read the name of a user variable and return\n\
516it as a symbol. Prompts with PROMPT.\n\
517A user variable is one whose documentation starts with a `*' character.")
518 (prompt)
519 Lisp_Object prompt;
520{
521 return Fintern (Fcompleting_read (prompt, Vobarray,
522 Quser_variable_p, Qt, Qnil, Qnil),
523 Qnil);
524}
525
526DEFUN ("read-buffer", Fread_buffer, Sread_buffer, 1, 3, 0,
527 "One arg PROMPT, a string. Read the name of a buffer and return as a string.\n\
528Prompts with PROMPT.\n\
529Optional second arg is value to return if user enters an empty line.\n\
530If optional third arg REQUIRE-MATCH is non-nil, only existing buffer names are allowed.")
531 (prompt, def, require_match)
532 Lisp_Object prompt, def, require_match;
533{
534 Lisp_Object tem;
535 Lisp_Object args[3];
536 struct gcpro gcpro1;
537
538 if (XTYPE (def) == Lisp_Buffer)
539 def = XBUFFER (def)->name;
56a98455 540 if (!NILP (def))
f927c5ae
JB
541 {
542 args[0] = build_string ("%s(default %s) ");
543 args[1] = prompt;
544 args[2] = def;
545 prompt = Fformat (3, args);
546 }
547 GCPRO1 (def);
548 tem = Fcompleting_read (prompt, Vbuffer_alist, Qnil, require_match, Qnil, Qnil);
549 UNGCPRO;
550 if (XSTRING (tem)->size)
551 return tem;
552 return def;
553}
554\f
555DEFUN ("try-completion", Ftry_completion, Stry_completion, 2, 3, 0,
556 "Return common substring of all completions of STRING in ALIST.\n\
557Each car of each element of ALIST is tested to see if it begins with STRING.\n\
558All that match are compared together; the longest initial sequence\n\
559common to all matches is returned as a string.\n\
560If there is no match at all, nil is returned.\n\
561For an exact match, t is returned.\n\
562\n\
563ALIST can be an obarray instead of an alist.\n\
564Then the print names of all symbols in the obarray are the possible matches.\n\
565\n\
566ALIST can also be a function to do the completion itself.\n\
567It receives three arguments: the values STRING, PREDICATE and nil.\n\
568Whatever it returns becomes the value of `try-completion'.\n\
569\n\
570If optional third argument PREDICATE is non-nil,\n\
571it is used to test each possible match.\n\
572The match is a candidate only if PREDICATE returns non-nil.\n\
573The argument given to PREDICATE is the alist element or the symbol from the obarray.")
574 (string, alist, pred)
575 Lisp_Object string, alist, pred;
576{
577 Lisp_Object bestmatch, tail, elt, eltstring;
578 int bestmatchsize;
579 int compare, matchsize;
56a98455 580 int list = CONSP (alist) || NILP (alist);
f927c5ae
JB
581 int index, obsize;
582 int matchcount = 0;
583 Lisp_Object bucket, zero, end, tem;
584 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
585
586 CHECK_STRING (string, 0);
587 if (!list && XTYPE (alist) != Lisp_Vector)
588 return call3 (alist, string, pred, Qnil);
589
590 bestmatch = Qnil;
591
592 /* If ALIST is not a list, set TAIL just for gc pro. */
593 tail = alist;
594 if (! list)
595 {
596 index = 0;
597 obsize = XVECTOR (alist)->size;
598 bucket = XVECTOR (alist)->contents[index];
599 }
600
601 while (1)
602 {
603 /* Get the next element of the alist or obarray. */
604 /* Exit the loop if the elements are all used up. */
605 /* elt gets the alist element or symbol.
606 eltstring gets the name to check as a completion. */
607
608 if (list)
609 {
56a98455 610 if (NILP (tail))
f927c5ae
JB
611 break;
612 elt = Fcar (tail);
613 eltstring = Fcar (elt);
614 tail = Fcdr (tail);
615 }
616 else
617 {
618 if (XFASTINT (bucket) != 0)
619 {
620 elt = bucket;
621 eltstring = Fsymbol_name (elt);
622 if (XSYMBOL (bucket)->next)
623 XSETSYMBOL (bucket, XSYMBOL (bucket)->next);
624 else
625 XFASTINT (bucket) = 0;
626 }
627 else if (++index >= obsize)
628 break;
629 else
630 {
631 bucket = XVECTOR (alist)->contents[index];
632 continue;
633 }
634 }
635
636 /* Is this element a possible completion? */
637
638 if (XTYPE (eltstring) == Lisp_String &&
639 XSTRING (string)->size <= XSTRING (eltstring)->size &&
640 0 > scmp (XSTRING (eltstring)->data, XSTRING (string)->data,
641 XSTRING (string)->size))
642 {
643 /* Yes. */
644 /* Ignore this element if there is a predicate
645 and the predicate doesn't like it. */
646
56a98455 647 if (!NILP (pred))
f927c5ae
JB
648 {
649 if (EQ (pred, Qcommandp))
650 tem = Fcommandp (elt);
651 else
652 {
653 GCPRO4 (tail, string, eltstring, bestmatch);
654 tem = call1 (pred, elt);
655 UNGCPRO;
656 }
56a98455 657 if (NILP (tem)) continue;
f927c5ae
JB
658 }
659
660 /* Update computation of how much all possible completions match */
661
662 matchcount++;
56a98455 663 if (NILP (bestmatch))
f927c5ae
JB
664 bestmatch = eltstring, bestmatchsize = XSTRING (eltstring)->size;
665 else
666 {
667 compare = min (bestmatchsize, XSTRING (eltstring)->size);
668 matchsize = scmp (XSTRING (bestmatch)->data,
669 XSTRING (eltstring)->data,
670 compare);
52b14ac0
JB
671 if (matchsize < 0)
672 matchsize = compare;
673 if (completion_ignore_case)
674 {
675 /* If this is an exact match except for case,
676 use it as the best match rather than one that is not an
677 exact match. This way, we get the case pattern
678 of the actual match. */
679 if ((matchsize == XSTRING (eltstring)->size
680 && matchsize < XSTRING (bestmatch)->size)
681 ||
682 /* If there is more than one exact match ignoring case,
683 and one of them is exact including case,
684 prefer that one. */
685 /* If there is no exact match ignoring case,
686 prefer a match that does not change the case
687 of the input. */
688 ((matchsize == XSTRING (eltstring)->size)
689 ==
690 (matchsize == XSTRING (bestmatch)->size)
691 && !bcmp (XSTRING (eltstring)->data,
692 XSTRING (string)->data, XSTRING (string)->size)
693 && bcmp (XSTRING (bestmatch)->data,
694 XSTRING (string)->data, XSTRING (string)->size)))
695 bestmatch = eltstring;
696 }
697 bestmatchsize = matchsize;
f927c5ae
JB
698 }
699 }
700 }
701
56a98455 702 if (NILP (bestmatch))
f927c5ae 703 return Qnil; /* No completions found */
52b14ac0
JB
704 /* If we are ignoring case, and there is no exact match,
705 and no additional text was supplied,
706 don't change the case of what the user typed. */
707 if (completion_ignore_case && bestmatchsize == XSTRING (string)->size
708 && XSTRING (bestmatch)->size > bestmatchsize)
709 return string;
710
711 /* Return t if the supplied string is an exact match (counting case);
712 it does not require any change to be made. */
713 if (matchcount == 1 && bestmatchsize == XSTRING (string)->size
714 && !bcmp (XSTRING (bestmatch)->data, XSTRING (string)->data,
715 bestmatchsize))
f927c5ae
JB
716 return Qt;
717
718 XFASTINT (zero) = 0; /* Else extract the part in which */
719 XFASTINT (end) = bestmatchsize; /* all completions agree */
720 return Fsubstring (bestmatch, zero, end);
721}
722
723/* Compare exactly LEN chars of strings at S1 and S2,
724 ignoring case if appropriate.
725 Return -1 if strings match,
726 else number of chars that match at the beginning. */
727
728scmp (s1, s2, len)
729 register char *s1, *s2;
730 int len;
731{
732 register int l = len;
733
734 if (completion_ignore_case)
735 {
736 while (l && DOWNCASE (*s1++) == DOWNCASE (*s2++))
737 l--;
738 }
739 else
740 {
741 while (l && *s1++ == *s2++)
742 l--;
743 }
744 if (l == 0)
745 return -1;
746 else return len - l;
747}
748\f
749DEFUN ("all-completions", Fall_completions, Sall_completions, 2, 3, 0,
750 "Search for partial matches to STRING in ALIST.\n\
751Each car of each element of ALIST is tested to see if it begins with STRING.\n\
752The value is a list of all the strings from ALIST that match.\n\
753ALIST can be an obarray instead of an alist.\n\
754Then the print names of all symbols in the obarray are the possible matches.\n\
755\n\
756ALIST can also be a function to do the completion itself.\n\
757It receives three arguments: the values STRING, PREDICATE and t.\n\
758Whatever it returns becomes the value of `all-completion'.\n\
759\n\
760If optional third argument PREDICATE is non-nil,\n\
761it is used to test each possible match.\n\
762The match is a candidate only if PREDICATE returns non-nil.\n\
763The argument given to PREDICATE is the alist element or the symbol from the obarray.")
764 (string, alist, pred)
765 Lisp_Object string, alist, pred;
766{
767 Lisp_Object tail, elt, eltstring;
768 Lisp_Object allmatches;
56a98455 769 int list = CONSP (alist) || NILP (alist);
f927c5ae
JB
770 int index, obsize;
771 Lisp_Object bucket, tem;
772 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
773
774 CHECK_STRING (string, 0);
775 if (!list && XTYPE (alist) != Lisp_Vector)
776 {
777 return call3 (alist, string, pred, Qt);
778 }
779 allmatches = Qnil;
780
781 /* If ALIST is not a list, set TAIL just for gc pro. */
782 tail = alist;
783 if (! list)
784 {
785 index = 0;
786 obsize = XVECTOR (alist)->size;
787 bucket = XVECTOR (alist)->contents[index];
788 }
789
790 while (1)
791 {
792 /* Get the next element of the alist or obarray. */
793 /* Exit the loop if the elements are all used up. */
794 /* elt gets the alist element or symbol.
795 eltstring gets the name to check as a completion. */
796
797 if (list)
798 {
56a98455 799 if (NILP (tail))
f927c5ae
JB
800 break;
801 elt = Fcar (tail);
802 eltstring = Fcar (elt);
803 tail = Fcdr (tail);
804 }
805 else
806 {
807 if (XFASTINT (bucket) != 0)
808 {
809 elt = bucket;
810 eltstring = Fsymbol_name (elt);
811 if (XSYMBOL (bucket)->next)
812 XSETSYMBOL (bucket, XSYMBOL (bucket)->next);
813 else
814 XFASTINT (bucket) = 0;
815 }
816 else if (++index >= obsize)
817 break;
818 else
819 {
820 bucket = XVECTOR (alist)->contents[index];
821 continue;
822 }
823 }
824
825 /* Is this element a possible completion? */
826
2cbaf886
RS
827 if (XTYPE (eltstring) == Lisp_String
828 && XSTRING (string)->size <= XSTRING (eltstring)->size
829 /* Reject alternatives that start with space
830 unless the input starts with space. */
831 && ((XSTRING (string)->size > 0 && XSTRING (string)->data[0] == ' ')
832 || XSTRING (eltstring)->data[0] != ' ')
833 && 0 > scmp (XSTRING (eltstring)->data, XSTRING (string)->data,
834 XSTRING (string)->size))
f927c5ae
JB
835 {
836 /* Yes. */
837 /* Ignore this element if there is a predicate
838 and the predicate doesn't like it. */
839
56a98455 840 if (!NILP (pred))
f927c5ae
JB
841 {
842 if (EQ (pred, Qcommandp))
843 tem = Fcommandp (elt);
844 else
845 {
846 GCPRO4 (tail, eltstring, allmatches, string);
847 tem = call1 (pred, elt);
848 UNGCPRO;
849 }
56a98455 850 if (NILP (tem)) continue;
f927c5ae
JB
851 }
852 /* Ok => put it on the list. */
853 allmatches = Fcons (eltstring, allmatches);
854 }
855 }
856
857 return Fnreverse (allmatches);
858}
859\f
860Lisp_Object Vminibuffer_completion_table, Qminibuffer_completion_table;
861Lisp_Object Vminibuffer_completion_predicate, Qminibuffer_completion_predicate;
862Lisp_Object Vminibuffer_completion_confirm, Qminibuffer_completion_confirm;
863
b9d721de
JB
864/* This comment supplies the doc string for completing-read,
865 for make-docfile to see. We cannot put this in the real DEFUN
866 due to limits in the Unix cpp.
867
f927c5ae
JB
868DEFUN ("completing-read", Fcompleting_read, Scompleting_read, 2, 6, 0,
869 "Read a string in the minibuffer, with completion.\n\
770970cb 870Args: PROMPT, TABLE, PREDICATE, REQUIRE-MATCH, INITIAL-INPUT, HIST.\n\
f927c5ae
JB
871PROMPT is a string to prompt with; normally it ends in a colon and a space.\n\
872TABLE is an alist whose elements' cars are strings, or an obarray.\n\
873PREDICATE limits completion to a subset of TABLE.\n\
874See `try-completion' for more details on completion, TABLE, and PREDICATE.\n\
875If REQUIRE-MATCH is non-nil, the user is not allowed to exit unless\n\
876 the input is (or completes to) an element of TABLE.\n\
877 If it is also not t, Return does not exit if it does non-null completion.\n\
878If INITIAL-INPUT is non-nil, insert it in the minibuffer initially.\n\
770970cb
RS
879 If it is (STRING . POSITION), the initial input\n\
880 is STRING, but point is placed POSITION characters into the string.\n\
881HIST, if non-nil, specifies a history list\n\
882 and optionally the initial position in the list.\n\
883 It can be a symbol, which is the history list variable to use,\n\
884 or it can be a cons cell (HISTVAR . HISTPOS).\n\
885 In that case, HISTVAR is the history list variable to use,\n\
886 and HISTPOS is the initial position (the position in the list\n\
887 which INITIAL-CONTENTS corresponds to).\n\
888 Positions are counted starting from 1 at the beginning of the list.\n\
889Completion ignores case if the ambient value of\n\
b9d721de
JB
890 `completion-ignore-case' is non-nil."
891*/
892DEFUN ("completing-read", Fcompleting_read, Scompleting_read, 2, 6, 0,
893 0 /* See immediately above */)
770970cb
RS
894 (prompt, table, pred, require_match, init, hist)
895 Lisp_Object prompt, table, pred, require_match, init, hist;
f927c5ae 896{
770970cb
RS
897 Lisp_Object val, histvar, histpos, position;
898 int pos = 0;
f927c5ae
JB
899 int count = specpdl_ptr - specpdl;
900 specbind (Qminibuffer_completion_table, table);
901 specbind (Qminibuffer_completion_predicate, pred);
902 specbind (Qminibuffer_completion_confirm,
903 EQ (require_match, Qt) ? Qnil : Qt);
904 last_exact_completion = Qnil;
770970cb
RS
905
906 position = Qnil;
907 if (!NILP (init))
908 {
909 if (XTYPE (init) == Lisp_Cons)
910 {
911 position = Fcdr (init);
912 init = Fcar (init);
913 }
914 CHECK_STRING (init, 0);
915 if (!NILP (position))
916 {
917 CHECK_NUMBER (position, 0);
918 /* Convert to distance from end of input. */
5dadd3a2 919 pos = XINT (position) - XSTRING (init)->size;
770970cb
RS
920 }
921 }
922
923 if (XTYPE (hist) == Lisp_Symbol)
924 {
925 histvar = hist;
926 histpos = Qnil;
927 }
928 else
929 {
930 histvar = Fcar_safe (hist);
931 histpos = Fcdr_safe (hist);
932 }
933 if (NILP (histvar))
934 histvar = Qminibuffer_history;
935 if (NILP (histpos))
936 XFASTINT (histpos) = 0;
937
56a98455 938 val = read_minibuf (NILP (require_match)
f927c5ae
JB
939 ? Vminibuffer_local_completion_map
940 : Vminibuffer_local_must_match_map,
85b5fe07 941 init, prompt, make_number (pos), 0,
770970cb 942 histvar, histpos);
f927c5ae
JB
943 return unbind_to (count, val);
944}
945\f
946/* Temporarily display the string M at the end of the current
947 minibuffer contents. This is used to display things like
948 "[No Match]" when the user requests a completion for a prefix
949 that has no possible completions, and other quick, unobtrusive
950 messages. */
951
952temp_echo_area_glyphs (m)
953 char *m;
954{
f927c5ae
JB
955 int osize = ZV;
956 Lisp_Object oinhibit;
957 oinhibit = Vinhibit_quit;
958
896adf84
JB
959 /* Clear out any old echo-area message to make way for our new thing. */
960 message (0);
f927c5ae
JB
961
962 SET_PT (osize);
963 insert_string (m);
964 SET_PT (osize);
965 Vinhibit_quit = Qt;
966 Fsit_for (make_number (2), Qnil, Qnil);
967 del_range (point, ZV);
56a98455 968 if (!NILP (Vquit_flag))
f927c5ae
JB
969 {
970 Vquit_flag = Qnil;
dbc4e1c1 971 unread_command_events = Fcons (make_number (Ctl ('g')), Qnil);
f927c5ae
JB
972 }
973 Vinhibit_quit = oinhibit;
974}
975
976Lisp_Object Fminibuffer_completion_help ();
52b14ac0 977Lisp_Object assoc_for_completion ();
f927c5ae
JB
978
979/* returns:
980 * 0 no possible completion
981 * 1 was already an exact and unique completion
982 * 3 was already an exact completion
983 * 4 completed to an exact completion
984 * 5 some completion happened
985 * 6 no completion happened
986 */
987int
988do_completion ()
989{
990 Lisp_Object completion, tem;
991 int completedp;
992 Lisp_Object last;
993
994 completion = Ftry_completion (Fbuffer_string (), Vminibuffer_completion_table,
995 Vminibuffer_completion_predicate);
996 last = last_exact_completion;
997 last_exact_completion = Qnil;
998
56a98455 999 if (NILP (completion))
f927c5ae
JB
1000 {
1001 bitch_at_user ();
1002 temp_echo_area_glyphs (" [No match]");
1003 return 0;
1004 }
1005
1006 if (EQ (completion, Qt)) /* exact and unique match */
1007 return 1;
1008
1009 /* compiler bug */
1010 tem = Fstring_equal (completion, Fbuffer_string());
56a98455 1011 if (completedp = NILP (tem))
f927c5ae
JB
1012 {
1013 Ferase_buffer (); /* Some completion happened */
1014 Finsert (1, &completion);
1015 }
1016
1017 /* It did find a match. Do we match some possibility exactly now? */
1018 if (CONSP (Vminibuffer_completion_table)
56a98455 1019 || NILP (Vminibuffer_completion_table))
52b14ac0
JB
1020 tem = assoc_for_completion (Fbuffer_string (),
1021 Vminibuffer_completion_table);
f927c5ae
JB
1022 else if (XTYPE (Vminibuffer_completion_table) == Lisp_Vector)
1023 {
1024 /* the primitive used by Fintern_soft */
1025 extern Lisp_Object oblookup ();
1026
1027 tem = Fbuffer_string ();
1028 /* Bypass intern-soft as that loses for nil */
1029 tem = oblookup (Vminibuffer_completion_table,
1030 XSTRING (tem)->data, XSTRING (tem)->size);
1031 if (XTYPE (tem) != Lisp_Symbol)
1032 tem = Qnil;
56a98455 1033 else if (!NILP (Vminibuffer_completion_predicate))
f927c5ae
JB
1034 tem = call1 (Vminibuffer_completion_predicate, tem);
1035 else
1036 tem = Qt;
1037 }
1038 else
1039 tem = call3 (Vminibuffer_completion_table,
1040 Fbuffer_string (),
1041 Vminibuffer_completion_predicate,
1042 Qlambda);
1043
56a98455 1044 if (NILP (tem))
f927c5ae
JB
1045 { /* not an exact match */
1046 if (completedp)
1047 return 5;
1048 else if (auto_help)
1049 Fminibuffer_completion_help ();
1050 else
1051 temp_echo_area_glyphs (" [Next char not unique]");
1052 return 6;
1053 }
1054 else if (completedp)
1055 return 4;
1056 /* If the last exact completion and this one were the same,
1057 it means we've already given a "Complete but not unique"
52b14ac0 1058 message and the user's hit TAB again, so now we give him help. */
f927c5ae 1059 last_exact_completion = completion;
56a98455 1060 if (!NILP (last))
f927c5ae
JB
1061 {
1062 tem = Fbuffer_string ();
56a98455 1063 if (!NILP (Fequal (tem, last)))
f927c5ae
JB
1064 Fminibuffer_completion_help ();
1065 }
1066 return 3;
f927c5ae
JB
1067}
1068
52b14ac0
JB
1069/* Like assoc but assumes KEY is a string, and ignores case if appropriate. */
1070
1071Lisp_Object
1072assoc_for_completion (key, list)
1073 register Lisp_Object key;
1074 Lisp_Object list;
1075{
1076 register Lisp_Object tail;
1077
1078 if (completion_ignore_case)
1079 key = Fupcase (key);
1080
56a98455 1081 for (tail = list; !NILP (tail); tail = Fcdr (tail))
52b14ac0
JB
1082 {
1083 register Lisp_Object elt, tem, thiscar;
1084 elt = Fcar (tail);
1085 if (!CONSP (elt)) continue;
1086 thiscar = Fcar (elt);
1087 if (XTYPE (thiscar) != Lisp_String)
1088 continue;
1089 if (completion_ignore_case)
1090 thiscar = Fupcase (thiscar);
1091 tem = Fequal (thiscar, key);
56a98455 1092 if (!NILP (tem)) return elt;
52b14ac0
JB
1093 QUIT;
1094 }
1095 return Qnil;
1096}
f927c5ae
JB
1097
1098DEFUN ("minibuffer-complete", Fminibuffer_complete, Sminibuffer_complete, 0, 0, "",
1099 "Complete the minibuffer contents as far as possible.")
1100 ()
1101{
1102 register int i = do_completion ();
1103 switch (i)
1104 {
1105 case 0:
1106 return Qnil;
1107
1108 case 1:
1109 temp_echo_area_glyphs (" [Sole completion]");
1110 break;
1111
1112 case 3:
1113 temp_echo_area_glyphs (" [Complete, but not unique]");
1114 break;
1115 }
1116
1117 return Qt;
1118}
1119
1120DEFUN ("minibuffer-complete-and-exit", Fminibuffer_complete_and_exit,
1121 Sminibuffer_complete_and_exit, 0, 0, "",
1122 "Complete the minibuffer contents, and maybe exit.\n\
1123Exit if the name is valid with no completion needed.\n\
1124If name was completed to a valid match,\n\
1125a repetition of this command will exit.")
1126 ()
1127{
1128 register int i;
1129
1130 /* Allow user to specify null string */
1131 if (BEGV == ZV)
1132 goto exit;
1133
1134 i = do_completion ();
1135 switch (i)
1136 {
1137 case 1:
1138 case 3:
1139 goto exit;
1140
1141 case 4:
56a98455 1142 if (!NILP (Vminibuffer_completion_confirm))
f927c5ae
JB
1143 {
1144 temp_echo_area_glyphs (" [Confirm]");
1145 return Qnil;
1146 }
1147 else
1148 goto exit;
1149
1150 default:
1151 return Qnil;
1152 }
1153 exit:
1154 Fthrow (Qexit, Qnil);
1155 /* NOTREACHED */
1156}
1157
1158DEFUN ("minibuffer-complete-word", Fminibuffer_complete_word, Sminibuffer_complete_word,
1159 0, 0, "",
1160 "Complete the minibuffer contents at most a single word.\n\
1161After one word is completed as much as possible, a space or hyphen\n\
1162is added, provided that matches some possible completion.")
1163 ()
1164{
1165 Lisp_Object completion, tem;
1166 register int i;
1167 register unsigned char *completion_string;
b278606c
BF
1168 struct gcpro gcpro1;
1169
1170 /* We keep calling Fbuffer_string rather than arrange for GC to
1171 hold onto a pointer to one of the strings thus made. */
f927c5ae
JB
1172
1173 completion = Ftry_completion (Fbuffer_string (),
1174 Vminibuffer_completion_table,
1175 Vminibuffer_completion_predicate);
56a98455 1176 if (NILP (completion))
f927c5ae
JB
1177 {
1178 bitch_at_user ();
1179 temp_echo_area_glyphs (" [No match]");
1180 return Qnil;
1181 }
1182 if (EQ (completion, Qt))
1183 return Qnil;
1184
b278606c 1185#if 0 /* How the below code used to look, for reference. */
f927c5ae
JB
1186 tem = Fbuffer_string ();
1187 b = XSTRING (tem)->data;
1188 i = ZV - 1 - XSTRING (completion)->size;
1189 p = XSTRING (completion)->data;
1190 if (i > 0 ||
1191 0 <= scmp (b, p, ZV - 1))
1192 {
1193 i = 1;
1194 /* Set buffer to longest match of buffer tail and completion head. */
1195 while (0 <= scmp (b + i, p, ZV - 1 - i))
1196 i++;
1197 del_range (1, i + 1);
1198 SET_PT (ZV);
1199 }
1200#else /* Rewritten code */
1201 {
1202 register unsigned char *buffer_string;
1203 int buffer_length, completion_length;
1204
1205 tem = Fbuffer_string ();
719b4a40
RS
1206 /* If reading a file name,
1207 expand any $ENVVAR refs in the buffer and in TEM. */
1208 if (EQ (Vminibuffer_completion_table, Qread_file_name_internal))
1209 {
1210 Lisp_Object substituted;
1211 substituted = Fsubstitute_in_file_name (tem);
1212 if (! EQ (substituted, tem))
1213 {
1214 tem = substituted;
1215 Ferase_buffer ();
3cab9ae4 1216 insert_from_string (tem, 0, XSTRING (tem)->size, 0);
719b4a40
RS
1217 }
1218 }
f927c5ae
JB
1219 buffer_string = XSTRING (tem)->data;
1220 completion_string = XSTRING (completion)->data;
1221 buffer_length = XSTRING (tem)->size; /* ie ZV - BEGV */
1222 completion_length = XSTRING (completion)->size;
1223 i = buffer_length - completion_length;
1224 /* Mly: I don't understand what this is supposed to do AT ALL */
1225 if (i > 0 ||
1226 0 <= scmp (buffer_string, completion_string, buffer_length))
1227 {
1228 /* Set buffer to longest match of buffer tail and completion head. */
1229 if (i <= 0) i = 1;
1230 buffer_string += i;
1231 buffer_length -= i;
1232 while (0 <= scmp (buffer_string++, completion_string, buffer_length--))
1233 i++;
1234 del_range (1, i + 1);
1235 SET_PT (ZV);
1236 }
1237 }
1238#endif /* Rewritten code */
1239 i = ZV - BEGV;
1240
1241 /* If completion finds next char not unique,
b278606c 1242 consider adding a space or a hyphen. */
f927c5ae
JB
1243 if (i == XSTRING (completion)->size)
1244 {
b278606c 1245 GCPRO1 (completion);
f927c5ae
JB
1246 tem = Ftry_completion (concat2 (Fbuffer_string (), build_string (" ")),
1247 Vminibuffer_completion_table,
1248 Vminibuffer_completion_predicate);
b278606c
BF
1249 UNGCPRO;
1250
f927c5ae
JB
1251 if (XTYPE (tem) == Lisp_String)
1252 completion = tem;
1253 else
1254 {
b278606c
BF
1255 GCPRO1 (completion);
1256 tem =
1257 Ftry_completion (concat2 (Fbuffer_string (), build_string ("-")),
1258 Vminibuffer_completion_table,
1259 Vminibuffer_completion_predicate);
1260 UNGCPRO;
1261
f927c5ae
JB
1262 if (XTYPE (tem) == Lisp_String)
1263 completion = tem;
1264 }
1265 }
1266
1267 /* Now find first word-break in the stuff found by completion.
1268 i gets index in string of where to stop completing. */
b278606c 1269
f927c5ae
JB
1270 completion_string = XSTRING (completion)->data;
1271
1272 for (; i < XSTRING (completion)->size; i++)
1273 if (SYNTAX (completion_string[i]) != Sword) break;
1274 if (i < XSTRING (completion)->size)
1275 i = i + 1;
1276
1277 /* If got no characters, print help for user. */
1278
1279 if (i == ZV - BEGV)
1280 {
1281 if (auto_help)
1282 Fminibuffer_completion_help ();
1283 return Qnil;
1284 }
1285
1286 /* Otherwise insert in minibuffer the chars we got */
1287
1288 Ferase_buffer ();
3cab9ae4 1289 insert_from_string (completion, 0, i, 1);
f927c5ae
JB
1290 return Qt;
1291}
1292\f
1293DEFUN ("display-completion-list", Fdisplay_completion_list, Sdisplay_completion_list,
1294 1, 1, 0,
2dc2b736 1295 "Display the list of completions, COMPLETIONS, using `standard-output'.\n\
f927c5ae 1296Each element may be just a symbol or string\n\
2d7e41fe
RS
1297or may be a list of two strings to be printed as if concatenated.\n\
1298`standard-output' must be a buffer.\n\
1299At the end, run the normal hook `completion-setup-hook'.\n\
1300It can find the completion buffer in `standard-output'.")
f927c5ae
JB
1301 (completions)
1302 Lisp_Object completions;
1303{
1304 register Lisp_Object tail, elt;
1305 register int i;
2dc2b736 1306 int column = 0;
f927c5ae
JB
1307 /* No GCPRO needed, since (when it matters) every variable
1308 points to a non-string that is pointed to by COMPLETIONS. */
2dc2b736
RS
1309 struct buffer *old = current_buffer;
1310 if (XTYPE (Vstandard_output) == Lisp_Buffer)
1311 set_buffer_internal (XBUFFER (Vstandard_output));
f927c5ae 1312
56a98455 1313 if (NILP (completions))
cfc736bf
RS
1314 write_string ("There are no possible completions of what you have typed.",
1315 -1);
f927c5ae
JB
1316 else
1317 {
2dc2b736 1318 write_string ("Possible completions are:", -1);
56a98455 1319 for (tail = completions, i = 0; !NILP (tail); tail = Fcdr (tail), i++)
f927c5ae
JB
1320 {
1321 /* this needs fixing for the case of long completions
1322 and/or narrow windows */
1323 /* Sadly, the window it will appear in is not known
1324 until after the text has been made. */
1325 if (i & 1)
2dc2b736
RS
1326 {
1327 if (XTYPE (Vstandard_output) == Lisp_Buffer)
1328 Findent_to (make_number (35), make_number (1));
1329 else
1330 {
1331 do
1332 {
1333 write_string (" ", -1);
1334 column++;
1335 }
1336 while (column < 35);
1337 }
1338 }
f927c5ae 1339 else
2dc2b736
RS
1340 {
1341 Fterpri (Qnil);
1342 column = 0;
1343 }
f927c5ae
JB
1344 elt = Fcar (tail);
1345 if (CONSP (elt))
1346 {
2dc2b736
RS
1347 if (XTYPE (Vstandard_output) != Lisp_Buffer)
1348 {
07accdfe 1349 Lisp_Object tem;
2dc2b736
RS
1350 tem = Flength (Fcar (elt));
1351 column += XINT (tem);
1352 tem = Flength (Fcar (Fcdr (elt)));
1353 column += XINT (tem);
1354 }
f927c5ae
JB
1355 Fprinc (Fcar (elt), Qnil);
1356 Fprinc (Fcar (Fcdr (elt)), Qnil);
1357 }
1358 else
2dc2b736
RS
1359 {
1360 if (XTYPE (Vstandard_output) != Lisp_Buffer)
1361 {
1362 Lisp_Object tem;
f1b28218 1363 tem = Flength (elt);
2dc2b736
RS
1364 column += XINT (tem);
1365 }
1366 Fprinc (elt, Qnil);
1367 }
f927c5ae
JB
1368 }
1369 }
2dc2b736 1370
2d7e41fe
RS
1371 if (XTYPE (Vstandard_output) == Lisp_Buffer)
1372 set_buffer_internal (old);
1373
cfc736bf
RS
1374 if (!NILP (Vrun_hooks))
1375 call1 (Vrun_hooks, intern ("completion-setup-hook"));
1376
f927c5ae
JB
1377 return Qnil;
1378}
1379
1380DEFUN ("minibuffer-completion-help", Fminibuffer_completion_help, Sminibuffer_completion_help,
1381 0, 0, "",
1382 "Display a list of possible completions of the current minibuffer contents.")
1383 ()
1384{
1385 Lisp_Object completions;
1386
1387 message ("Making completion list...");
1388 completions = Fall_completions (Fbuffer_string (),
1389 Vminibuffer_completion_table,
1390 Vminibuffer_completion_predicate);
1391 echo_area_glyphs = 0;
1392
56a98455 1393 if (NILP (completions))
f927c5ae
JB
1394 {
1395 bitch_at_user ();
1396 temp_echo_area_glyphs (" [No completions]");
1397 }
1398 else
1399 internal_with_output_to_temp_buffer ("*Completions*",
1400 Fdisplay_completion_list,
1401 Fsort (completions, Qstring_lessp));
1402 return Qnil;
1403}
1404\f
1405DEFUN ("self-insert-and-exit", Fself_insert_and_exit, Sself_insert_and_exit, 0, 0, "",
1406 "Terminate minibuffer input.")
1407 ()
1408{
1409 if (XTYPE (last_command_char) == Lisp_Int)
1410 internal_self_insert (last_command_char, 0);
1411 else
1412 bitch_at_user ();
1413
1414 Fthrow (Qexit, Qnil);
1415}
1416
1417DEFUN ("exit-minibuffer", Fexit_minibuffer, Sexit_minibuffer, 0, 0, "",
1418 "Terminate this minibuffer argument.")
1419 ()
1420{
1421 Fthrow (Qexit, Qnil);
1422}
1423
1424DEFUN ("minibuffer-depth", Fminibuffer_depth, Sminibuffer_depth, 0, 0, 0,
1425 "Return current depth of activations of minibuffer, a nonnegative integer.")
1426 ()
1427{
1428 return make_number (minibuf_level);
1429}
1430
1431\f
1432init_minibuf_once ()
1433{
1434 Vminibuffer_list = Qnil;
1435 staticpro (&Vminibuffer_list);
1436}
1437
1438syms_of_minibuf ()
1439{
1440 minibuf_level = 0;
1441 minibuf_prompt = 0;
1442 minibuf_save_vector_size = 5;
1443 minibuf_save_vector = (struct minibuf_save_data *) malloc (5 * sizeof (struct minibuf_save_data));
1444
719b4a40
RS
1445 Qread_file_name_internal = intern ("read-file-name-internal");
1446 staticpro (&Qread_file_name_internal);
1447
f927c5ae
JB
1448 Qminibuffer_completion_table = intern ("minibuffer-completion-table");
1449 staticpro (&Qminibuffer_completion_table);
1450
1451 Qminibuffer_completion_confirm = intern ("minibuffer-completion-confirm");
1452 staticpro (&Qminibuffer_completion_confirm);
1453
1454 Qminibuffer_completion_predicate = intern ("minibuffer-completion-predicate");
1455 staticpro (&Qminibuffer_completion_predicate);
1456
1457 staticpro (&last_minibuf_string);
1458 last_minibuf_string = Qnil;
1459
1460 Quser_variable_p = intern ("user-variable-p");
1461 staticpro (&Quser_variable_p);
1462
770970cb
RS
1463 Qminibuffer_history = intern ("minibuffer-history");
1464 staticpro (&Qminibuffer_history);
f927c5ae 1465
5c781212
RS
1466 Qminibuffer_setup_hook = intern ("minibuffer-setup-hook");
1467 staticpro (&Qminibuffer_setup_hook);
1468
1469 DEFVAR_LISP ("minibuffer-setup-hook", &Vminibuffer_setup_hook,
1470 "Normal hook run just after entry to minibuffer.");
1471 Vminibuffer_setup_hook = Qnil;
1472
f927c5ae
JB
1473 DEFVAR_BOOL ("completion-auto-help", &auto_help,
1474 "*Non-nil means automatically provide help for invalid completion input.");
1475 auto_help = 1;
1476
1477 DEFVAR_BOOL ("completion-ignore-case", &completion_ignore_case,
1478 "Non-nil means don't consider case significant in completion.");
1479 completion_ignore_case = 0;
1480
1481 DEFVAR_BOOL ("enable-recursive-minibuffers", &enable_recursive_minibuffers,
1482 "*Non-nil means to allow minibuffer commands while in the minibuffer.\n\
1483More precisely, this variable makes a difference when the minibuffer window\n\
1484is the selected window. If you are in some other window, minibuffer commands\n\
1485are allowed even if a minibuffer is active.");
1486 enable_recursive_minibuffers = 0;
1487
1488 DEFVAR_LISP ("minibuffer-completion-table", &Vminibuffer_completion_table,
1489 "Alist or obarray used for completion in the minibuffer.\n\
1490This becomes the ALIST argument to `try-completion' and `all-completion'.\n\
1491\n\
1492The value may alternatively be a function, which is given three arguments:\n\
1493 STRING, the current buffer contents;\n\
1494 PREDICATE, the predicate for filtering possible matches;\n\
1495 CODE, which says what kind of things to do.\n\
1496CODE can be nil, t or `lambda'.\n\
1497nil means to return the best completion of STRING, or nil if there is none.\n\
1498t means to return a list of all possible completions of STRING.\n\
1499`lambda' means to return t if STRING is a valid completion as it stands.");
1500 Vminibuffer_completion_table = Qnil;
1501
1502 DEFVAR_LISP ("minibuffer-completion-predicate", &Vminibuffer_completion_predicate,
1503 "Within call to `completing-read', this holds the PREDICATE argument.");
1504 Vminibuffer_completion_predicate = Qnil;
1505
1506 DEFVAR_LISP ("minibuffer-completion-confirm", &Vminibuffer_completion_confirm,
1507 "Non-nil => demand confirmation of completion before exiting minibuffer.");
1508 Vminibuffer_completion_confirm = Qnil;
1509
1510 DEFVAR_LISP ("minibuffer-help-form", &Vminibuffer_help_form,
1511 "Value that `help-form' takes on inside the minibuffer.");
1512 Vminibuffer_help_form = Qnil;
1513
770970cb
RS
1514 DEFVAR_LISP ("minibuffer-history-variable", &Vminibuffer_history_variable,
1515 "History list symbol to add minibuffer values to.\n\
1516Each minibuffer output is added with\n\
1517 (set minibuffer-history-variable\n\
1518 (cons STRING (symbol-value minibuffer-history-variable)))");
1519 XFASTINT (Vminibuffer_history_variable) = 0;
1520
1521 DEFVAR_LISP ("minibuffer-history-position", &Vminibuffer_history_position,
1522 "Current position of redoing in the history list.");
1523 Vminibuffer_history_position = Qnil;
1524
6a9ee000
RS
1525 DEFVAR_BOOL ("minibuffer-auto-raise", &minibuffer_auto_raise,
1526 "*Non-nil means entering the minibuffer raises the minibuffer's frame.");
1527 minibuffer_auto_raise = 0;
1528
f927c5ae
JB
1529 defsubr (&Sread_from_minibuffer);
1530 defsubr (&Seval_minibuffer);
1531 defsubr (&Sread_minibuffer);
1532 defsubr (&Sread_string);
1533 defsubr (&Sread_command);
1534 defsubr (&Sread_variable);
1535 defsubr (&Sread_buffer);
1536 defsubr (&Sread_no_blanks_input);
1537 defsubr (&Sminibuffer_depth);
1538
1539 defsubr (&Stry_completion);
1540 defsubr (&Sall_completions);
1541 defsubr (&Scompleting_read);
1542 defsubr (&Sminibuffer_complete);
1543 defsubr (&Sminibuffer_complete_word);
1544 defsubr (&Sminibuffer_complete_and_exit);
1545 defsubr (&Sdisplay_completion_list);
1546 defsubr (&Sminibuffer_completion_help);
1547
1548 defsubr (&Sself_insert_and_exit);
1549 defsubr (&Sexit_minibuffer);
1550
1551}
1552
1553keys_of_minibuf ()
1554{
1555 initial_define_key (Vminibuffer_local_map, Ctl ('g'),
1556 "abort-recursive-edit");
1557 initial_define_key (Vminibuffer_local_map, Ctl ('m'),
1558 "exit-minibuffer");
1559 initial_define_key (Vminibuffer_local_map, Ctl ('j'),
1560 "exit-minibuffer");
1561
1562 initial_define_key (Vminibuffer_local_ns_map, Ctl ('g'),
1563 "abort-recursive-edit");
1564 initial_define_key (Vminibuffer_local_ns_map, Ctl ('m'),
1565 "exit-minibuffer");
1566 initial_define_key (Vminibuffer_local_ns_map, Ctl ('j'),
1567 "exit-minibuffer");
1568
1569 initial_define_key (Vminibuffer_local_ns_map, ' ',
1570 "exit-minibuffer");
1571 initial_define_key (Vminibuffer_local_ns_map, '\t',
1572 "exit-minibuffer");
1573 initial_define_key (Vminibuffer_local_ns_map, '?',
1574 "self-insert-and-exit");
1575
1576 initial_define_key (Vminibuffer_local_completion_map, Ctl ('g'),
1577 "abort-recursive-edit");
1578 initial_define_key (Vminibuffer_local_completion_map, Ctl ('m'),
1579 "exit-minibuffer");
1580 initial_define_key (Vminibuffer_local_completion_map, Ctl ('j'),
1581 "exit-minibuffer");
1582
1583 initial_define_key (Vminibuffer_local_completion_map, '\t',
1584 "minibuffer-complete");
1585 initial_define_key (Vminibuffer_local_completion_map, ' ',
1586 "minibuffer-complete-word");
1587 initial_define_key (Vminibuffer_local_completion_map, '?',
1588 "minibuffer-completion-help");
1589
1590 initial_define_key (Vminibuffer_local_must_match_map, Ctl ('g'),
1591 "abort-recursive-edit");
1592 initial_define_key (Vminibuffer_local_must_match_map, Ctl ('m'),
1593 "minibuffer-complete-and-exit");
1594 initial_define_key (Vminibuffer_local_must_match_map, Ctl ('j'),
1595 "minibuffer-complete-and-exit");
1596 initial_define_key (Vminibuffer_local_must_match_map, '\t',
1597 "minibuffer-complete");
1598 initial_define_key (Vminibuffer_local_must_match_map, ' ',
1599 "minibuffer-complete-word");
1600 initial_define_key (Vminibuffer_local_must_match_map, '?',
1601 "minibuffer-completion-help");
1602}