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