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