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