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