Rename `struct device' to `struct terminal'. Rename some terminal-related functions...
[bpt/emacs.git] / src / minibuf.c
CommitLineData
f927c5ae 1/* Minibuffer input and completion.
0b5538bd
TTN
2 Copyright (C) 1985, 1986, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
f927c5ae
JB
4
5This file is part of GNU Emacs.
6
7GNU Emacs is free software; you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
ffd56f97 9the Free Software Foundation; either version 2, or (at your option)
f927c5ae
JB
10any later version.
11
12GNU Emacs is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with GNU Emacs; see the file COPYING. If not, write to
4fc5845f
LK
19the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20Boston, MA 02110-1301, USA. */
f927c5ae
JB
21
22
18160b98 23#include <config.h>
3f708f4c 24#include <stdio.h>
af52c32d 25
f927c5ae
JB
26#include "lisp.h"
27#include "commands.h"
28#include "buffer.h"
d50a3d2a 29#include "charset.h"
f927c5ae 30#include "dispextern.h"
2538fae4 31#include "keyboard.h"
ff11dfa1 32#include "frame.h"
f927c5ae
JB
33#include "window.h"
34#include "syntax.h"
0c21eeeb 35#include "intervals.h"
8feddab4 36#include "keymap.h"
fa971ac3 37#include "termhooks.h"
f927c5ae 38
a4e71d81
KH
39extern int quit_char;
40
f927c5ae 41/* List of buffers for use as minibuffers.
4d04c1f1
KH
42 The first element of the list is used for the outermost minibuffer
43 invocation, the next element is used for a recursive minibuffer
44 invocation, etc. The list is extended at the end as deeper
45 minibuffer recursions are encountered. */
279cf52c 46
f927c5ae
JB
47Lisp_Object Vminibuffer_list;
48
4d04c1f1 49/* Data to remember during recursive minibuffer invocations */
279cf52c 50
4d04c1f1 51Lisp_Object minibuf_save_list;
f927c5ae
JB
52
53/* Depth in minibuffer invocations. */
279cf52c 54
f927c5ae
JB
55int minibuf_level;
56
77aa8edf 57/* Nonzero means display completion help for invalid input. */
279cf52c 58
739cc391 59Lisp_Object Vcompletion_auto_help;
f927c5ae 60
77aa8edf 61/* The maximum length of a minibuffer history. */
279cf52c 62
77aa8edf
RS
63Lisp_Object Qhistory_length, Vhistory_length;
64
0da4d471
JL
65/* No duplicates in history. */
66
67int history_delete_duplicates;
68
b278606c 69/* Fread_minibuffer leaves the input here as a string. */
279cf52c 70
f927c5ae
JB
71Lisp_Object last_minibuf_string;
72
9ab4a725 73/* Nonzero means let functions called when within a minibuffer
f927c5ae 74 invoke recursive minibuffers (to read arguments, or whatever) */
279cf52c 75
f927c5ae
JB
76int enable_recursive_minibuffers;
77
c3421833
RS
78/* Nonzero means don't ignore text properties
79 in Fread_from_minibuffer. */
279cf52c 80
c3421833
RS
81int minibuffer_allow_text_properties;
82
f927c5ae
JB
83/* help-form is bound to this while in the minibuffer. */
84
85Lisp_Object Vminibuffer_help_form;
86
770970cb
RS
87/* Variable which is the history list to add minibuffer values to. */
88
89Lisp_Object Vminibuffer_history_variable;
90
91/* Current position in the history list (adjusted by M-n and M-p). */
92
93Lisp_Object Vminibuffer_history_position;
94
cc64f5c9
MB
95/* Text properties that are added to minibuffer prompts.
96 These are in addition to the basic `field' property, and stickiness
97 properties. */
98
99Lisp_Object Vminibuffer_prompt_properties;
100
406e55df 101Lisp_Object Qminibuffer_history, Qbuffer_name_history;
770970cb 102
719b4a40
RS
103Lisp_Object Qread_file_name_internal;
104
177aecf9 105/* Normal hooks for entry to and exit from minibuffer. */
5c781212
RS
106
107Lisp_Object Qminibuffer_setup_hook, Vminibuffer_setup_hook;
177aecf9 108Lisp_Object Qminibuffer_exit_hook, Vminibuffer_exit_hook;
5c781212 109
eebbfb01 110/* Function to call to read a buffer name. */
9ab4a725 111Lisp_Object Vread_buffer_function;
eebbfb01 112
f927c5ae
JB
113/* Nonzero means completion ignores case. */
114
115int completion_ignore_case;
116
42006772
RS
117/* List of regexps that should restrict possible completions. */
118
119Lisp_Object Vcompletion_regexp_list;
120
6a9ee000
RS
121/* Nonzero means raise the minibuffer frame when the minibuffer
122 is entered. */
123
124int minibuffer_auto_raise;
125
f927c5ae
JB
126/* If last completion attempt reported "Complete but not unique"
127 then this is the string completed then; otherwise this is nil. */
128
129static Lisp_Object last_exact_completion;
130
30e13e56 131extern Lisp_Object Voverriding_local_map;
cee54539 132
5744fa7c
RS
133Lisp_Object Quser_variable_p;
134
135Lisp_Object Qminibuffer_default;
136
cee54539
KH
137Lisp_Object Qcurrent_input_method, Qactivate_input_method;
138
b0c138ce
LT
139Lisp_Object Qcase_fold_search;
140
5744fa7c 141extern Lisp_Object Qmouse_face;
279cf52c 142
8e9968c6 143extern Lisp_Object Qfield;
f927c5ae 144\f
89fdc4a0
KH
145/* Put minibuf on currently selected frame's minibuffer.
146 We do this whenever the user starts a new minibuffer
147 or when a minibuffer exits. */
148
149void
150choose_minibuf_frame ()
151{
a4aafc54
GM
152 if (FRAMEP (selected_frame)
153 && FRAME_LIVE_P (XFRAME (selected_frame))
154 && !EQ (minibuf_window, XFRAME (selected_frame)->minibuffer_window))
89fdc4a0 155 {
a4aafc54
GM
156 struct frame *sf = XFRAME (selected_frame);
157 Lisp_Object buffer;
9ab4a725 158
89fdc4a0
KH
159 /* I don't think that any frames may validly have a null minibuffer
160 window anymore. */
a4aafc54 161 if (NILP (sf->minibuffer_window))
89fdc4a0
KH
162 abort ();
163
a4aafc54
GM
164 /* Under X, we come here with minibuf_window being the
165 minibuffer window of the unused termcap window created in
166 init_window_once. That window doesn't have a buffer. */
167 buffer = XWINDOW (minibuf_window)->buffer;
168 if (BUFFERP (buffer))
cbbfe056 169 Fset_window_buffer (sf->minibuffer_window, buffer, Qnil);
a4aafc54 170 minibuf_window = sf->minibuffer_window;
89fdc4a0 171 }
914860c2
RS
172
173 /* Make sure no other frame has a minibuffer as its selected window,
174 because the text would not be displayed in it, and that would be
07d402c8
RS
175 confusing. Only allow the selected frame to do this,
176 and that only if the minibuffer is active. */
914860c2
RS
177 {
178 Lisp_Object tail, frame;
179
180 FOR_EACH_FRAME (tail, frame)
07d402c8 181 if (MINI_WINDOW_P (XWINDOW (FRAME_SELECTED_WINDOW (XFRAME (frame))))
a4aafc54 182 && !(EQ (frame, selected_frame)
07d402c8 183 && minibuf_level > 0))
914860c2
RS
184 Fset_frame_selected_window (frame, Fframe_first_window (frame));
185 }
89fdc4a0 186}
68313ed8 187
0c94f256
RS
188Lisp_Object
189choose_minibuf_frame_1 (ignore)
190 Lisp_Object ignore;
191{
192 choose_minibuf_frame ();
193 return Qnil;
194}
195
68313ed8
RS
196DEFUN ("set-minibuffer-window", Fset_minibuffer_window,
197 Sset_minibuffer_window, 1, 1, 0,
af52c32d 198 doc: /* Specify which minibuffer window to use for the minibuffer.
dea7e2ba 199This affects where the minibuffer is displayed if you put text in it
af52c32d
MB
200without invoking the usual minibuffer commands. */)
201 (window)
68313ed8
RS
202 Lisp_Object window;
203{
b7826503 204 CHECK_WINDOW (window);
68313ed8
RS
205 if (! MINI_WINDOW_P (XWINDOW (window)))
206 error ("Window is not a minibuffer window");
207
208 minibuf_window = window;
209
210 return window;
211}
212
89fdc4a0 213\f
f927c5ae
JB
214/* Actual minibuffer invocation. */
215
af2b7cd5 216static Lisp_Object read_minibuf_unwind P_ ((Lisp_Object));
7292839d 217static Lisp_Object run_exit_minibuf_hook P_ ((Lisp_Object));
af2b7cd5
RS
218static Lisp_Object read_minibuf P_ ((Lisp_Object, Lisp_Object,
219 Lisp_Object, Lisp_Object,
220 int, Lisp_Object,
221 Lisp_Object, Lisp_Object,
da34f64e 222 int, int, int));
edfef199
GM
223static Lisp_Object read_minibuf_noninteractive P_ ((Lisp_Object, Lisp_Object,
224 Lisp_Object, Lisp_Object,
225 int, Lisp_Object,
226 Lisp_Object, Lisp_Object,
227 int, int));
228static Lisp_Object string_to_object P_ ((Lisp_Object, Lisp_Object));
229
230
231/* Read a Lisp object from VAL and return it. If VAL is an empty
232 string, and DEFALT is a string, read from DEFALT instead of VAL. */
233
234static Lisp_Object
235string_to_object (val, defalt)
236 Lisp_Object val, defalt;
237{
238 struct gcpro gcpro1, gcpro2;
239 Lisp_Object expr_and_pos;
240 int pos;
9ab4a725 241
edfef199 242 GCPRO2 (val, defalt);
9ab4a725 243
d5db4077 244 if (STRINGP (val) && SCHARS (val) == 0
edfef199
GM
245 && STRINGP (defalt))
246 val = defalt;
9ab4a725 247
edfef199
GM
248 expr_and_pos = Fread_from_string (val, Qnil, Qnil);
249 pos = XINT (Fcdr (expr_and_pos));
d5db4077 250 if (pos != SCHARS (val))
edfef199
GM
251 {
252 /* Ignore trailing whitespace; any other trailing junk
253 is an error. */
254 int i;
255 pos = string_char_to_byte (val, pos);
d5db4077 256 for (i = pos; i < SBYTES (val); i++)
edfef199 257 {
d5db4077 258 int c = SREF (val, i);
edfef199
GM
259 if (c != ' ' && c != '\t' && c != '\n')
260 error ("Trailing garbage following expression");
261 }
262 }
9ab4a725 263
edfef199
GM
264 val = Fcar (expr_and_pos);
265 RETURN_UNGCPRO (val);
266}
267
268
269/* Like read_minibuf but reading from stdin. This function is called
270 from read_minibuf to do the job if noninteractive. */
271
272static Lisp_Object
273read_minibuf_noninteractive (map, initial, prompt, backup_n, expflag,
274 histvar, histpos, defalt, allow_props,
275 inherit_input_method)
276 Lisp_Object map;
277 Lisp_Object initial;
278 Lisp_Object prompt;
279 Lisp_Object backup_n;
280 int expflag;
281 Lisp_Object histvar;
282 Lisp_Object histpos;
283 Lisp_Object defalt;
284 int allow_props;
285 int inherit_input_method;
286{
287 int size, len;
288 char *line, *s;
edfef199
GM
289 Lisp_Object val;
290
d5db4077 291 fprintf (stdout, "%s", SDATA (prompt));
edfef199
GM
292 fflush (stdout);
293
6bbd7a29 294 val = Qnil;
edfef199
GM
295 size = 100;
296 len = 0;
297 line = (char *) xmalloc (size * sizeof *line);
298 while ((s = fgets (line + len, size - len, stdin)) != NULL
299 && (len = strlen (line),
300 len == size - 1 && line[len - 1] != '\n'))
301 {
302 size *= 2;
303 line = (char *) xrealloc (line, size);
304 }
305
306 if (s)
307 {
308 len = strlen (line);
9ab4a725 309
edfef199
GM
310 if (len > 0 && line[len - 1] == '\n')
311 line[--len] = '\0';
9ab4a725 312
edfef199
GM
313 val = build_string (line);
314 xfree (line);
315 }
316 else
317 {
318 xfree (line);
319 error ("Error reading from stdin");
320 }
9ab4a725 321
edfef199
GM
322 /* If Lisp form desired instead of string, parse it. */
323 if (expflag)
324 val = string_to_object (val, defalt);
9ab4a725 325
edfef199
GM
326 return val;
327}
1011edb5 328\f
873ef78e 329DEFUN ("minibufferp", Fminibufferp,
6d1b1d7b
JPW
330 Sminibufferp, 0, 1, 0,
331 doc: /* Return t if BUFFER is a minibuffer.
b0c138ce
LT
332No argument or nil as argument means use current buffer as BUFFER.
333BUFFER can be a buffer or a buffer name. */)
6d1b1d7b
JPW
334 (buffer)
335 Lisp_Object buffer;
873ef78e
RS
336{
337 Lisp_Object tem;
338
6d1b1d7b
JPW
339 if (NILP (buffer))
340 buffer = Fcurrent_buffer ();
341 else if (STRINGP (buffer))
342 buffer = Fget_buffer (buffer);
343 else
344 CHECK_BUFFER (buffer);
345
346 tem = Fmemq (buffer, Vminibuffer_list);
873ef78e
RS
347 return ! NILP (tem) ? Qt : Qnil;
348}
349
a346ec72
MB
350DEFUN ("minibuffer-prompt-end", Fminibuffer_prompt_end,
351 Sminibuffer_prompt_end, 0, 0, 0,
af52c32d 352 doc: /* Return the buffer position of the end of the minibuffer prompt.
eb7c9b64 353Return (point-min) if current buffer is not a minibuffer. */)
af52c32d 354 ()
a346ec72
MB
355{
356 /* This function is written to be most efficient when there's a prompt. */
873ef78e
RS
357 Lisp_Object beg, end, tem;
358 beg = make_number (BEGV);
359
360 tem = Fmemq (Fcurrent_buffer (), Vminibuffer_list);
361 if (NILP (tem))
362 return beg;
363
364 end = Ffield_end (beg, Qnil, Qnil);
9ab4a725 365
a346ec72 366 if (XINT (end) == ZV && NILP (Fget_char_property (beg, Qfield, Qnil)))
b056f36d 367 return beg;
a346ec72
MB
368 else
369 return end;
370}
371
372DEFUN ("minibuffer-contents", Fminibuffer_contents,
373 Sminibuffer_contents, 0, 0, 0,
029a305c 374 doc: /* Return the user input in a minibuffer as a string.
af52c32d
MB
375The current buffer must be a minibuffer. */)
376 ()
a346ec72
MB
377{
378 int prompt_end = XINT (Fminibuffer_prompt_end ());
379 return make_buffer_string (prompt_end, ZV, 1);
380}
381
382DEFUN ("minibuffer-contents-no-properties", Fminibuffer_contents_no_properties,
383 Sminibuffer_contents_no_properties, 0, 0, 0,
029a305c 384 doc: /* Return the user input in a minibuffer as a string, without text-properties.
af52c32d
MB
385The current buffer must be a minibuffer. */)
386 ()
a346ec72
MB
387{
388 int prompt_end = XINT (Fminibuffer_prompt_end ());
389 return make_buffer_string (prompt_end, ZV, 0);
390}
391
b5e1e449
JL
392DEFUN ("minibuffer-completion-contents", Fminibuffer_completion_contents,
393 Sminibuffer_completion_contents, 0, 0, 0,
394 doc: /* Return the user input in a minibuffer before point as a string.
395That is what completion commands operate on.
396The current buffer must be a minibuffer. */)
397 ()
398{
399 int prompt_end = XINT (Fminibuffer_prompt_end ());
400 if (PT < prompt_end)
401 error ("Cannot do completion in the prompt");
402 return make_buffer_string (prompt_end, PT, 1);
403}
404
a346ec72
MB
405DEFUN ("delete-minibuffer-contents", Fdelete_minibuffer_contents,
406 Sdelete_minibuffer_contents, 0, 0, 0,
af52c32d
MB
407 doc: /* Delete all user input in a minibuffer.
408The current buffer must be a minibuffer. */)
409 ()
a346ec72
MB
410{
411 int prompt_end = XINT (Fminibuffer_prompt_end ());
412 if (prompt_end < ZV)
413 del_range (prompt_end, ZV);
414 return Qnil;
415}
416
1011edb5 417\f
adb0708c
LT
418/* Read from the minibuffer using keymap MAP and initial contents INITIAL,
419 putting point minus BACKUP_N bytes from the end of INITIAL,
770970cb 420 prompting with PROMPT (a string), using history list HISTVAR
adb0708c
LT
421 with initial position HISTPOS. INITIAL should be a string or a
422 cons of a string and an integer. BACKUP_N should be <= 0, or
423 Qnil, which is equivalent to 0. If INITIAL is a cons, BACKUP_N is
b0c138ce
LT
424 ignored and replaced with an integer that puts point at one-indexed
425 position N in INITIAL, where N is the CDR of INITIAL, or at the
426 beginning of INITIAL if N <= 0.
770970cb
RS
427
428 Normally return the result as a string (the text that was read),
3ab14176 429 but if EXPFLAG is nonzero, read it and return the object read.
b278606c
BF
430 If HISTVAR is given, save the value read on that history only if it doesn't
431 match the front of that history list exactly. The value is pushed onto
e5d4686b 432 the list as the string that was read.
770970cb 433
4f9f637a 434 DEFALT specifies the default value for the sake of history commands.
c3421833 435
cee54539
KH
436 If ALLOW_PROPS is nonzero, we do not throw away text properties.
437
adb0708c 438 if INHERIT_INPUT_METHOD is nonzero, the minibuffer inherits the
cee54539 439 current input method. */
e5d4686b
RS
440
441static Lisp_Object
442read_minibuf (map, initial, prompt, backup_n, expflag,
da34f64e
RS
443 histvar, histpos, defalt, allow_props, inherit_input_method,
444 keep_all)
f927c5ae
JB
445 Lisp_Object map;
446 Lisp_Object initial;
447 Lisp_Object prompt;
5061d9c3 448 Lisp_Object backup_n;
f927c5ae 449 int expflag;
770970cb
RS
450 Lisp_Object histvar;
451 Lisp_Object histpos;
e5d4686b 452 Lisp_Object defalt;
af2b7cd5 453 int allow_props;
cee54539 454 int inherit_input_method;
da34f64e 455 int keep_all;
f927c5ae 456{
00a34088 457 Lisp_Object val;
aed13378 458 int count = SPECPDL_INDEX ();
cee54539
KH
459 Lisp_Object mini_frame, ambient_dir, minibuffer, input_method;
460 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5;
c75000c7 461 Lisp_Object enable_multibyte;
adb0708c 462 int pos = INTEGERP (backup_n) ? XINT (backup_n) : 0;
4f9f637a
RS
463
464 /* String to add to the history. */
465 Lisp_Object histstring;
466
04012254 467 extern Lisp_Object Qfront_sticky;
fbd1209a 468 extern Lisp_Object Qrear_nonsticky;
00a34088 469
e5d4686b
RS
470 specbind (Qminibuffer_default, defalt);
471
e5baa1a7 472#ifdef HAVE_X_WINDOWS
526a058f
GM
473 if (display_hourglass_p)
474 cancel_hourglass ();
e5baa1a7 475#endif
718d3251 476
adb0708c
LT
477 if (!NILP (initial))
478 {
479 if (CONSP (initial))
480 {
481 backup_n = Fcdr (initial);
482 initial = Fcar (initial);
483 CHECK_STRING (initial);
484 if (!NILP (backup_n))
485 {
486 CHECK_NUMBER (backup_n);
487 /* Convert to distance from end of input. */
488 if (XINT (backup_n) < 1)
489 /* A number too small means the beginning of the string. */
490 pos = - SCHARS (initial);
491 else
492 pos = XINT (backup_n) - 1 - SCHARS (initial);
493 }
494 }
495 else
496 CHECK_STRING (initial);
497 }
00a34088 498 val = Qnil;
57ceaa8a 499 ambient_dir = current_buffer->directory;
cee54539 500 input_method = Qnil;
c75000c7 501 enable_multibyte = Qnil;
57ceaa8a 502
00a34088
RS
503 /* Don't need to protect PROMPT, HISTVAR, and HISTPOS because we
504 store them away before we can GC. Don't need to protect
505 BACKUP_N because we use the value only if it is an integer. */
cee54539 506 GCPRO5 (map, initial, val, ambient_dir, input_method);
f927c5ae 507
7510b296 508 if (!STRINGP (prompt))
695deb18 509 prompt = empty_string;
f927c5ae 510
f927c5ae 511 if (!enable_recursive_minibuffers
be15a518
RS
512 && minibuf_level > 0)
513 {
514 if (EQ (selected_window, minibuf_window))
515 error ("Command attempted to use minibuffer while in minibuffer");
516 else
517 /* If we're in another window, cancel the minibuffer that's active. */
518 Fthrow (Qexit,
519 build_string ("Command attempted to use minibuffer while in minibuffer"));
520 }
f927c5ae 521
edfef199 522 if (noninteractive)
c28b847b 523 {
adb0708c
LT
524 val = read_minibuf_noninteractive (map, initial, prompt,
525 make_number (pos),
c28b847b
GM
526 expflag, histvar, histpos, defalt,
527 allow_props, inherit_input_method);
f9b9ccef 528 UNGCPRO;
c28b847b
GM
529 return unbind_to (count, val);
530 }
edfef199 531
748dc60a 532 /* Choose the minibuffer window and frame, and take action on them. */
f927c5ae 533
c5b6b680
RS
534 choose_minibuf_frame ();
535
0c94f256
RS
536 record_unwind_protect (choose_minibuf_frame_1, Qnil);
537
f927c5ae 538 record_unwind_protect (Fset_window_configuration,
b2b2c677
JB
539 Fcurrent_window_configuration (Qnil));
540
ff11dfa1
JB
541 /* If the minibuffer window is on a different frame, save that
542 frame's configuration too. */
75f00e72 543 mini_frame = WINDOW_FRAME (XWINDOW (minibuf_window));
a4aafc54 544 if (!EQ (mini_frame, selected_frame))
5061d9c3
RS
545 record_unwind_protect (Fset_window_configuration,
546 Fcurrent_window_configuration (mini_frame));
5563e8e8
KH
547
548 /* If the minibuffer is on an iconified or invisible frame,
549 make it visible now. */
550 Fmake_frame_visible (mini_frame);
551
6a9ee000
RS
552 if (minibuffer_auto_raise)
553 Fraise_frame (mini_frame);
f927c5ae 554
6ed8eeff 555 temporarily_switch_to_single_kboard (XFRAME (mini_frame)->terminal->kboard);
256c9c3a 556
748dc60a
RS
557 /* We have to do this after saving the window configuration
558 since that is what restores the current buffer. */
559
560 /* Arrange to restore a number of minibuffer-related variables.
561 We could bind each variable separately, but that would use lots of
562 specpdl slots. */
563 minibuf_save_list
564 = Fcons (Voverriding_local_map,
565 Fcons (minibuf_window, minibuf_save_list));
566 minibuf_save_list
567 = Fcons (minibuf_prompt,
568 Fcons (make_number (minibuf_prompt_width),
569 Fcons (Vhelp_form,
570 Fcons (Vcurrent_prefix_arg,
571 Fcons (Vminibuffer_history_position,
572 Fcons (Vminibuffer_history_variable,
573 minibuf_save_list))))));
574
575 record_unwind_protect (read_minibuf_unwind, Qnil);
576 minibuf_level++;
7292839d
SM
577 /* We are exiting the minibuffer one way or the other, so run the hook.
578 It should be run before unwinding the minibuf settings. Do it
579 separately from read_minibuf_unwind because we need to make sure that
580 read_minibuf_unwind is fully executed even if exit-minibuffer-hook
581 signals an error. --Stef */
582 record_unwind_protect (run_exit_minibuf_hook, Qnil);
748dc60a
RS
583
584 /* Now that we can restore all those variables, start changing them. */
585
1e3f16d5 586 minibuf_prompt_width = 0;
748dc60a
RS
587 minibuf_prompt = Fcopy_sequence (prompt);
588 Vminibuffer_history_position = histpos;
589 Vminibuffer_history_variable = histvar;
590 Vhelp_form = Vminibuffer_help_form;
591
cee54539 592 if (inherit_input_method)
c75000c7 593 {
fd771ceb 594 /* `current-input-method' is buffer local. So, remember it in
c75000c7
RS
595 INPUT_METHOD before changing the current buffer. */
596 input_method = Fsymbol_value (Qcurrent_input_method);
597 enable_multibyte = current_buffer->enable_multibyte_characters;
598 }
cee54539 599
748dc60a
RS
600 /* Switch to the minibuffer. */
601
4f69d8f6
RS
602 minibuffer = get_minibuffer (minibuf_level);
603 Fset_buffer (minibuffer);
64a3a3c0 604
1d69c502
RS
605 /* If appropriate, copy enable-multibyte-characters into the minibuffer. */
606 if (inherit_input_method)
607 current_buffer->enable_multibyte_characters = enable_multibyte;
608
64a3a3c0
JB
609 /* The current buffer's default directory is usually the right thing
610 for our minibuffer here. However, if you're typing a command at
611 a minibuffer-only frame when minibuf_level is zero, then buf IS
612 the current_buffer, so reset_buffer leaves buf's default
613 directory unchanged. This is a bummer when you've just started
614 up Emacs and buf's default directory is Qnil. Here's a hack; can
615 you think of something better to do? Find another buffer with a
616 better directory, and use that one instead. */
748dc60a
RS
617 if (STRINGP (ambient_dir))
618 current_buffer->directory = ambient_dir;
64a3a3c0
JB
619 else
620 {
621 Lisp_Object buf_list;
622
623 for (buf_list = Vbuffer_alist;
624 CONSP (buf_list);
7539e11f 625 buf_list = XCDR (buf_list))
64a3a3c0 626 {
1e62748e 627 Lisp_Object other_buf;
64a3a3c0 628
7539e11f 629 other_buf = XCDR (XCAR (buf_list));
7510b296 630 if (STRINGP (XBUFFER (other_buf)->directory))
64a3a3c0
JB
631 {
632 current_buffer->directory = XBUFFER (other_buf)->directory;
633 break;
634 }
635 }
636 }
637
a4aafc54
GM
638 if (!EQ (mini_frame, selected_frame))
639 Fredirect_frame_focus (selected_frame, mini_frame);
43bad991 640
f927c5ae 641 Vminibuf_scroll_window = selected_window;
6122844a 642 if (minibuf_level == 1 || !EQ (minibuf_window, selected_window))
5705966b 643 minibuf_selected_window = selected_window;
cbbfe056 644 Fset_window_buffer (minibuf_window, Fcurrent_buffer (), Qnil);
f1321dc3 645 Fselect_window (minibuf_window, Qnil);
5a866662 646 XSETFASTINT (XWINDOW (minibuf_window)->hscroll, 0);
f927c5ae 647
748dc60a
RS
648 Fmake_local_variable (Qprint_escape_newlines);
649 print_escape_newlines = 1;
650
651 /* Erase the buffer. */
59115a22 652 {
331379bf 653 int count1 = SPECPDL_INDEX ();
59115a22 654 specbind (Qinhibit_read_only, Qt);
a41edd99 655 specbind (Qinhibit_modification_hooks, Qt);
59115a22
RS
656 Ferase_buffer ();
657 unbind_to (count1, Qnil);
658 }
659
279cf52c
GM
660 if (!NILP (current_buffer->enable_multibyte_characters)
661 && ! STRING_MULTIBYTE (minibuf_prompt))
662 minibuf_prompt = Fstring_make_multibyte (minibuf_prompt);
663
279cf52c
GM
664 /* Insert the prompt, record where it ends. */
665 Finsert (1, &minibuf_prompt);
279cf52c
GM
666 if (PT > BEG)
667 {
fbd1209a 668 Fput_text_property (make_number (BEG), make_number (PT),
279cf52c 669 Qfront_sticky, Qt, Qnil);
fbd1209a 670 Fput_text_property (make_number (BEG), make_number (PT),
279cf52c 671 Qrear_nonsticky, Qt, Qnil);
8e9968c6
GM
672 Fput_text_property (make_number (BEG), make_number (PT),
673 Qfield, Qt, Qnil);
cc64f5c9
MB
674 Fadd_text_properties (make_number (BEG), make_number (PT),
675 Vminibuffer_prompt_properties, Qnil);
279cf52c 676 }
9ab4a725
TTN
677
678 minibuf_prompt_width = (int) current_column (); /* iftc */
679
748dc60a 680 /* Put in the initial input. */
56a98455 681 if (!NILP (initial))
f927c5ae
JB
682 {
683 Finsert (1, &initial);
adb0708c 684 Fforward_char (make_number (pos));
f927c5ae
JB
685 }
686
39e98b38 687 clear_message (1, 1);
f927c5ae
JB
688 current_buffer->keymap = map;
689
cee54539 690 /* Turn on an input method stored in INPUT_METHOD if any. */
6801b300 691 if (STRINGP (input_method) && !NILP (Ffboundp (Qactivate_input_method)))
cee54539
KH
692 call1 (Qactivate_input_method, input_method);
693
5c781212
RS
694 /* Run our hook, but not if it is empty.
695 (run-hooks would do nothing if it is empty,
fd771ceb 696 but it's important to save time here in the usual case.) */
92d3b06e
RS
697 if (!NILP (Vminibuffer_setup_hook) && !EQ (Vminibuffer_setup_hook, Qunbound)
698 && !NILP (Vrun_hooks))
5c781212
RS
699 call1 (Vrun_hooks, Qminibuffer_setup_hook);
700
4e6b7204
MB
701 /* Don't allow the user to undo past this point. */
702 current_buffer->undo_list = Qnil;
703
f927c5ae
JB
704 recursive_edit_1 ();
705
706 /* If cursor is on the minibuffer line,
707 show the user we have exited by putting it in column 0. */
279cf52c 708 if (XWINDOW (minibuf_window)->cursor.vpos >= 0
f927c5ae
JB
709 && !noninteractive)
710 {
279cf52c
GM
711 XWINDOW (minibuf_window)->cursor.hpos = 0;
712 XWINDOW (minibuf_window)->cursor.x = 0;
713 XWINDOW (minibuf_window)->must_be_updated_p = 1;
a4aafc54 714 update_frame (XFRAME (selected_frame), 1, 1);
fa971ac3
KL
715 {
716 struct frame *f = XFRAME (XWINDOW (minibuf_window)->frame);
717 struct redisplay_interface *rif = FRAME_RIF (f);
718 if (rif && rif->flush_display)
719 rif->flush_display (f);
720 }
f927c5ae
JB
721 }
722
c3421833 723 /* Make minibuffer contents into a string. */
4f69d8f6 724 Fset_buffer (minibuffer);
be95a9b6 725 if (allow_props)
a346ec72 726 val = Fminibuffer_contents ();
be95a9b6 727 else
a346ec72 728 val = Fminibuffer_contents_no_properties ();
770970cb 729
b278606c 730 /* VAL is the string of minibuffer text. */
7019cca7 731
b278606c
BF
732 last_minibuf_string = val;
733
4f9f637a 734 /* Choose the string to add to the history. */
da34f64e 735 if (SCHARS (val) != 0 || keep_all)
4f9f637a
RS
736 histstring = val;
737 else if (STRINGP (defalt))
738 histstring = defalt;
739 else
740 histstring = Qnil;
741
742 /* Add the value to the appropriate history list, if any. */
743 if (SYMBOLP (Vminibuffer_history_variable)
744 && !NILP (histstring))
3ab14176
KH
745 {
746 /* If the caller wanted to save the value read on a history list,
747 then do so if the value is not already the front of the list. */
748 Lisp_Object histval;
c6d65724
RS
749
750 /* If variable is unbound, make it nil. */
f5c1dd0d 751 if (EQ (SYMBOL_VALUE (Vminibuffer_history_variable), Qunbound))
c6d65724
RS
752 Fset (Vminibuffer_history_variable, Qnil);
753
3ab14176
KH
754 histval = Fsymbol_value (Vminibuffer_history_variable);
755
756 /* The value of the history variable must be a cons or nil. Other
757 values are unacceptable. We silently ignore these values. */
4f9f637a 758
3ab14176 759 if (NILP (histval)
9f6131cf 760 || (CONSP (histval)
4f9f637a 761 /* Don't duplicate the most recent entry in the history. */
da34f64e
RS
762 && (keep_all
763 || NILP (Fequal (histstring, Fcar (histval))))))
77aa8edf
RS
764 {
765 Lisp_Object length;
766
0da4d471 767 if (history_delete_duplicates) Fdelete (histstring, histval);
4f9f637a 768 histval = Fcons (histstring, histval);
77aa8edf
RS
769 Fset (Vminibuffer_history_variable, histval);
770
771 /* Truncate if requested. */
772 length = Fget (Vminibuffer_history_variable, Qhistory_length);
773 if (NILP (length)) length = Vhistory_length;
e5d4686b
RS
774 if (INTEGERP (length))
775 {
776 if (XINT (length) <= 0)
777 Fset (Vminibuffer_history_variable, Qnil);
778 else
779 {
780 Lisp_Object temp;
781
782 temp = Fnthcdr (Fsub1 (length), histval);
783 if (CONSP (temp)) Fsetcdr (temp, Qnil);
784 }
785 }
77aa8edf 786 }
9f6131cf
RS
787 }
788
789 /* If Lisp form desired instead of string, parse it. */
790 if (expflag)
edfef199 791 val = string_to_object (val, defalt);
3ab14176 792
00a34088
RS
793 /* The appropriate frame will get selected
794 in set-window-configuration. */
f9b9ccef
SM
795 UNGCPRO;
796 return unbind_to (count, val);
f927c5ae
JB
797}
798
799/* Return a buffer to be used as the minibuffer at depth `depth'.
800 depth = 0 is the lowest allowed argument, and that is the value
801 used for nonrecursive minibuffer invocations */
802
803Lisp_Object
804get_minibuffer (depth)
805 int depth;
806{
807 Lisp_Object tail, num, buf;
9f6c23bc 808 char name[24];
f927c5ae
JB
809 extern Lisp_Object nconc2 ();
810
5a866662 811 XSETFASTINT (num, depth);
f927c5ae 812 tail = Fnthcdr (num, Vminibuffer_list);
56a98455 813 if (NILP (tail))
f927c5ae
JB
814 {
815 tail = Fcons (Qnil, Qnil);
816 Vminibuffer_list = nconc2 (Vminibuffer_list, tail);
817 }
818 buf = Fcar (tail);
56a98455 819 if (NILP (buf) || NILP (XBUFFER (buf)->name))
f927c5ae
JB
820 {
821 sprintf (name, " *Minibuf-%d*", depth);
822 buf = Fget_buffer_create (build_string (name));
5d6533f1
JB
823
824 /* Although the buffer's name starts with a space, undo should be
825 enabled in it. */
826 Fbuffer_enable_undo (buf);
827
f3fbd155 828 XSETCAR (tail, buf);
f927c5ae
JB
829 }
830 else
5956f71d 831 {
aed13378 832 int count = SPECPDL_INDEX ();
7f856567
SM
833 /* `reset_buffer' blindly sets the list of overlays to NULL, so we
834 have to empty the list, otherwise we end up with overlays that
835 think they belong to this buffer while the buffer doesn't know about
836 them any more. */
599ca9c2
SM
837 delete_all_overlays (XBUFFER (buf));
838 reset_buffer (XBUFFER (buf));
6b3faad8
RS
839 record_unwind_protect (Fset_buffer, Fcurrent_buffer ());
840 Fset_buffer (buf);
841 Fkill_all_local_variables ();
842 unbind_to (count, Qnil);
5956f71d 843 }
64a3a3c0 844
f927c5ae
JB
845 return buf;
846}
847
7292839d
SM
848static Lisp_Object
849run_exit_minibuf_hook (data)
850 Lisp_Object data;
851{
852 if (!NILP (Vminibuffer_exit_hook) && !EQ (Vminibuffer_exit_hook, Qunbound)
853 && !NILP (Vrun_hooks))
854 safe_run_hooks (Qminibuffer_exit_hook);
855
856 return Qnil;
857}
858
279cf52c
GM
859/* This function is called on exiting minibuffer, whether normally or
860 not, and it restores the current window, buffer, etc. */
f927c5ae 861
9d815fd9 862static Lisp_Object
43bad991
JB
863read_minibuf_unwind (data)
864 Lisp_Object data;
f927c5ae 865{
c24e1160 866 Lisp_Object old_deactivate_mark;
59115a22 867 Lisp_Object window;
c24e1160 868
f927c5ae 869 /* If this was a recursive minibuffer,
59115a22 870 tie the minibuffer window back to the outer level minibuffer buffer. */
f927c5ae 871 minibuf_level--;
f927c5ae 872
59115a22 873 window = minibuf_window;
279cf52c
GM
874 /* To keep things predictable, in case it matters, let's be in the
875 minibuffer when we reset the relevant variables. */
59115a22
RS
876 Fset_buffer (XWINDOW (window)->buffer);
877
878 /* Restore prompt, etc, from outer minibuffer level. */
4d04c1f1
KH
879 minibuf_prompt = Fcar (minibuf_save_list);
880 minibuf_save_list = Fcdr (minibuf_save_list);
881 minibuf_prompt_width = XFASTINT (Fcar (minibuf_save_list));
882 minibuf_save_list = Fcdr (minibuf_save_list);
883 Vhelp_form = Fcar (minibuf_save_list);
884 minibuf_save_list = Fcdr (minibuf_save_list);
ee9e37ab 885 Vcurrent_prefix_arg = Fcar (minibuf_save_list);
4d04c1f1
KH
886 minibuf_save_list = Fcdr (minibuf_save_list);
887 Vminibuffer_history_position = Fcar (minibuf_save_list);
888 minibuf_save_list = Fcdr (minibuf_save_list);
889 Vminibuffer_history_variable = Fcar (minibuf_save_list);
890 minibuf_save_list = Fcdr (minibuf_save_list);
30e13e56 891 Voverriding_local_map = Fcar (minibuf_save_list);
c5b6b680 892 minibuf_save_list = Fcdr (minibuf_save_list);
914860c2
RS
893#if 0
894 temp = Fcar (minibuf_save_list);
895 if (FRAME_LIVE_P (XFRAME (WINDOW_FRAME (XWINDOW (temp)))))
896 minibuf_window = temp;
897#endif
30e13e56 898 minibuf_save_list = Fcdr (minibuf_save_list);
59115a22
RS
899
900 /* Erase the minibuffer we were using at this level. */
901 {
aed13378 902 int count = SPECPDL_INDEX ();
59115a22
RS
903 /* Prevent error in erase-buffer. */
904 specbind (Qinhibit_read_only, Qt);
bd819d14 905 specbind (Qinhibit_modification_hooks, Qt);
59115a22
RS
906 old_deactivate_mark = Vdeactivate_mark;
907 Ferase_buffer ();
908 Vdeactivate_mark = old_deactivate_mark;
909 unbind_to (count, Qnil);
910 }
911
544e358d
GM
912 /* When we get to the outmost level, make sure we resize the
913 mini-window back to its normal size. */
914 if (minibuf_level == 0)
1e3f16d5 915 resize_mini_window (XWINDOW (window), 0);
544e358d 916
59115a22
RS
917 /* Make sure minibuffer window is erased, not ignored. */
918 windows_or_buffers_changed++;
919 XSETFASTINT (XWINDOW (window)->last_modified, 0);
193e4518 920 XSETFASTINT (XWINDOW (window)->last_overlay_modified, 0);
9d815fd9 921 return Qnil;
f927c5ae
JB
922}
923\f
b9d721de 924
da34f64e 925DEFUN ("read-from-minibuffer", Fread_from_minibuffer, Sread_from_minibuffer, 1, 8, 0,
af52c32d 926 doc: /* Read a string from the minibuffer, prompting with string PROMPT.
b0c138ce
LT
927The optional second arg INITIAL-CONTENTS is an obsolete alternative to
928 DEFAULT-VALUE. It normally should be nil in new code, except when
929 HIST is a cons. It is discussed in more detail below.
a1f17501
PJ
930Third arg KEYMAP is a keymap to use whilst reading;
931 if omitted or nil, the default is `minibuffer-local-map'.
fd771ceb 932If fourth arg READ is non-nil, then interpret the result as a Lisp object
a1f17501
PJ
933 and return that object:
934 in other words, do `(car (read-from-string INPUT-STRING))'
b0c138ce
LT
935Fifth arg HIST, if non-nil, specifies a history list and optionally
936 the initial position in the list. It can be a symbol, which is the
937 history list variable to use, or it can be a cons cell
938 (HISTVAR . HISTPOS). In that case, HISTVAR is the history list variable
939 to use, and HISTPOS is the initial position for use by the minibuffer
940 history commands. For consistency, you should also specify that
941 element of the history as the value of INITIAL-CONTENTS. Positions
942 are counted starting from 1 at the beginning of the list.
a1f17501 943Sixth arg DEFAULT-VALUE is the default value. If non-nil, it is available
adb0708c
LT
944 for history commands; but, unless READ is non-nil, `read-from-minibuffer'
945 does NOT return DEFAULT-VALUE if the user enters empty input! It returns
946 the empty string.
a1f17501 947Seventh arg INHERIT-INPUT-METHOD, if non-nil, means the minibuffer inherits
029a305c 948 the current input method and the setting of `enable-multibyte-characters'.
da34f64e
RS
949Eight arg KEEP-ALL, if non-nil, says to put all inputs in the history list,
950 even empty or duplicate inputs.
a1f17501
PJ
951If the variable `minibuffer-allow-text-properties' is non-nil,
952 then the string which is returned includes whatever text properties
b0c138ce
LT
953 were present in the minibuffer. Otherwise the value has no text properties.
954
955The remainder of this documentation string describes the
956INITIAL-CONTENTS argument in more detail. It is only relevant when
957studying existing code, or when HIST is a cons. If non-nil,
958INITIAL-CONTENTS is a string to be inserted into the minibuffer before
959reading input. Normally, point is put at the end of that string.
960However, if INITIAL-CONTENTS is \(STRING . POSITION), the initial
961input is STRING, but point is placed at _one-indexed_ position
962POSITION in the minibuffer. Any integer value less than or equal to
963one puts point at the beginning of the string. *Note* that this
964behavior differs from the way such arguments are used in `completing-read'
965and some related functions, which use zero-indexing for POSITION. */)
da34f64e 966 (prompt, initial_contents, keymap, read, hist, default_value, inherit_input_method, keep_all)
e5d4686b 967 Lisp_Object prompt, initial_contents, keymap, read, hist, default_value;
da34f64e 968 Lisp_Object inherit_input_method, keep_all;
f927c5ae 969{
adb0708c 970 Lisp_Object histvar, histpos, val;
1d8d92f4
RS
971 struct gcpro gcpro1;
972
b7826503 973 CHECK_STRING (prompt);
56a98455 974 if (NILP (keymap))
f927c5ae
JB
975 keymap = Vminibuffer_local_map;
976 else
02067692 977 keymap = get_keymap (keymap, 1, 0);
770970cb 978
7510b296 979 if (SYMBOLP (hist))
770970cb
RS
980 {
981 histvar = hist;
982 histpos = Qnil;
983 }
984 else
985 {
986 histvar = Fcar_safe (hist);
987 histpos = Fcdr_safe (hist);
988 }
989 if (NILP (histvar))
990 histvar = Qminibuffer_history;
991 if (NILP (histpos))
5a866662 992 XSETFASTINT (histpos, 0);
770970cb 993
1d8d92f4 994 GCPRO1 (default_value);
e5d4686b 995 val = read_minibuf (keymap, initial_contents, prompt,
adb0708c 996 Qnil, !NILP (read),
c3421833 997 histvar, histpos, default_value,
cee54539 998 minibuffer_allow_text_properties,
da34f64e
RS
999 !NILP (inherit_input_method),
1000 !NILP (keep_all));
1d8d92f4 1001 UNGCPRO;
e5d4686b 1002 return val;
f927c5ae
JB
1003}
1004
1005DEFUN ("read-minibuffer", Fread_minibuffer, Sread_minibuffer, 1, 2, 0,
b0c138ce 1006 doc: /* Return a Lisp object read using the minibuffer, unevaluated.
a1f17501 1007Prompt with PROMPT. If non-nil, optional second arg INITIAL-CONTENTS
b0c138ce
LT
1008is a string to insert in the minibuffer before reading.
1009\(INITIAL-CONTENTS can also be a cons of a string and an integer. Such
1010arguments are used as in `read-from-minibuffer') */)
af52c32d 1011 (prompt, initial_contents)
f927c5ae
JB
1012 Lisp_Object prompt, initial_contents;
1013{
b7826503 1014 CHECK_STRING (prompt);
770970cb 1015 return read_minibuf (Vminibuffer_local_map, initial_contents,
e5d4686b 1016 prompt, Qnil, 1, Qminibuffer_history,
da34f64e 1017 make_number (0), Qnil, 0, 0, 0);
f927c5ae
JB
1018}
1019
1020DEFUN ("eval-minibuffer", Feval_minibuffer, Seval_minibuffer, 1, 2, 0,
af52c32d 1021 doc: /* Return value of Lisp expression read using the minibuffer.
a1f17501 1022Prompt with PROMPT. If non-nil, optional second arg INITIAL-CONTENTS
b0c138ce
LT
1023is a string to insert in the minibuffer before reading.
1024\(INITIAL-CONTENTS can also be a cons of a string and an integer. Such
eb7c9b64 1025arguments are used as in `read-from-minibuffer'.) */)
af52c32d 1026 (prompt, initial_contents)
f927c5ae
JB
1027 Lisp_Object prompt, initial_contents;
1028{
1029 return Feval (Fread_minibuffer (prompt, initial_contents));
1030}
1031
1032/* Functions that use the minibuffer to read various things. */
1033
cee54539 1034DEFUN ("read-string", Fread_string, Sread_string, 1, 5, 0,
af52c32d 1035 doc: /* Read a string from the minibuffer, prompting with string PROMPT.
a1f17501 1036If non-nil, second arg INITIAL-INPUT is a string to insert before reading.
b0c138ce
LT
1037 This argument has been superseded by DEFAULT-VALUE and should normally
1038 be nil in new code. It behaves as in `read-from-minibuffer'. See the
1039 documentation string of that function for details.
a1f17501
PJ
1040The third arg HISTORY, if non-nil, specifies a history list
1041 and optionally the initial position in the list.
1042See `read-from-minibuffer' for details of HISTORY argument.
1043Fourth arg DEFAULT-VALUE is the default value. If non-nil, it is used
1044 for history commands, and as the value to return if the user enters
1045 the empty string.
1046Fifth arg INHERIT-INPUT-METHOD, if non-nil, means the minibuffer inherits
029a305c 1047 the current input method and the setting of `enable-multibyte-characters'. */)
af52c32d 1048 (prompt, initial_input, history, default_value, inherit_input_method)
e5d4686b 1049 Lisp_Object prompt, initial_input, history, default_value;
cee54539 1050 Lisp_Object inherit_input_method;
f927c5ae 1051{
b9a86585
RS
1052 Lisp_Object val;
1053 val = Fread_from_minibuffer (prompt, initial_input, Qnil,
1054 Qnil, history, default_value,
da34f64e 1055 inherit_input_method, Qnil);
d5db4077 1056 if (STRINGP (val) && SCHARS (val) == 0 && ! NILP (default_value))
b9a86585
RS
1057 val = default_value;
1058 return val;
f927c5ae
JB
1059}
1060
cee54539 1061DEFUN ("read-no-blanks-input", Fread_no_blanks_input, Sread_no_blanks_input, 1, 3, 0,
af52c32d 1062 doc: /* Read a string from the terminal, not allowing blanks.
b0c138ce
LT
1063Prompt with PROMPT. Whitespace terminates the input. If INITIAL is
1064non-nil, it should be a string, which is used as initial input, with
1065point positioned at the end, so that SPACE will accept the input.
1066\(Actually, INITIAL can also be a cons of a string and an integer.
1067Such values are treated as in `read-from-minibuffer', but are normally
1068not useful in this function.)
a1f17501 1069Third arg INHERIT-INPUT-METHOD, if non-nil, means the minibuffer inherits
b0c138ce 1070the current input method and the setting of`enable-multibyte-characters'. */)
af52c32d 1071 (prompt, initial, inherit_input_method)
c923ccc9 1072 Lisp_Object prompt, initial, inherit_input_method;
f927c5ae 1073{
b7826503 1074 CHECK_STRING (prompt);
c923ccc9 1075 return read_minibuf (Vminibuffer_local_ns_map, initial, prompt, Qnil,
cee54539 1076 0, Qminibuffer_history, make_number (0), Qnil, 0,
da34f64e 1077 !NILP (inherit_input_method), 0);
f927c5ae
JB
1078}
1079
e5d4686b 1080DEFUN ("read-command", Fread_command, Sread_command, 1, 2, 0,
af52c32d 1081 doc: /* Read the name of a command and return as a symbol.
fd771ceb 1082Prompt with PROMPT. By default, return DEFAULT-VALUE. */)
af52c32d 1083 (prompt, default_value)
e5d4686b 1084 Lisp_Object prompt, default_value;
f927c5ae 1085{
7c8d9931
RS
1086 Lisp_Object name, default_string;
1087
1088 if (NILP (default_value))
1089 default_string = Qnil;
1090 else if (SYMBOLP (default_value))
caa4733e 1091 default_string = SYMBOL_NAME (default_value);
7c8d9931
RS
1092 else
1093 default_string = default_value;
9ab4a725 1094
7c8d9931
RS
1095 name = Fcompleting_read (prompt, Vobarray, Qcommandp, Qt,
1096 Qnil, Qnil, default_string, Qnil);
1097 if (NILP (name))
1098 return name;
1099 return Fintern (name, Qnil);
f927c5ae
JB
1100}
1101
1102#ifdef NOTDEF
1103DEFUN ("read-function", Fread_function, Sread_function, 1, 1, 0,
af52c32d 1104 doc: /* One arg PROMPT, a string. Read the name of a function and return as a symbol.
fd771ceb 1105Prompt with PROMPT. */)
af52c32d 1106 (prompt)
f927c5ae
JB
1107 Lisp_Object prompt;
1108{
cee54539 1109 return Fintern (Fcompleting_read (prompt, Vobarray, Qfboundp, Qt, Qnil, Qnil, Qnil, Qnil),
f927c5ae
JB
1110 Qnil);
1111}
1112#endif /* NOTDEF */
1113
e5d4686b 1114DEFUN ("read-variable", Fread_variable, Sread_variable, 1, 2, 0,
af52c32d 1115 doc: /* Read the name of a user variable and return it as a symbol.
fd771ceb 1116Prompt with PROMPT. By default, return DEFAULT-VALUE.
316f9bfc 1117A user variable is one for which `user-variable-p' returns non-nil. */)
af52c32d 1118 (prompt, default_value)
e5d4686b 1119 Lisp_Object prompt, default_value;
f927c5ae 1120{
7c8d9931
RS
1121 Lisp_Object name, default_string;
1122
1123 if (NILP (default_value))
1124 default_string = Qnil;
1125 else if (SYMBOLP (default_value))
caa4733e 1126 default_string = SYMBOL_NAME (default_value);
7c8d9931
RS
1127 else
1128 default_string = default_value;
9ab4a725 1129
7c8d9931
RS
1130 name = Fcompleting_read (prompt, Vobarray,
1131 Quser_variable_p, Qt,
1132 Qnil, Qnil, default_string, Qnil);
1133 if (NILP (name))
1134 return name;
1135 return Fintern (name, Qnil);
f927c5ae
JB
1136}
1137
1138DEFUN ("read-buffer", Fread_buffer, Sread_buffer, 1, 3, 0,
fd771ceb
PJ
1139 doc: /* Read the name of a buffer and return as a string.
1140Prompt with PROMPT.
a1f17501 1141Optional second arg DEF is value to return if user enters an empty line.
fd771ceb 1142If optional third arg REQUIRE-MATCH is non-nil,
97c3e4cc
RF
1143 only existing buffer names are allowed.
1144The argument PROMPT should be a string ending with a colon and a space. */)
af52c32d 1145 (prompt, def, require_match)
f927c5ae
JB
1146 Lisp_Object prompt, def, require_match;
1147{
eebbfb01 1148 Lisp_Object args[4];
97c3e4cc
RF
1149 unsigned char *s;
1150 int len;
9ab4a725 1151
7510b296 1152 if (BUFFERP (def))
f927c5ae 1153 def = XBUFFER (def)->name;
eebbfb01
KH
1154
1155 if (NILP (Vread_buffer_function))
1156 {
1157 if (!NILP (def))
1158 {
97c3e4cc
RF
1159 /* A default value was provided: we must change PROMPT,
1160 editing the default value in before the colon. To achieve
1161 this, we replace PROMPT with a substring that doesn't
1162 contain the terminal space and colon (if present). They
1163 are then added back using Fformat. */
1164
1165 if (STRINGP (prompt))
1166 {
1167 s = SDATA (prompt);
1168 len = strlen (s);
1169 if (len >= 2 && s[len - 2] == ':' && s[len - 1] == ' ')
1170 len = len - 2;
1171 else if (len >= 1 && (s[len - 1] == ':' || s[len - 1] == ' '))
1172 len--;
1173
1174 prompt = make_specified_string (s, -1, len,
1175 STRING_MULTIBYTE (prompt));
1176 }
1177
1178 args[0] = build_string ("%s (default %s): ");
eebbfb01
KH
1179 args[1] = prompt;
1180 args[2] = def;
1181 prompt = Fformat (3, args);
1182 }
1183
1184 return Fcompleting_read (prompt, Vbuffer_alist, Qnil,
406e55df
RS
1185 require_match, Qnil, Qbuffer_name_history,
1186 def, Qnil);
eebbfb01
KH
1187 }
1188 else
f927c5ae 1189 {
eebbfb01 1190 args[0] = Vread_buffer_function;
f927c5ae
JB
1191 args[1] = prompt;
1192 args[2] = def;
eebbfb01
KH
1193 args[3] = require_match;
1194 return Ffuncall(4, args);
f927c5ae 1195 }
f927c5ae
JB
1196}
1197\f
ec067ec7
RS
1198static Lisp_Object
1199minibuf_conform_representation (string, basis)
1200 Lisp_Object string, basis;
1201{
1202 if (STRING_MULTIBYTE (string) == STRING_MULTIBYTE (basis))
1203 return string;
1204
1205 if (STRING_MULTIBYTE (string))
1206 return Fstring_make_unibyte (string);
1207 else
1208 return Fstring_make_multibyte (string);
1209}
1210
f927c5ae 1211DEFUN ("try-completion", Ftry_completion, Stry_completion, 2, 3, 0,
af52c32d 1212 doc: /* Return common substring of all completions of STRING in ALIST.
f9b9ccef 1213Each car of each element of ALIST (or each element if it is not a cons cell)
3809648a
KS
1214is tested to see if it begins with STRING. The possible matches may be
1215strings or symbols. Symbols are converted to strings before testing,
1216see `symbol-name'.
a1f17501
PJ
1217All that match are compared together; the longest initial sequence
1218common to all matches is returned as a string.
1219If there is no match at all, nil is returned.
1220For a unique match which is exact, t is returned.
1221
3809648a
KS
1222If ALIST is a hash-table, all the string and symbol keys are the
1223possible matches.
85cd4372
SM
1224If ALIST is an obarray, the names of all symbols in the obarray
1225are the possible matches.
a1f17501
PJ
1226
1227ALIST can also be a function to do the completion itself.
1228It receives three arguments: the values STRING, PREDICATE and nil.
1229Whatever it returns becomes the value of `try-completion'.
1230
1231If optional third argument PREDICATE is non-nil,
1232it is used to test each possible match.
1233The match is a candidate only if PREDICATE returns non-nil.
1234The argument given to PREDICATE is the alist element
85cd4372
SM
1235or the symbol from the obarray. If ALIST is a hash-table,
1236predicate is called with two arguments: the key and the value.
a1f17501 1237Additionally to this predicate, `completion-regexp-list'
af52c32d
MB
1238is used to further constrain the set of candidates. */)
1239 (string, alist, predicate)
7efd36fc 1240 Lisp_Object string, alist, predicate;
f927c5ae
JB
1241{
1242 Lisp_Object bestmatch, tail, elt, eltstring;
af2b7cd5 1243 /* Size in bytes of BESTMATCH. */
6bbd7a29 1244 int bestmatchsize = 0;
af2b7cd5 1245 /* These are in bytes, too. */
f927c5ae 1246 int compare, matchsize;
1d69c502
RS
1247 int type = (HASH_TABLE_P (alist) ? 3
1248 : VECTORP (alist) ? 2
1249 : NILP (alist) || (CONSP (alist)
1250 && (!SYMBOLP (XCAR (alist))
1251 || NILP (XCAR (alist)))));
6bbd7a29 1252 int index = 0, obsize = 0;
f927c5ae 1253 int matchcount = 0;
acd81db9 1254 int bindcount = -1;
f927c5ae
JB
1255 Lisp_Object bucket, zero, end, tem;
1256 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
1257
b7826503 1258 CHECK_STRING (string);
85cd4372 1259 if (type == 0)
7efd36fc 1260 return call3 (alist, string, predicate, Qnil);
f927c5ae 1261
6bbd7a29 1262 bestmatch = bucket = Qnil;
c8ae863b 1263 zero = make_number (0);
f927c5ae
JB
1264
1265 /* If ALIST is not a list, set TAIL just for gc pro. */
1266 tail = alist;
85cd4372 1267 if (type == 2)
f927c5ae 1268 {
f927c5ae
JB
1269 obsize = XVECTOR (alist)->size;
1270 bucket = XVECTOR (alist)->contents[index];
1271 }
1272
1273 while (1)
1274 {
85cd4372 1275 /* Get the next element of the alist, obarray, or hash-table. */
f927c5ae
JB
1276 /* Exit the loop if the elements are all used up. */
1277 /* elt gets the alist element or symbol.
1278 eltstring gets the name to check as a completion. */
1279
85cd4372 1280 if (type == 1)
f927c5ae 1281 {
695deb18 1282 if (!CONSP (tail))
f927c5ae 1283 break;
695deb18
SM
1284 elt = XCAR (tail);
1285 eltstring = CONSP (elt) ? XCAR (elt) : elt;
1286 tail = XCDR (tail);
f927c5ae 1287 }
85cd4372 1288 else if (type == 2)
f927c5ae 1289 {
c8ae863b 1290 if (!EQ (bucket, zero))
f927c5ae
JB
1291 {
1292 elt = bucket;
3809648a 1293 eltstring = elt;
f927c5ae
JB
1294 if (XSYMBOL (bucket)->next)
1295 XSETSYMBOL (bucket, XSYMBOL (bucket)->next);
1296 else
5a866662 1297 XSETFASTINT (bucket, 0);
f927c5ae
JB
1298 }
1299 else if (++index >= obsize)
1300 break;
1301 else
1302 {
1303 bucket = XVECTOR (alist)->contents[index];
1304 continue;
1305 }
1306 }
85cd4372
SM
1307 else /* if (type == 3) */
1308 {
1309 while (index < HASH_TABLE_SIZE (XHASH_TABLE (alist))
1310 && NILP (HASH_HASH (XHASH_TABLE (alist), index)))
1311 index++;
1312 if (index >= HASH_TABLE_SIZE (XHASH_TABLE (alist)))
1313 break;
1314 else
1315 elt = eltstring = HASH_KEY (XHASH_TABLE (alist), index++);
1316 }
f927c5ae
JB
1317
1318 /* Is this element a possible completion? */
1319
3809648a
KS
1320 if (SYMBOLP (eltstring))
1321 eltstring = Fsymbol_name (eltstring);
1322
7510b296 1323 if (STRINGP (eltstring)
d5db4077 1324 && SCHARS (string) <= SCHARS (eltstring)
c8ae863b 1325 && (tem = Fcompare_strings (eltstring, zero,
d5db4077 1326 make_number (SCHARS (string)),
c8ae863b 1327 string, zero, Qnil,
b0c138ce 1328 completion_ignore_case ? Qt : Qnil),
69f4ef20 1329 EQ (Qt, tem)))
f927c5ae
JB
1330 {
1331 /* Yes. */
42006772 1332 Lisp_Object regexps;
42006772
RS
1333
1334 /* Ignore this element if it fails to match all the regexps. */
acd81db9
DK
1335 {
1336 for (regexps = Vcompletion_regexp_list; CONSP (regexps);
1337 regexps = XCDR (regexps))
1338 {
1339 if (bindcount < 0) {
1340 bindcount = SPECPDL_INDEX ();
1341 specbind (Qcase_fold_search,
1342 completion_ignore_case ? Qt : Qnil);
77443789 1343 }
acd81db9
DK
1344 tem = Fstring_match (XCAR (regexps), eltstring, zero);
1345 if (NILP (tem))
1346 break;
1347 }
1348 if (CONSP (regexps))
1349 continue;
1350 }
42006772 1351
f927c5ae
JB
1352 /* Ignore this element if there is a predicate
1353 and the predicate doesn't like it. */
1354
7efd36fc 1355 if (!NILP (predicate))
f927c5ae 1356 {
7efd36fc 1357 if (EQ (predicate, Qcommandp))
c837f4f9 1358 tem = Fcommandp (elt, Qnil);
f927c5ae
JB
1359 else
1360 {
acd81db9
DK
1361 if (bindcount >= 0) {
1362 unbind_to (bindcount, Qnil);
1363 bindcount = -1;
1364 }
f927c5ae 1365 GCPRO4 (tail, string, eltstring, bestmatch);
85cd4372
SM
1366 tem = type == 3
1367 ? call2 (predicate, elt,
1368 HASH_VALUE (XHASH_TABLE (alist), index - 1))
1369 : call1 (predicate, elt);
f927c5ae
JB
1370 UNGCPRO;
1371 }
56a98455 1372 if (NILP (tem)) continue;
f927c5ae
JB
1373 }
1374
1375 /* Update computation of how much all possible completions match */
1376
56a98455 1377 if (NILP (bestmatch))
af2b7cd5 1378 {
85cd4372 1379 matchcount = 1;
af2b7cd5 1380 bestmatch = eltstring;
d5db4077 1381 bestmatchsize = SCHARS (eltstring);
af2b7cd5 1382 }
f927c5ae
JB
1383 else
1384 {
d5db4077 1385 compare = min (bestmatchsize, SCHARS (eltstring));
c8ae863b 1386 tem = Fcompare_strings (bestmatch, zero,
69f4ef20 1387 make_number (compare),
c8ae863b 1388 eltstring, zero,
69f4ef20
RS
1389 make_number (compare),
1390 completion_ignore_case ? Qt : Qnil);
1391 if (EQ (tem, Qt))
1392 matchsize = compare;
1393 else if (XINT (tem) < 0)
1394 matchsize = - XINT (tem) - 1;
1395 else
1396 matchsize = XINT (tem) - 1;
1397
52b14ac0 1398 if (matchsize < 0)
695deb18 1399 /* When can this happen ? -stef */
52b14ac0
JB
1400 matchsize = compare;
1401 if (completion_ignore_case)
1402 {
1403 /* If this is an exact match except for case,
1404 use it as the best match rather than one that is not an
1405 exact match. This way, we get the case pattern
1406 of the actual match. */
d5db4077
KR
1407 if ((matchsize == SCHARS (eltstring)
1408 && matchsize < SCHARS (bestmatch))
52b14ac0
JB
1409 ||
1410 /* If there is more than one exact match ignoring case,
1411 and one of them is exact including case,
1412 prefer that one. */
1413 /* If there is no exact match ignoring case,
1414 prefer a match that does not change the case
1415 of the input. */
d5db4077 1416 ((matchsize == SCHARS (eltstring))
52b14ac0 1417 ==
d5db4077 1418 (matchsize == SCHARS (bestmatch))
c8ae863b 1419 && (tem = Fcompare_strings (eltstring, zero,
d5db4077 1420 make_number (SCHARS (string)),
c8ae863b 1421 string, zero,
69f4ef20
RS
1422 Qnil,
1423 Qnil),
1424 EQ (Qt, tem))
c8ae863b 1425 && (tem = Fcompare_strings (bestmatch, zero,
d5db4077 1426 make_number (SCHARS (string)),
c8ae863b 1427 string, zero,
69f4ef20
RS
1428 Qnil,
1429 Qnil),
1430 ! EQ (Qt, tem))))
52b14ac0
JB
1431 bestmatch = eltstring;
1432 }
d5db4077 1433 if (bestmatchsize != SCHARS (eltstring)
85cd4372
SM
1434 || bestmatchsize != matchsize)
1435 /* Don't count the same string multiple times. */
1436 matchcount++;
52b14ac0 1437 bestmatchsize = matchsize;
d5db4077 1438 if (matchsize <= SCHARS (string)
695deb18
SM
1439 && matchcount > 1)
1440 /* No need to look any further. */
1441 break;
f927c5ae
JB
1442 }
1443 }
1444 }
1445
acd81db9
DK
1446 if (bindcount >= 0) {
1447 unbind_to (bindcount, Qnil);
1448 bindcount = -1;
1449 }
1450
56a98455 1451 if (NILP (bestmatch))
f927c5ae 1452 return Qnil; /* No completions found */
52b14ac0
JB
1453 /* If we are ignoring case, and there is no exact match,
1454 and no additional text was supplied,
1455 don't change the case of what the user typed. */
d5db4077
KR
1456 if (completion_ignore_case && bestmatchsize == SCHARS (string)
1457 && SCHARS (bestmatch) > bestmatchsize)
ec067ec7 1458 return minibuf_conform_representation (string, bestmatch);
52b14ac0
JB
1459
1460 /* Return t if the supplied string is an exact match (counting case);
1461 it does not require any change to be made. */
d5db4077 1462 if (matchcount == 1 && bestmatchsize == SCHARS (string)
69f4ef20
RS
1463 && (tem = Fcompare_strings (bestmatch, make_number (0),
1464 make_number (bestmatchsize),
1465 string, make_number (0),
1466 make_number (bestmatchsize),
1467 Qnil),
1468 EQ (Qt, tem)))
f927c5ae
JB
1469 return Qt;
1470
5a866662
KH
1471 XSETFASTINT (zero, 0); /* Else extract the part in which */
1472 XSETFASTINT (end, bestmatchsize); /* all completions agree */
f927c5ae
JB
1473 return Fsubstring (bestmatch, zero, end);
1474}
f927c5ae 1475\f
89a255dc 1476DEFUN ("all-completions", Fall_completions, Sall_completions, 2, 4, 0,
af52c32d 1477 doc: /* Search for partial matches to STRING in ALIST.
f9b9ccef 1478Each car of each element of ALIST (or each element if it is not a cons cell)
3809648a
KS
1479is tested to see if it begins with STRING. The possible matches may be
1480strings or symbols. Symbols are converted to strings before testing,
1481see `symbol-name'.
a1f17501
PJ
1482The value is a list of all the strings from ALIST that match.
1483
3809648a
KS
1484If ALIST is a hash-table, all the string and symbol keys are the
1485possible matches.
85cd4372
SM
1486If ALIST is an obarray, the names of all symbols in the obarray
1487are the possible matches.
a1f17501
PJ
1488
1489ALIST can also be a function to do the completion itself.
1490It receives three arguments: the values STRING, PREDICATE and t.
1491Whatever it returns becomes the value of `all-completions'.
1492
1493If optional third argument PREDICATE is non-nil,
1494it is used to test each possible match.
1495The match is a candidate only if PREDICATE returns non-nil.
1496The argument given to PREDICATE is the alist element
85cd4372
SM
1497or the symbol from the obarray. If ALIST is a hash-table,
1498predicate is called with two arguments: the key and the value.
a1f17501
PJ
1499Additionally to this predicate, `completion-regexp-list'
1500is used to further constrain the set of candidates.
1501
1502If the optional fourth argument HIDE-SPACES is non-nil,
1503strings in ALIST that start with a space
af52c32d
MB
1504are ignored unless STRING itself starts with a space. */)
1505 (string, alist, predicate, hide_spaces)
7efd36fc 1506 Lisp_Object string, alist, predicate, hide_spaces;
f927c5ae
JB
1507{
1508 Lisp_Object tail, elt, eltstring;
1509 Lisp_Object allmatches;
85cd4372
SM
1510 int type = HASH_TABLE_P (alist) ? 3
1511 : VECTORP (alist) ? 2
1512 : NILP (alist) || (CONSP (alist)
1513 && (!SYMBOLP (XCAR (alist))
1514 || NILP (XCAR (alist))));
6bbd7a29 1515 int index = 0, obsize = 0;
acd81db9 1516 int bindcount = -1;
c8ae863b 1517 Lisp_Object bucket, tem, zero;
f927c5ae
JB
1518 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
1519
b7826503 1520 CHECK_STRING (string);
85cd4372
SM
1521 if (type == 0)
1522 return call3 (alist, string, predicate, Qt);
6bbd7a29 1523 allmatches = bucket = Qnil;
c8ae863b 1524 zero = make_number (0);
f927c5ae
JB
1525
1526 /* If ALIST is not a list, set TAIL just for gc pro. */
1527 tail = alist;
85cd4372 1528 if (type == 2)
f927c5ae 1529 {
f927c5ae
JB
1530 obsize = XVECTOR (alist)->size;
1531 bucket = XVECTOR (alist)->contents[index];
1532 }
1533
1534 while (1)
1535 {
85cd4372 1536 /* Get the next element of the alist, obarray, or hash-table. */
f927c5ae
JB
1537 /* Exit the loop if the elements are all used up. */
1538 /* elt gets the alist element or symbol.
1539 eltstring gets the name to check as a completion. */
1540
85cd4372 1541 if (type == 1)
f927c5ae 1542 {
695deb18 1543 if (!CONSP (tail))
f927c5ae 1544 break;
695deb18
SM
1545 elt = XCAR (tail);
1546 eltstring = CONSP (elt) ? XCAR (elt) : elt;
1547 tail = XCDR (tail);
f927c5ae 1548 }
85cd4372 1549 else if (type == 2)
f927c5ae 1550 {
c8ae863b 1551 if (!EQ (bucket, zero))
f927c5ae
JB
1552 {
1553 elt = bucket;
3809648a 1554 eltstring = elt;
f927c5ae
JB
1555 if (XSYMBOL (bucket)->next)
1556 XSETSYMBOL (bucket, XSYMBOL (bucket)->next);
1557 else
5a866662 1558 XSETFASTINT (bucket, 0);
f927c5ae
JB
1559 }
1560 else if (++index >= obsize)
1561 break;
1562 else
1563 {
1564 bucket = XVECTOR (alist)->contents[index];
1565 continue;
1566 }
1567 }
85cd4372
SM
1568 else /* if (type == 3) */
1569 {
1570 while (index < HASH_TABLE_SIZE (XHASH_TABLE (alist))
1571 && NILP (HASH_HASH (XHASH_TABLE (alist), index)))
1572 index++;
1573 if (index >= HASH_TABLE_SIZE (XHASH_TABLE (alist)))
1574 break;
1575 else
1576 elt = eltstring = HASH_KEY (XHASH_TABLE (alist), index++);
1577 }
f927c5ae
JB
1578
1579 /* Is this element a possible completion? */
1580
3809648a
KS
1581 if (SYMBOLP (eltstring))
1582 eltstring = Fsymbol_name (eltstring);
1583
7510b296 1584 if (STRINGP (eltstring)
d5db4077 1585 && SCHARS (string) <= SCHARS (eltstring)
89a255dc 1586 /* If HIDE_SPACES, reject alternatives that start with space
2cbaf886 1587 unless the input starts with space. */
d5db4077
KR
1588 && ((SBYTES (string) > 0
1589 && SREF (string, 0) == ' ')
1590 || SREF (eltstring, 0) != ' '
89a255dc 1591 || NILP (hide_spaces))
c8ae863b 1592 && (tem = Fcompare_strings (eltstring, zero,
d5db4077 1593 make_number (SCHARS (string)),
c8ae863b 1594 string, zero,
d5db4077 1595 make_number (SCHARS (string)),
69f4ef20
RS
1596 completion_ignore_case ? Qt : Qnil),
1597 EQ (Qt, tem)))
f927c5ae
JB
1598 {
1599 /* Yes. */
42006772
RS
1600 Lisp_Object regexps;
1601 Lisp_Object zero;
5a866662 1602 XSETFASTINT (zero, 0);
42006772
RS
1603
1604 /* Ignore this element if it fails to match all the regexps. */
acd81db9
DK
1605 {
1606 for (regexps = Vcompletion_regexp_list; CONSP (regexps);
1607 regexps = XCDR (regexps))
1608 {
1609 if (bindcount < 0) {
1610 bindcount = SPECPDL_INDEX ();
1611 specbind (Qcase_fold_search,
1612 completion_ignore_case ? Qt : Qnil);
77443789 1613 }
acd81db9
DK
1614 tem = Fstring_match (XCAR (regexps), eltstring, zero);
1615 if (NILP (tem))
1616 break;
1617 }
1618 if (CONSP (regexps))
1619 continue;
1620 }
42006772 1621
f927c5ae
JB
1622 /* Ignore this element if there is a predicate
1623 and the predicate doesn't like it. */
1624
7efd36fc 1625 if (!NILP (predicate))
f927c5ae 1626 {
7efd36fc 1627 if (EQ (predicate, Qcommandp))
c837f4f9 1628 tem = Fcommandp (elt, Qnil);
f927c5ae
JB
1629 else
1630 {
acd81db9
DK
1631 if (bindcount >= 0) {
1632 unbind_to (bindcount, Qnil);
1633 bindcount = -1;
1634 }
f927c5ae 1635 GCPRO4 (tail, eltstring, allmatches, string);
85cd4372
SM
1636 tem = type == 3
1637 ? call2 (predicate, elt,
1638 HASH_VALUE (XHASH_TABLE (alist), index - 1))
1639 : call1 (predicate, elt);
f927c5ae
JB
1640 UNGCPRO;
1641 }
56a98455 1642 if (NILP (tem)) continue;
f927c5ae
JB
1643 }
1644 /* Ok => put it on the list. */
1645 allmatches = Fcons (eltstring, allmatches);
1646 }
1647 }
1648
acd81db9
DK
1649 if (bindcount >= 0) {
1650 unbind_to (bindcount, Qnil);
1651 bindcount = -1;
1652 }
1653
f927c5ae
JB
1654 return Fnreverse (allmatches);
1655}
1656\f
1657Lisp_Object Vminibuffer_completion_table, Qminibuffer_completion_table;
1658Lisp_Object Vminibuffer_completion_predicate, Qminibuffer_completion_predicate;
1659Lisp_Object Vminibuffer_completion_confirm, Qminibuffer_completion_confirm;
ccf330a6 1660Lisp_Object Vminibuffer_completing_file_name;
f927c5ae 1661
cee54539 1662DEFUN ("completing-read", Fcompleting_read, Scompleting_read, 2, 8, 0,
af52c32d 1663 doc: /* Read a string in the minibuffer, with completion.
a1f17501 1664PROMPT is a string to prompt with; normally it ends in a colon and a space.
b0c138ce 1665TABLE can be an list of strings, an alist, an obarray or a hash table.
a1f17501
PJ
1666TABLE can also be a function to do the completion itself.
1667PREDICATE limits completion to a subset of TABLE.
1668See `try-completion' and `all-completions' for more details
1669 on completion, TABLE, and PREDICATE.
1670
1671If REQUIRE-MATCH is non-nil, the user is not allowed to exit unless
1672 the input is (or completes to) an element of TABLE or is null.
345c105f 1673 If it is also not t, typing RET does not exit if it does non-null completion.
b0c138ce
LT
1674If the input is null, `completing-read' returns DEF, or an empty string
1675 if DEF is nil, regardless of the value of REQUIRE-MATCH.
1676
1677If INITIAL-INPUT is non-nil, insert it in the minibuffer initially,
1678 with point positioned at the end.
1679 If it is (STRING . POSITION), the initial input is STRING, but point
1680 is placed at _zero-indexed_ position POSITION in STRING. (*Note*
1681 that this is different from `read-from-minibuffer' and related
1682 functions, which use one-indexing for POSITION.) This feature is
1683 deprecated--it is best to pass nil for INITIAL-INPUT and supply the
1684 default value DEF instead. The user can yank the default value into
1685 the minibuffer easily using \\[next-history-element].
1686
1687HIST, if non-nil, specifies a history list and optionally the initial
1688 position in the list. It can be a symbol, which is the history list
1689 variable to use, or it can be a cons cell (HISTVAR . HISTPOS). In
1690 that case, HISTVAR is the history list variable to use, and HISTPOS
1691 is the initial position (the position in the list used by the
1692 minibuffer history commands). For consistency, you should also
1693 specify that element of the history as the value of
1fb101f3 1694 INITIAL-INPUT. (This is the only case in which you should use
b0c138ce
LT
1695 INITIAL-INPUT instead of DEF.) Positions are counted starting from
1696 1 at the beginning of the list. The variable `history-length'
1697 controls the maximum length of a history list.
38668f81 1698
a1f17501
PJ
1699DEF, if non-nil, is the default value.
1700
1701If INHERIT-INPUT-METHOD is non-nil, the minibuffer inherits
029a305c 1702 the current input method and the setting of `enable-multibyte-characters'.
a1f17501
PJ
1703
1704Completion ignores case if the ambient value of
af52c32d
MB
1705 `completion-ignore-case' is non-nil. */)
1706 (prompt, table, predicate, require_match, initial_input, hist, def, inherit_input_method)
d43f85c2
RS
1707 Lisp_Object prompt, table, predicate, require_match, initial_input;
1708 Lisp_Object hist, def, inherit_input_method;
f927c5ae 1709{
86408abd
LT
1710 Lisp_Object val, histvar, histpos, position;
1711 Lisp_Object init;
1712 int pos = 0;
aed13378 1713 int count = SPECPDL_INDEX ();
0c8ee1a2
RS
1714 struct gcpro gcpro1;
1715
86408abd 1716 init = initial_input;
0c8ee1a2
RS
1717 GCPRO1 (def);
1718
f927c5ae 1719 specbind (Qminibuffer_completion_table, table);
7efd36fc 1720 specbind (Qminibuffer_completion_predicate, predicate);
f927c5ae 1721 specbind (Qminibuffer_completion_confirm,
695deb18 1722 EQ (require_match, Qt) ? Qnil : require_match);
f927c5ae 1723 last_exact_completion = Qnil;
770970cb 1724
86408abd
LT
1725 position = Qnil;
1726 if (!NILP (init))
1727 {
1728 if (CONSP (init))
1729 {
1730 position = Fcdr (init);
1731 init = Fcar (init);
1732 }
1733 CHECK_STRING (init);
1734 if (!NILP (position))
1735 {
1736 CHECK_NUMBER (position);
1737 /* Convert to distance from end of input. */
1738 pos = XINT (position) - SCHARS (init);
1739 }
1740 }
1741
7510b296 1742 if (SYMBOLP (hist))
770970cb
RS
1743 {
1744 histvar = hist;
1745 histpos = Qnil;
1746 }
1747 else
1748 {
1749 histvar = Fcar_safe (hist);
1750 histpos = Fcdr_safe (hist);
1751 }
1752 if (NILP (histvar))
1753 histvar = Qminibuffer_history;
1754 if (NILP (histpos))
5a866662 1755 XSETFASTINT (histpos, 0);
770970cb 1756
56a98455 1757 val = read_minibuf (NILP (require_match)
bb0bdf70
EZ
1758 ? (NILP (Vminibuffer_completing_file_name)
1759 ? Vminibuffer_local_completion_map
1760 : Vminibuffer_local_filename_completion_map)
1761 : (NILP (Vminibuffer_completing_file_name)
1762 ? Vminibuffer_local_must_match_map
1763 : Vminibuffer_local_must_match_filename_map),
86408abd 1764 init, prompt, make_number (pos), 0,
cee54539 1765 histvar, histpos, def, 0,
da34f64e 1766 !NILP (inherit_input_method), 0);
b9a86585 1767
d5db4077 1768 if (STRINGP (val) && SCHARS (val) == 0 && ! NILP (def))
b9a86585
RS
1769 val = def;
1770
0c8ee1a2 1771 RETURN_UNGCPRO (unbind_to (count, val));
f927c5ae
JB
1772}
1773\f
f927c5ae 1774Lisp_Object Fminibuffer_completion_help ();
695deb18 1775Lisp_Object Fassoc_string ();
5d2ca7ae
RS
1776
1777/* Test whether TXT is an exact completion. */
695deb18
SM
1778DEFUN ("test-completion", Ftest_completion, Stest_completion, 2, 3, 0,
1779 doc: /* Return non-nil if STRING is a valid completion.
1780Takes the same arguments as `all-completions' and `try-completion'.
1781If ALIST is a function, it is called with three arguments:
1782the values STRING, PREDICATE and `lambda'. */)
1783 (string, alist, predicate)
1784 Lisp_Object string, alist, predicate;
5d2ca7ae 1785{
adb0708c 1786 Lisp_Object regexps, tail, tem = Qnil;
85cd4372 1787 int i = 0;
5d2ca7ae 1788
695deb18
SM
1789 CHECK_STRING (string);
1790
1791 if ((CONSP (alist) && (!SYMBOLP (XCAR (alist)) || NILP (XCAR (alist))))
1792 || NILP (alist))
1793 {
1794 tem = Fassoc_string (string, alist, completion_ignore_case ? Qt : Qnil);
9f4a578d 1795 if (NILP (tem))
695deb18
SM
1796 return Qnil;
1797 }
1798 else if (VECTORP (alist))
5d2ca7ae 1799 {
695deb18
SM
1800 /* Bypass intern-soft as that loses for nil. */
1801 tem = oblookup (alist,
d5db4077
KR
1802 SDATA (string),
1803 SCHARS (string),
1804 SBYTES (string));
44472c88 1805 if (!SYMBOLP (tem))
9404446f 1806 {
695deb18
SM
1807 if (STRING_MULTIBYTE (string))
1808 string = Fstring_make_unibyte (string);
9404446f 1809 else
695deb18 1810 string = Fstring_make_multibyte (string);
9404446f 1811
adb0708c 1812 tem = oblookup (alist,
d5db4077
KR
1813 SDATA (string),
1814 SCHARS (string),
1815 SBYTES (string));
9404446f 1816 }
adb0708c
LT
1817
1818 if (completion_ignore_case && !SYMBOLP (tem))
1819 {
1820 for (i = XVECTOR (alist)->size - 1; i >= 0; i--)
1821 {
1822 tail = XVECTOR (alist)->contents[i];
1823 if (SYMBOLP (tail))
1824 while (1)
1825 {
1826 if (EQ((Fcompare_strings (string, make_number (0), Qnil,
1827 Fsymbol_name (tail),
1828 make_number (0) , Qnil, Qt)),
1829 Qt))
1830 {
1831 tem = tail;
1832 break;
1833 }
1834 if (XSYMBOL (tail)->next == 0)
1835 break;
1836 XSETSYMBOL (tail, XSYMBOL (tail)->next);
1837 }
1838 }
1839 }
1840
1841 if (!SYMBOLP (tem))
1842 return Qnil;
5d2ca7ae 1843 }
85cd4372
SM
1844 else if (HASH_TABLE_P (alist))
1845 {
adb0708c
LT
1846 struct Lisp_Hash_Table *h = XHASH_TABLE (alist);
1847 i = hash_lookup (h, string, NULL);
85cd4372 1848 if (i >= 0)
adb0708c 1849 tem = HASH_KEY (h, i);
85cd4372 1850 else
adb0708c
LT
1851 for (i = 0; i < HASH_TABLE_SIZE (h); ++i)
1852 if (!NILP (HASH_HASH (h, i)) &&
1853 EQ (Fcompare_strings (string, make_number (0), Qnil,
1854 HASH_KEY (h, i), make_number (0) , Qnil,
1855 completion_ignore_case ? Qt : Qnil),
1856 Qt))
1857 {
1858 tem = HASH_KEY (h, i);
1859 break;
1860 }
1861 if (!STRINGP (tem))
85cd4372
SM
1862 return Qnil;
1863 }
5d2ca7ae 1864 else
695deb18
SM
1865 return call3 (alist, string, predicate, Qlambda);
1866
1867 /* Reject this element if it fails to match all the regexps. */
77443789
AS
1868 if (CONSP (Vcompletion_regexp_list))
1869 {
1870 int count = SPECPDL_INDEX ();
1871 specbind (Qcase_fold_search, completion_ignore_case ? Qt : Qnil);
1872 for (regexps = Vcompletion_regexp_list; CONSP (regexps);
1873 regexps = XCDR (regexps))
1874 {
1875 if (NILP (Fstring_match (XCAR (regexps),
1876 SYMBOLP (tem) ? string : tem,
1877 Qnil)))
1878 return unbind_to (count, Qnil);
1879 }
1880 unbind_to (count, Qnil);
1881 }
695deb18
SM
1882
1883 /* Finally, check the predicate. */
1884 if (!NILP (predicate))
b0c138ce
LT
1885 {
1886 return HASH_TABLE_P (alist)
1887 ? call2 (predicate, tem, HASH_VALUE (XHASH_TABLE (alist), i))
1888 : call1 (predicate, tem);
1889 }
695deb18
SM
1890 else
1891 return Qt;
5d2ca7ae 1892}
f927c5ae
JB
1893
1894/* returns:
1895 * 0 no possible completion
1896 * 1 was already an exact and unique completion
1897 * 3 was already an exact completion
1898 * 4 completed to an exact completion
1899 * 5 some completion happened
1900 * 6 no completion happened
1901 */
1902int
1903do_completion ()
1904{
0c80756e 1905 Lisp_Object completion, string, tem;
f927c5ae
JB
1906 int completedp;
1907 Lisp_Object last;
1e00c2ff 1908 struct gcpro gcpro1, gcpro2;
f927c5ae 1909
b5e1e449 1910 completion = Ftry_completion (Fminibuffer_completion_contents (),
8e9968c6 1911 Vminibuffer_completion_table,
f927c5ae
JB
1912 Vminibuffer_completion_predicate);
1913 last = last_exact_completion;
1914 last_exact_completion = Qnil;
1915
4f9b95e5
KH
1916 GCPRO2 (completion, last);
1917
56a98455 1918 if (NILP (completion))
f927c5ae
JB
1919 {
1920 bitch_at_user ();
805221da 1921 temp_echo_area_glyphs (build_string (" [No match]"));
1e00c2ff 1922 UNGCPRO;
f927c5ae
JB
1923 return 0;
1924 }
1925
1926 if (EQ (completion, Qt)) /* exact and unique match */
1e00c2ff
KH
1927 {
1928 UNGCPRO;
1929 return 1;
1930 }
f927c5ae 1931
b5e1e449 1932 string = Fminibuffer_completion_contents ();
0c80756e
MB
1933
1934 /* COMPLETEDP should be true if some completion was done, which
1935 doesn't include simply changing the case of the entered string.
1936 However, for appearance, the string is rewritten if the case
1937 changes. */
1938 tem = Fcompare_strings (completion, Qnil, Qnil, string, Qnil, Qnil, Qt);
01cce3e7 1939 completedp = !EQ (tem, Qt);
0c80756e 1940
7892a68b
KH
1941 tem = Fcompare_strings (completion, Qnil, Qnil, string, Qnil, Qnil, Qnil);
1942 if (!EQ (tem, Qt))
0c80756e 1943 /* Rewrite the user's input. */
f927c5ae 1944 {
1011edb5
RS
1945 int prompt_end = XINT (Fminibuffer_prompt_end ());
1946 /* Some completion happened */
1947
1948 if (! NILP (Vminibuffer_completing_file_name)
d5db4077 1949 && SREF (completion, SBYTES (completion) - 1) == '/'
1011edb5
RS
1950 && PT < ZV
1951 && FETCH_CHAR (PT_BYTE) == '/')
1952 {
1953 del_range (prompt_end, PT + 1);
1954 }
1955 else
1956 del_range (prompt_end, PT);
1957
f927c5ae 1958 Finsert (1, &completion);
6e69ab8c
MB
1959
1960 if (! completedp)
1961 /* The case of the string changed, but that's all. We're not
1962 sure whether this is a unique completion or not, so try again
1963 using the real case (this shouldn't recurse again, because
1964 the next time try-completion will return either `t' or the
1965 exact string). */
1966 {
1967 UNGCPRO;
1968 return do_completion ();
1969 }
f927c5ae
JB
1970 }
1971
1972 /* It did find a match. Do we match some possibility exactly now? */
695deb18
SM
1973 tem = Ftest_completion (Fminibuffer_contents (),
1974 Vminibuffer_completion_table,
1975 Vminibuffer_completion_predicate);
56a98455 1976 if (NILP (tem))
1e00c2ff
KH
1977 {
1978 /* not an exact match */
1979 UNGCPRO;
f927c5ae
JB
1980 if (completedp)
1981 return 5;
739cc391 1982 else if (!NILP (Vcompletion_auto_help))
f927c5ae
JB
1983 Fminibuffer_completion_help ();
1984 else
805221da 1985 temp_echo_area_glyphs (build_string (" [Next char not unique]"));
f927c5ae
JB
1986 return 6;
1987 }
1988 else if (completedp)
1e00c2ff
KH
1989 {
1990 UNGCPRO;
1991 return 4;
1992 }
f927c5ae
JB
1993 /* If the last exact completion and this one were the same,
1994 it means we've already given a "Complete but not unique"
52b14ac0 1995 message and the user's hit TAB again, so now we give him help. */
f927c5ae 1996 last_exact_completion = completion;
56a98455 1997 if (!NILP (last))
f927c5ae 1998 {
b5e1e449 1999 tem = Fminibuffer_completion_contents ();
56a98455 2000 if (!NILP (Fequal (tem, last)))
f927c5ae
JB
2001 Fminibuffer_completion_help ();
2002 }
1e00c2ff 2003 UNGCPRO;
f927c5ae 2004 return 3;
f927c5ae 2005}
1e00c2ff 2006
52b14ac0
JB
2007/* Like assoc but assumes KEY is a string, and ignores case if appropriate. */
2008
695deb18
SM
2009DEFUN ("assoc-string", Fassoc_string, Sassoc_string, 2, 3, 0,
2010 doc: /* Like `assoc' but specifically for strings.
2011Unibyte strings are converted to multibyte for comparison.
2012And case is ignored if CASE-FOLD is non-nil.
2013As opposed to `assoc', it will also match an entry consisting of a single
2014string rather than a cons cell whose car is a string. */)
2015 (key, list, case_fold)
52b14ac0 2016 register Lisp_Object key;
695deb18 2017 Lisp_Object list, case_fold;
52b14ac0
JB
2018{
2019 register Lisp_Object tail;
2020
56a98455 2021 for (tail = list; !NILP (tail); tail = Fcdr (tail))
52b14ac0
JB
2022 {
2023 register Lisp_Object elt, tem, thiscar;
2024 elt = Fcar (tail);
695deb18 2025 thiscar = CONSP (elt) ? XCAR (elt) : elt;
7510b296 2026 if (!STRINGP (thiscar))
52b14ac0 2027 continue;
9404446f
RS
2028 tem = Fcompare_strings (thiscar, make_number (0), Qnil,
2029 key, make_number (0), Qnil,
695deb18 2030 case_fold);
9404446f
RS
2031 if (EQ (tem, Qt))
2032 return elt;
52b14ac0
JB
2033 QUIT;
2034 }
2035 return Qnil;
2036}
f927c5ae
JB
2037
2038DEFUN ("minibuffer-complete", Fminibuffer_complete, Sminibuffer_complete, 0, 0, "",
af52c32d 2039 doc: /* Complete the minibuffer contents as far as possible.
a1f17501
PJ
2040Return nil if there is no valid completion, else t.
2041If no characters can be completed, display a list of possible completions.
2042If you repeat this command after it displayed such a list,
af52c32d
MB
2043scroll the window of possible completions. */)
2044 ()
f927c5ae 2045{
2cb6da5c
RS
2046 register int i;
2047 Lisp_Object window, tem;
2048
df902b62
RS
2049 /* If the previous command was not this,
2050 mark the completion buffer obsolete. */
2051 if (! EQ (current_kboard->Vlast_command, Vthis_command))
2cb6da5c
RS
2052 Vminibuf_scroll_window = Qnil;
2053
2054 window = Vminibuf_scroll_window;
2055 /* If there's a fresh completion window with a live buffer,
2056 and this command is repeated, scroll that window. */
2057 if (! NILP (window) && ! NILP (XWINDOW (window)->buffer)
2058 && !NILP (XBUFFER (XWINDOW (window)->buffer)->name))
2059 {
2060 struct buffer *obuf = current_buffer;
2061
2062 Fset_buffer (XWINDOW (window)->buffer);
7d7c3861 2063 tem = Fpos_visible_in_window_p (make_number (ZV), window, Qnil);
2cb6da5c
RS
2064 if (! NILP (tem))
2065 /* If end is in view, scroll up to the beginning. */
b7df898e 2066 Fset_window_start (window, make_number (BEGV), Qnil);
2cb6da5c
RS
2067 else
2068 /* Else scroll down one screen. */
2069 Fscroll_other_window (Qnil);
2070
2071 set_buffer_internal (obuf);
2072 return Qnil;
2073 }
2074
2075 i = do_completion ();
f927c5ae
JB
2076 switch (i)
2077 {
2078 case 0:
2079 return Qnil;
2080
2081 case 1:
a1c5aa96
GM
2082 if (PT != ZV)
2083 Fgoto_char (make_number (ZV));
805221da 2084 temp_echo_area_glyphs (build_string (" [Sole completion]"));
f927c5ae
JB
2085 break;
2086
2087 case 3:
9994cc69
GM
2088 if (PT != ZV)
2089 Fgoto_char (make_number (ZV));
805221da 2090 temp_echo_area_glyphs (build_string (" [Complete, but not unique]"));
f927c5ae
JB
2091 break;
2092 }
2093
2094 return Qt;
2095}
e4c97a67
RS
2096\f
2097/* Subroutines of Fminibuffer_complete_and_exit. */
2098
2099/* This one is called by internal_condition_case to do the real work. */
2100
2101Lisp_Object
2102complete_and_exit_1 ()
2103{
2104 return make_number (do_completion ());
2105}
2106
2107/* This one is called by internal_condition_case if an error happens.
2108 Pretend the current value is an exact match. */
2109
2110Lisp_Object
2111complete_and_exit_2 (ignore)
2112 Lisp_Object ignore;
2113{
2114 return make_number (1);
2115}
f927c5ae 2116
d850b038
SM
2117EXFUN (Fexit_minibuffer, 0) NO_RETURN;
2118
f927c5ae 2119DEFUN ("minibuffer-complete-and-exit", Fminibuffer_complete_and_exit,
94c7167b 2120 Sminibuffer_complete_and_exit, 0, 0, "",
af52c32d 2121 doc: /* If the minibuffer contents is a valid completion then exit.
a1f17501 2122Otherwise try to complete it. If completion leads to a valid completion,
af52c32d
MB
2123a repetition of this command will exit. */)
2124 ()
f927c5ae
JB
2125{
2126 register int i;
7723a3e5 2127 Lisp_Object val, tem;
f927c5ae
JB
2128
2129 /* Allow user to specify null string */
a346ec72 2130 if (XINT (Fminibuffer_prompt_end ()) == ZV)
f927c5ae
JB
2131 goto exit;
2132
36baf3b7 2133 val = Fminibuffer_contents ();
7723a3e5
KR
2134 tem = Ftest_completion (val,
2135 Vminibuffer_completion_table,
2136 Vminibuffer_completion_predicate);
2137 if (!NILP (tem))
36baf3b7
RS
2138 {
2139 if (completion_ignore_case)
2140 { /* Fixup case of the field, if necessary. */
2141 Lisp_Object compl
2142 = Ftry_completion (val,
2143 Vminibuffer_completion_table,
2144 Vminibuffer_completion_predicate);
2145 if (STRINGP (compl)
2146 /* If it weren't for this piece of paranoia, I'd replace
2147 the whole thing with a call to do_completion. */
2148 && EQ (Flength (val), Flength (compl)))
2149 {
2150 del_range (XINT (Fminibuffer_prompt_end ()), ZV);
2151 Finsert (1, &compl);
2152 }
2153 }
2154 goto exit;
2155 }
2156
e4c97a67 2157 /* Call do_completion, but ignore errors. */
8db426c7 2158 SET_PT (ZV);
e4c97a67
RS
2159 val = internal_condition_case (complete_and_exit_1, Qerror,
2160 complete_and_exit_2);
2161
2162 i = XFASTINT (val);
f927c5ae
JB
2163 switch (i)
2164 {
2165 case 1:
2166 case 3:
2167 goto exit;
2168
2169 case 4:
56a98455 2170 if (!NILP (Vminibuffer_completion_confirm))
f927c5ae 2171 {
805221da 2172 temp_echo_area_glyphs (build_string (" [Confirm]"));
f927c5ae
JB
2173 return Qnil;
2174 }
2175 else
2176 goto exit;
2177
2178 default:
2179 return Qnil;
2180 }
2181 exit:
d850b038 2182 return Fexit_minibuffer ();
f927c5ae
JB
2183 /* NOTREACHED */
2184}
2185
2186DEFUN ("minibuffer-complete-word", Fminibuffer_complete_word, Sminibuffer_complete_word,
94c7167b 2187 0, 0, "",
af52c32d 2188 doc: /* Complete the minibuffer contents at most a single word.
a1f17501
PJ
2189After one word is completed as much as possible, a space or hyphen
2190is added, provided that matches some possible completion.
af52c32d
MB
2191Return nil if there is no valid completion, else t. */)
2192 ()
f927c5ae 2193{
69f4ef20 2194 Lisp_Object completion, tem, tem1;
af2b7cd5 2195 register int i, i_byte;
d7be4211 2196 struct gcpro gcpro1, gcpro2;
1011edb5 2197 int prompt_end_charpos = XINT (Fminibuffer_prompt_end ());
b278606c
BF
2198
2199 /* We keep calling Fbuffer_string rather than arrange for GC to
2200 hold onto a pointer to one of the strings thus made. */
f927c5ae 2201
b5e1e449 2202 completion = Ftry_completion (Fminibuffer_completion_contents (),
f927c5ae
JB
2203 Vminibuffer_completion_table,
2204 Vminibuffer_completion_predicate);
56a98455 2205 if (NILP (completion))
f927c5ae
JB
2206 {
2207 bitch_at_user ();
805221da 2208 temp_echo_area_glyphs (build_string (" [No match]"));
f927c5ae
JB
2209 return Qnil;
2210 }
2211 if (EQ (completion, Qt))
2212 return Qnil;
2213
b278606c 2214#if 0 /* How the below code used to look, for reference. */
a346ec72 2215 tem = Fminibuffer_contents ();
d5db4077
KR
2216 b = SDATA (tem);
2217 i = ZV - 1 - SCHARS (completion);
2218 p = SDATA (completion);
f927c5ae
JB
2219 if (i > 0 ||
2220 0 <= scmp (b, p, ZV - 1))
2221 {
2222 i = 1;
2223 /* Set buffer to longest match of buffer tail and completion head. */
2224 while (0 <= scmp (b + i, p, ZV - 1 - i))
2225 i++;
2226 del_range (1, i + 1);
2227 SET_PT (ZV);
2228 }
2229#else /* Rewritten code */
2230 {
69f4ef20 2231 int buffer_nchars, completion_nchars;
f927c5ae 2232
b7826503 2233 CHECK_STRING (completion);
b5e1e449 2234 tem = Fminibuffer_completion_contents ();
d7be4211 2235 GCPRO2 (completion, tem);
719b4a40
RS
2236 /* If reading a file name,
2237 expand any $ENVVAR refs in the buffer and in TEM. */
ccf330a6 2238 if (! NILP (Vminibuffer_completing_file_name))
719b4a40
RS
2239 {
2240 Lisp_Object substituted;
2241 substituted = Fsubstitute_in_file_name (tem);
2242 if (! EQ (substituted, tem))
2243 {
2244 tem = substituted;
1011edb5
RS
2245 del_range (prompt_end_charpos, PT);
2246 Finsert (1, &tem);
719b4a40
RS
2247 }
2248 }
d5db4077
KR
2249 buffer_nchars = SCHARS (tem); /* # chars in what we completed. */
2250 completion_nchars = SCHARS (completion);
69f4ef20
RS
2251 i = buffer_nchars - completion_nchars;
2252 if (i > 0
2253 ||
2254 (tem1 = Fcompare_strings (tem, make_number (0),
2255 make_number (buffer_nchars),
2256 completion, make_number (0),
2257 make_number (buffer_nchars),
2258 completion_ignore_case ? Qt : Qnil),
2259 ! EQ (tem1, Qt)))
f927c5ae 2260 {
69f4ef20
RS
2261 int start_pos;
2262
1011edb5
RS
2263 /* Make buffer (before point) contain the longest match
2264 of TEM's tail and COMPLETION's head. */
69f4ef20
RS
2265 if (i <= 0) i = 1;
2266 start_pos= i;
2267 buffer_nchars -= i;
669c6673 2268 while (i > 0)
69f4ef20 2269 {
669c6673 2270 tem1 = Fcompare_strings (tem, make_number (start_pos), Qnil,
69f4ef20
RS
2271 completion, make_number (0),
2272 make_number (buffer_nchars),
2273 completion_ignore_case ? Qt : Qnil);
2274 start_pos++;
2275 if (EQ (tem1, Qt))
2276 break;
2277 i++;
669c6673 2278 buffer_nchars--;
69f4ef20 2279 }
4f9f637a 2280 del_range (start_pos, start_pos + buffer_nchars);
f927c5ae 2281 }
d7be4211 2282 UNGCPRO;
f927c5ae
JB
2283 }
2284#endif /* Rewritten code */
9ab4a725 2285
279cf52c 2286 {
8e9968c6 2287 int prompt_end_bytepos;
279cf52c 2288 prompt_end_bytepos = CHAR_TO_BYTE (prompt_end_charpos);
1011edb5
RS
2289 i = PT - prompt_end_charpos;
2290 i_byte = PT_BYTE - prompt_end_bytepos;
279cf52c 2291 }
f927c5ae
JB
2292
2293 /* If completion finds next char not unique,
b278606c 2294 consider adding a space or a hyphen. */
d5db4077 2295 if (i == SCHARS (completion))
f927c5ae 2296 {
b278606c 2297 GCPRO1 (completion);
b5e1e449 2298 tem = Ftry_completion (concat2 (Fminibuffer_completion_contents (),
1011edb5 2299 build_string (" ")),
f927c5ae
JB
2300 Vminibuffer_completion_table,
2301 Vminibuffer_completion_predicate);
b278606c
BF
2302 UNGCPRO;
2303
7510b296 2304 if (STRINGP (tem))
f927c5ae
JB
2305 completion = tem;
2306 else
2307 {
b278606c
BF
2308 GCPRO1 (completion);
2309 tem =
b5e1e449 2310 Ftry_completion (concat2 (Fminibuffer_completion_contents (),
1011edb5 2311 build_string ("-")),
b278606c
BF
2312 Vminibuffer_completion_table,
2313 Vminibuffer_completion_predicate);
2314 UNGCPRO;
2315
7510b296 2316 if (STRINGP (tem))
f927c5ae
JB
2317 completion = tem;
2318 }
9ab4a725 2319 }
f927c5ae
JB
2320
2321 /* Now find first word-break in the stuff found by completion.
2322 i gets index in string of where to stop completing. */
d50a3d2a
KH
2323 {
2324 int len, c;
d5db4077 2325 int bytes = SBYTES (completion);
e8157eae 2326 register const unsigned char *completion_string = SDATA (completion);
d5db4077 2327 for (; i_byte < SBYTES (completion); i_byte += len, i++)
d50a3d2a 2328 {
af2b7cd5 2329 c = STRING_CHAR_AND_LENGTH (completion_string + i_byte,
54643b2c 2330 bytes - i_byte,
d50a3d2a
KH
2331 len);
2332 if (SYNTAX (c) != Sword)
2333 {
af2b7cd5
RS
2334 i_byte += len;
2335 i++;
d50a3d2a
KH
2336 break;
2337 }
2338 }
2339 }
f927c5ae
JB
2340
2341 /* If got no characters, print help for user. */
2342
1011edb5 2343 if (i == PT - prompt_end_charpos)
f927c5ae 2344 {
739cc391 2345 if (!NILP (Vcompletion_auto_help))
f927c5ae
JB
2346 Fminibuffer_completion_help ();
2347 return Qnil;
2348 }
2349
2350 /* Otherwise insert in minibuffer the chars we got */
2351
1011edb5 2352 if (! NILP (Vminibuffer_completing_file_name)
d5db4077 2353 && SREF (completion, SBYTES (completion) - 1) == '/'
1011edb5
RS
2354 && PT < ZV
2355 && FETCH_CHAR (PT_BYTE) == '/')
2356 {
2357 del_range (prompt_end_charpos, PT + 1);
2358 }
2359 else
2360 del_range (prompt_end_charpos, PT);
2361
af2b7cd5 2362 insert_from_string (completion, 0, 0, i, i_byte, 1);
f927c5ae
JB
2363 return Qt;
2364}
2365\f
2366DEFUN ("display-completion-list", Fdisplay_completion_list, Sdisplay_completion_list,
f5fab556 2367 1, 2, 0,
af52c32d 2368 doc: /* Display the list of completions, COMPLETIONS, using `standard-output'.
a1f17501
PJ
2369Each element may be just a symbol or string
2370or may be a list of two strings to be printed as if concatenated.
b0c138ce
LT
2371If it is a list of two strings, the first is the actual completion
2372alternative, the second serves as annotation.
a1f17501
PJ
2373`standard-output' must be a buffer.
2374The actual completion alternatives, as inserted, are given `mouse-face'
2375properties of `highlight'.
2376At the end, this runs the normal hook `completion-setup-hook'.
d6ae289c
KS
2377It can find the completion buffer in `standard-output'.
2378The optional second arg COMMON-SUBSTRING is a string.
128e729d 2379It is used to put faces, `completions-first-difference' and
26e9d2cf 2380`completions-common-part' on the completion buffer. The
f5fab556 2381`completions-common-part' face is put on the common substring
b5e1e449
JL
2382specified by COMMON-SUBSTRING. If COMMON-SUBSTRING is nil
2383and the current buffer is not the minibuffer, the faces are not put.
d6ae289c 2384Internally, COMMON-SUBSTRING is bound to `completion-common-substring'
f5fab556
MY
2385during running `completion-setup-hook'. */)
2386 (completions, common_substring)
f927c5ae 2387 Lisp_Object completions;
f5fab556 2388 Lisp_Object common_substring;
f927c5ae 2389{
dae36123 2390 Lisp_Object tail, elt;
f927c5ae 2391 register int i;
2dc2b736 2392 int column = 0;
f5fab556 2393 struct gcpro gcpro1, gcpro2, gcpro3;
2dc2b736 2394 struct buffer *old = current_buffer;
681f5af4 2395 int first = 1;
486cc7fb
RS
2396
2397 /* Note that (when it matters) every variable
dae36123
RS
2398 points to a non-string that is pointed to by COMPLETIONS,
2399 except for ELT. ELT can be pointing to a string
2400 when terpri or Findent_to calls a change hook. */
2401 elt = Qnil;
f5fab556 2402 GCPRO3 (completions, elt, common_substring);
486cc7fb 2403
7510b296 2404 if (BUFFERP (Vstandard_output))
2dc2b736 2405 set_buffer_internal (XBUFFER (Vstandard_output));
f927c5ae 2406
56a98455 2407 if (NILP (completions))
cfc736bf
RS
2408 write_string ("There are no possible completions of what you have typed.",
2409 -1);
f927c5ae
JB
2410 else
2411 {
2dc2b736 2412 write_string ("Possible completions are:", -1);
a425bd03 2413 for (tail = completions, i = 0; CONSP (tail); tail = XCDR (tail), i++)
f927c5ae 2414 {
ec067ec7 2415 Lisp_Object tem, string;
681f5af4 2416 int length;
47d7d104 2417 Lisp_Object startpos, endpos;
681f5af4 2418
6bbd7a29
GM
2419 startpos = Qnil;
2420
a425bd03 2421 elt = XCAR (tail);
b0c138ce
LT
2422 if (SYMBOLP (elt))
2423 elt = SYMBOL_NAME (elt);
681f5af4
RS
2424 /* Compute the length of this element. */
2425 if (CONSP (elt))
2426 {
49db96ce 2427 tem = XCAR (elt);
b7826503 2428 CHECK_STRING (tem);
d5db4077 2429 length = SCHARS (tem);
681f5af4 2430
49db96ce 2431 tem = Fcar (XCDR (elt));
b7826503 2432 CHECK_STRING (tem);
d5db4077 2433 length += SCHARS (tem);
681f5af4
RS
2434 }
2435 else
2436 {
b7826503 2437 CHECK_STRING (elt);
d5db4077 2438 length = SCHARS (elt);
681f5af4
RS
2439 }
2440
2441 /* This does a bad job for narrower than usual windows.
2442 Sadly, the window it will appear in is not known
2443 until after the text has been made. */
2444
47d7d104
RS
2445 if (BUFFERP (Vstandard_output))
2446 XSETINT (startpos, BUF_PT (XBUFFER (Vstandard_output)));
2447
681f5af4
RS
2448 /* If the previous completion was very wide,
2449 or we have two on this line already,
2450 don't put another on the same line. */
2451 if (column > 33 || first
2452 /* If this is really wide, don't put it second on a line. */
13c67cc6 2453 || (column > 0 && length > 45))
681f5af4
RS
2454 {
2455 Fterpri (Qnil);
2456 column = 0;
2457 }
2458 /* Otherwise advance to column 35. */
2459 else
2dc2b736 2460 {
7510b296 2461 if (BUFFERP (Vstandard_output))
681f5af4
RS
2462 {
2463 tem = Findent_to (make_number (35), make_number (2));
9ab4a725 2464
681f5af4
RS
2465 column = XINT (tem);
2466 }
2dc2b736
RS
2467 else
2468 {
2469 do
2470 {
2471 write_string (" ", -1);
2472 column++;
2473 }
2474 while (column < 35);
2475 }
2476 }
681f5af4 2477
47d7d104
RS
2478 if (BUFFERP (Vstandard_output))
2479 {
2480 XSETINT (endpos, BUF_PT (XBUFFER (Vstandard_output)));
2481 Fset_text_properties (startpos, endpos,
2482 Qnil, Vstandard_output);
2483 }
2484
ec067ec7 2485 /* Output this element.
9404446f 2486 If necessary, convert it to unibyte or to multibyte first. */
f927c5ae 2487 if (CONSP (elt))
ec067ec7 2488 string = Fcar (elt);
f927c5ae 2489 else
ec067ec7
RS
2490 string = elt;
2491 if (NILP (current_buffer->enable_multibyte_characters)
2492 && STRING_MULTIBYTE (string))
2493 string = Fstring_make_unibyte (string);
9404446f
RS
2494 else if (!NILP (current_buffer->enable_multibyte_characters)
2495 && !STRING_MULTIBYTE (string))
2496 string = Fstring_make_multibyte (string);
5744fa7c
RS
2497
2498 if (BUFFERP (Vstandard_output))
2499 {
4b37311e 2500 XSETINT (startpos, BUF_PT (XBUFFER (Vstandard_output)));
5744fa7c
RS
2501
2502 Fprinc (string, Qnil);
2503
4b37311e 2504 XSETINT (endpos, BUF_PT (XBUFFER (Vstandard_output)));
5744fa7c 2505
4b37311e 2506 Fput_text_property (startpos, endpos,
5744fa7c
RS
2507 Qmouse_face, intern ("highlight"),
2508 Vstandard_output);
2509 }
2510 else
2511 {
2512 Fprinc (string, Qnil);
2513 }
ec067ec7
RS
2514
2515 /* Output the annotation for this element. */
2516 if (CONSP (elt))
4b37311e
RS
2517 {
2518 if (BUFFERP (Vstandard_output))
2519 {
2520 XSETINT (startpos, BUF_PT (XBUFFER (Vstandard_output)));
2521
2522 Fprinc (Fcar (Fcdr (elt)), Qnil);
2523
2524 XSETINT (endpos, BUF_PT (XBUFFER (Vstandard_output)));
2525
2526 Fset_text_properties (startpos, endpos, Qnil,
2527 Vstandard_output);
2528 }
2529 else
2530 {
2531 Fprinc (Fcar (Fcdr (elt)), Qnil);
2532 }
2533 }
2534
681f5af4 2535
ec067ec7 2536 /* Update COLUMN for what we have output. */
681f5af4
RS
2537 column += length;
2538
2539 /* If output is to a buffer, recompute COLUMN in a way
2540 that takes account of character widths. */
2541 if (BUFFERP (Vstandard_output))
2dc2b736 2542 {
681f5af4
RS
2543 tem = Fcurrent_column ();
2544 column = XINT (tem);
2dc2b736 2545 }
681f5af4
RS
2546
2547 first = 0;
f927c5ae
JB
2548 }
2549 }
2dc2b736 2550
7510b296 2551 if (BUFFERP (Vstandard_output))
2d7e41fe
RS
2552 set_buffer_internal (old);
2553
cfc736bf 2554 if (!NILP (Vrun_hooks))
f5fab556
MY
2555 {
2556 int count1 = SPECPDL_INDEX ();
2557
2558 specbind (intern ("completion-common-substring"), common_substring);
2559 call1 (Vrun_hooks, intern ("completion-setup-hook"));
d6ae289c 2560
f5fab556
MY
2561 unbind_to (count1, Qnil);
2562 }
2563
2564 UNGCPRO;
cfc736bf 2565
f927c5ae
JB
2566 return Qnil;
2567}
2568
d6ae289c
KS
2569
2570static Lisp_Object
2571display_completion_list_1 (list)
2572 Lisp_Object list;
2573{
2574 return Fdisplay_completion_list (list, Qnil);
2575}
2576
f927c5ae 2577DEFUN ("minibuffer-completion-help", Fminibuffer_completion_help, Sminibuffer_completion_help,
94c7167b 2578 0, 0, "",
af52c32d
MB
2579 doc: /* Display a list of possible completions of the current minibuffer contents. */)
2580 ()
f927c5ae
JB
2581{
2582 Lisp_Object completions;
2583
2584 message ("Making completion list...");
b5e1e449 2585 completions = Fall_completions (Fminibuffer_completion_contents (),
f927c5ae 2586 Vminibuffer_completion_table,
89a255dc
RS
2587 Vminibuffer_completion_predicate,
2588 Qt);
39e98b38 2589 clear_message (1, 0);
f927c5ae 2590
56a98455 2591 if (NILP (completions))
f927c5ae
JB
2592 {
2593 bitch_at_user ();
805221da 2594 temp_echo_area_glyphs (build_string (" [No completions]"));
f927c5ae
JB
2595 }
2596 else
a425bd03
SM
2597 {
2598 /* Sort and remove duplicates. */
2599 Lisp_Object tmp = completions = Fsort (completions, Qstring_lessp);
2600 while (CONSP (tmp))
2601 {
2602 if (CONSP (XCDR (tmp))
2603 && !NILP (Fequal (XCAR (tmp), XCAR (XCDR (tmp)))))
2604 XSETCDR (tmp, XCDR (XCDR (tmp)));
2605 else
2606 tmp = XCDR (tmp);
2607 }
2608 internal_with_output_to_temp_buffer ("*Completions*",
2609 display_completion_list_1,
2610 completions);
2611 }
f927c5ae
JB
2612 return Qnil;
2613}
2614\f
2615DEFUN ("self-insert-and-exit", Fself_insert_and_exit, Sself_insert_and_exit, 0, 0, "",
af52c32d
MB
2616 doc: /* Terminate minibuffer input. */)
2617 ()
f927c5ae 2618{
7510b296 2619 if (INTEGERP (last_command_char))
dab3ab3c 2620 internal_self_insert (XINT (last_command_char), 0);
f927c5ae
JB
2621 else
2622 bitch_at_user ();
2623
d850b038 2624 return Fexit_minibuffer ();
f927c5ae
JB
2625}
2626
2627DEFUN ("exit-minibuffer", Fexit_minibuffer, Sexit_minibuffer, 0, 0, "",
af52c32d
MB
2628 doc: /* Terminate this minibuffer argument. */)
2629 ()
f927c5ae 2630{
d850b038
SM
2631 /* If the command that uses this has made modifications in the minibuffer,
2632 we don't want them to cause deactivation of the mark in the original
2633 buffer.
2634 A better solution would be to make deactivate-mark buffer-local
2635 (or to turn it into a list of buffers, ...), but in the mean time,
2636 this should do the trick in most cases. */
2637 Vdeactivate_mark = Qnil;
2638 Fthrow (Qexit, Qnil);
f927c5ae
JB
2639}
2640
2641DEFUN ("minibuffer-depth", Fminibuffer_depth, Sminibuffer_depth, 0, 0, 0,
af52c32d
MB
2642 doc: /* Return current depth of activations of minibuffer, a nonnegative integer. */)
2643 ()
f927c5ae
JB
2644{
2645 return make_number (minibuf_level);
2646}
2647
37e9a934 2648DEFUN ("minibuffer-prompt", Fminibuffer_prompt, Sminibuffer_prompt, 0, 0, 0,
af52c32d
MB
2649 doc: /* Return the prompt string of the currently-active minibuffer.
2650If no minibuffer is active, return nil. */)
2651 ()
37e9a934 2652{
4d04c1f1 2653 return Fcopy_sequence (minibuf_prompt);
37e9a934
KH
2654}
2655
f927c5ae 2656\f
805221da 2657/* Temporarily display STRING at the end of the current
2d955a50
RS
2658 minibuffer contents. This is used to display things like
2659 "[No Match]" when the user requests a completion for a prefix
2660 that has no possible completions, and other quick, unobtrusive
2661 messages. */
2662
9d815fd9 2663void
805221da
KH
2664temp_echo_area_glyphs (string)
2665 Lisp_Object string;
2d955a50
RS
2666{
2667 int osize = ZV;
a9c26562 2668 int osize_byte = ZV_BYTE;
2d955a50 2669 int opoint = PT;
a9c26562 2670 int opoint_byte = PT_BYTE;
2d955a50
RS
2671 Lisp_Object oinhibit;
2672 oinhibit = Vinhibit_quit;
2673
2674 /* Clear out any old echo-area message to make way for our new thing. */
2675 message (0);
2676
a9c26562 2677 SET_PT_BOTH (osize, osize_byte);
805221da 2678 insert_from_string (string, 0, 0, SCHARS (string), SBYTES (string), 0);
a9c26562 2679 SET_PT_BOTH (opoint, opoint_byte);
2d955a50
RS
2680 Vinhibit_quit = Qt;
2681 Fsit_for (make_number (2), Qnil, Qnil);
bc69581b 2682 del_range_both (osize, osize_byte, ZV, ZV_BYTE, 1);
a9c26562 2683 SET_PT_BOTH (opoint, opoint_byte);
2d955a50
RS
2684 if (!NILP (Vquit_flag))
2685 {
2686 Vquit_flag = Qnil;
2687 Vunread_command_events = Fcons (make_number (quit_char), Qnil);
2688 }
2689 Vinhibit_quit = oinhibit;
2690}
2691
2692DEFUN ("minibuffer-message", Fminibuffer_message, Sminibuffer_message,
94c7167b 2693 1, 1, 0,
af52c32d 2694 doc: /* Temporarily display STRING at the end of the minibuffer.
1d69c502 2695The text is displayed for a period controlled by `minibuffer-message-timeout',
af52c32d
MB
2696or until the next input event arrives, whichever comes first. */)
2697 (string)
2d955a50
RS
2698 Lisp_Object string;
2699{
1a9e275b 2700 CHECK_STRING (string);
805221da 2701 temp_echo_area_glyphs (string);
2d955a50
RS
2702 return Qnil;
2703}
2704\f
9d815fd9 2705void
f927c5ae
JB
2706init_minibuf_once ()
2707{
2708 Vminibuffer_list = Qnil;
2709 staticpro (&Vminibuffer_list);
2710}
2711
9d815fd9 2712void
f927c5ae
JB
2713syms_of_minibuf ()
2714{
2715 minibuf_level = 0;
4d04c1f1
KH
2716 minibuf_prompt = Qnil;
2717 staticpro (&minibuf_prompt);
2718
2719 minibuf_save_list = Qnil;
2720 staticpro (&minibuf_save_list);
f927c5ae 2721
719b4a40
RS
2722 Qread_file_name_internal = intern ("read-file-name-internal");
2723 staticpro (&Qread_file_name_internal);
2724
e5d4686b
RS
2725 Qminibuffer_default = intern ("minibuffer-default");
2726 staticpro (&Qminibuffer_default);
2727 Fset (Qminibuffer_default, Qnil);
2728
f927c5ae
JB
2729 Qminibuffer_completion_table = intern ("minibuffer-completion-table");
2730 staticpro (&Qminibuffer_completion_table);
2731
2732 Qminibuffer_completion_confirm = intern ("minibuffer-completion-confirm");
2733 staticpro (&Qminibuffer_completion_confirm);
2734
2735 Qminibuffer_completion_predicate = intern ("minibuffer-completion-predicate");
2736 staticpro (&Qminibuffer_completion_predicate);
2737
1e00c2ff
KH
2738 staticpro (&last_exact_completion);
2739 last_exact_completion = Qnil;
2740
f927c5ae
JB
2741 staticpro (&last_minibuf_string);
2742 last_minibuf_string = Qnil;
2743
2744 Quser_variable_p = intern ("user-variable-p");
2745 staticpro (&Quser_variable_p);
2746
770970cb
RS
2747 Qminibuffer_history = intern ("minibuffer-history");
2748 staticpro (&Qminibuffer_history);
f927c5ae 2749
406e55df
RS
2750 Qbuffer_name_history = intern ("buffer-name-history");
2751 staticpro (&Qbuffer_name_history);
33d0a17f 2752 Fset (Qbuffer_name_history, Qnil);
406e55df 2753
5c781212
RS
2754 Qminibuffer_setup_hook = intern ("minibuffer-setup-hook");
2755 staticpro (&Qminibuffer_setup_hook);
2756
177aecf9
KH
2757 Qminibuffer_exit_hook = intern ("minibuffer-exit-hook");
2758 staticpro (&Qminibuffer_exit_hook);
2759
77aa8edf
RS
2760 Qhistory_length = intern ("history-length");
2761 staticpro (&Qhistory_length);
2762
cee54539
KH
2763 Qcurrent_input_method = intern ("current-input-method");
2764 staticpro (&Qcurrent_input_method);
2765
2766 Qactivate_input_method = intern ("activate-input-method");
2767 staticpro (&Qactivate_input_method);
2768
b0c138ce
LT
2769 Qcase_fold_search = intern ("case-fold-search");
2770 staticpro (&Qcase_fold_search);
2771
af52c32d
MB
2772 DEFVAR_LISP ("read-buffer-function", &Vread_buffer_function,
2773 doc: /* If this is non-nil, `read-buffer' does its work by calling this function. */);
eebbfb01
KH
2774 Vread_buffer_function = Qnil;
2775
af52c32d
MB
2776 DEFVAR_LISP ("minibuffer-setup-hook", &Vminibuffer_setup_hook,
2777 doc: /* Normal hook run just after entry to minibuffer. */);
5c781212
RS
2778 Vminibuffer_setup_hook = Qnil;
2779
af52c32d
MB
2780 DEFVAR_LISP ("minibuffer-exit-hook", &Vminibuffer_exit_hook,
2781 doc: /* Normal hook run just after exit from minibuffer. */);
177aecf9
KH
2782 Vminibuffer_exit_hook = Qnil;
2783
af52c32d
MB
2784 DEFVAR_LISP ("history-length", &Vhistory_length,
2785 doc: /* *Maximum length for history lists before truncation takes place.
a1f17501
PJ
2786A number means that length; t means infinite. Truncation takes place
2787just after a new element is inserted. Setting the history-length
2788property of a history variable overrides this default. */);
77aa8edf
RS
2789 XSETFASTINT (Vhistory_length, 30);
2790
0da4d471
JL
2791 DEFVAR_BOOL ("history-delete-duplicates", &history_delete_duplicates,
2792 doc: /* *Non-nil means to delete duplicates in history.
2793If set to t when adding a new history element, all previous identical
2794elements are deleted. */);
2795 history_delete_duplicates = 0;
2796
af52c32d 2797 DEFVAR_LISP ("completion-auto-help", &Vcompletion_auto_help,
0ca23eef
EZ
2798 doc: /* *Non-nil means automatically provide help for invalid completion input.
2799Under Partial Completion mode, a non-nil, non-t value has a special meaning;
2800see the doc string of `partial-completion-mode' for more details. */);
739cc391 2801 Vcompletion_auto_help = Qt;
f927c5ae 2802
af52c32d 2803 DEFVAR_BOOL ("completion-ignore-case", &completion_ignore_case,
75028673
JPW
2804 doc: /* Non-nil means don't consider case significant in completion.
2805
d9a03ad2
RS
2806For file-name completion, the variable `read-file-name-completion-ignore-case'
2807controls the behavior, rather than this variable. */);
f927c5ae
JB
2808 completion_ignore_case = 0;
2809
af52c32d
MB
2810 DEFVAR_BOOL ("enable-recursive-minibuffers", &enable_recursive_minibuffers,
2811 doc: /* *Non-nil means to allow minibuffer commands while in the minibuffer.
a1f17501 2812This variable makes a difference whenever the minibuffer window is active. */);
f927c5ae
JB
2813 enable_recursive_minibuffers = 0;
2814
af52c32d
MB
2815 DEFVAR_LISP ("minibuffer-completion-table", &Vminibuffer_completion_table,
2816 doc: /* Alist or obarray used for completion in the minibuffer.
b0c138ce
LT
2817This becomes the ALIST argument to `try-completion' and `all-completions'.
2818The value can also be a list of strings or a hash table.
a1f17501
PJ
2819
2820The value may alternatively be a function, which is given three arguments:
2821 STRING, the current buffer contents;
2822 PREDICATE, the predicate for filtering possible matches;
2823 CODE, which says what kind of things to do.
2824CODE can be nil, t or `lambda'.
2825nil means to return the best completion of STRING, or nil if there is none.
2826t means to return a list of all possible completions of STRING.
2827`lambda' means to return t if STRING is a valid completion as it stands. */);
f927c5ae
JB
2828 Vminibuffer_completion_table = Qnil;
2829
af52c32d
MB
2830 DEFVAR_LISP ("minibuffer-completion-predicate", &Vminibuffer_completion_predicate,
2831 doc: /* Within call to `completing-read', this holds the PREDICATE argument. */);
f927c5ae
JB
2832 Vminibuffer_completion_predicate = Qnil;
2833
af52c32d 2834 DEFVAR_LISP ("minibuffer-completion-confirm", &Vminibuffer_completion_confirm,
fd771ceb 2835 doc: /* Non-nil means to demand confirmation of completion before exiting minibuffer. */);
f927c5ae
JB
2836 Vminibuffer_completion_confirm = Qnil;
2837
ccf330a6 2838 DEFVAR_LISP ("minibuffer-completing-file-name",
af52c32d
MB
2839 &Vminibuffer_completing_file_name,
2840 doc: /* Non-nil means completing file names. */);
ccf330a6
RS
2841 Vminibuffer_completing_file_name = Qnil;
2842
af52c32d
MB
2843 DEFVAR_LISP ("minibuffer-help-form", &Vminibuffer_help_form,
2844 doc: /* Value that `help-form' takes on inside the minibuffer. */);
f927c5ae
JB
2845 Vminibuffer_help_form = Qnil;
2846
af52c32d
MB
2847 DEFVAR_LISP ("minibuffer-history-variable", &Vminibuffer_history_variable,
2848 doc: /* History list symbol to add minibuffer values to.
a1f17501
PJ
2849Each string of minibuffer input, as it appears on exit from the minibuffer,
2850is added with
2851 (set minibuffer-history-variable
2852 (cons STRING (symbol-value minibuffer-history-variable))) */);
5a866662 2853 XSETFASTINT (Vminibuffer_history_variable, 0);
770970cb 2854
af52c32d
MB
2855 DEFVAR_LISP ("minibuffer-history-position", &Vminibuffer_history_position,
2856 doc: /* Current position of redoing in the history list. */);
770970cb
RS
2857 Vminibuffer_history_position = Qnil;
2858
af52c32d
MB
2859 DEFVAR_BOOL ("minibuffer-auto-raise", &minibuffer_auto_raise,
2860 doc: /* *Non-nil means entering the minibuffer raises the minibuffer's frame.
a1f17501 2861Some uses of the echo area also raise that frame (since they use it too). */);
6a9ee000
RS
2862 minibuffer_auto_raise = 0;
2863
af52c32d 2864 DEFVAR_LISP ("completion-regexp-list", &Vcompletion_regexp_list,
b0c138ce
LT
2865 doc: /* List of regexps that should restrict possible completions.
2866The basic completion functions only consider a completion acceptable
2867if it matches all regular expressions in this list, with
2868`case-fold-search' bound to the value of `completion-ignore-case'.
2869See Info node `(elisp)Basic Completion', for a description of these
2870functions. */);
42006772
RS
2871 Vcompletion_regexp_list = Qnil;
2872
c3421833 2873 DEFVAR_BOOL ("minibuffer-allow-text-properties",
af52c32d
MB
2874 &minibuffer_allow_text_properties,
2875 doc: /* Non-nil means `read-from-minibuffer' should not discard text properties.
a1f17501
PJ
2876This also affects `read-string', but it does not affect `read-minibuffer',
2877`read-no-blanks-input', or any of the functions that do minibuffer input
2878with completion; they always discard text properties. */);
c3421833
RS
2879 minibuffer_allow_text_properties = 0;
2880
af52c32d
MB
2881 DEFVAR_LISP ("minibuffer-prompt-properties", &Vminibuffer_prompt_properties,
2882 doc: /* Text properties that are added to minibuffer prompts.
a1f17501
PJ
2883These are in addition to the basic `field' property, and stickiness
2884properties. */);
cc64f5c9
MB
2885 /* We use `intern' here instead of Qread_only to avoid
2886 initialization-order problems. */
2887 Vminibuffer_prompt_properties
2888 = Fcons (intern ("read-only"), Fcons (Qt, Qnil));
2889
68313ed8 2890 defsubr (&Sset_minibuffer_window);
f927c5ae
JB
2891 defsubr (&Sread_from_minibuffer);
2892 defsubr (&Seval_minibuffer);
2893 defsubr (&Sread_minibuffer);
2894 defsubr (&Sread_string);
2895 defsubr (&Sread_command);
2896 defsubr (&Sread_variable);
2897 defsubr (&Sread_buffer);
2898 defsubr (&Sread_no_blanks_input);
2899 defsubr (&Sminibuffer_depth);
37e9a934 2900 defsubr (&Sminibuffer_prompt);
f927c5ae 2901
873ef78e 2902 defsubr (&Sminibufferp);
a346ec72
MB
2903 defsubr (&Sminibuffer_prompt_end);
2904 defsubr (&Sminibuffer_contents);
2905 defsubr (&Sminibuffer_contents_no_properties);
b5e1e449 2906 defsubr (&Sminibuffer_completion_contents);
a346ec72
MB
2907 defsubr (&Sdelete_minibuffer_contents);
2908
f927c5ae
JB
2909 defsubr (&Stry_completion);
2910 defsubr (&Sall_completions);
695deb18
SM
2911 defsubr (&Stest_completion);
2912 defsubr (&Sassoc_string);
f927c5ae
JB
2913 defsubr (&Scompleting_read);
2914 defsubr (&Sminibuffer_complete);
2915 defsubr (&Sminibuffer_complete_word);
2916 defsubr (&Sminibuffer_complete_and_exit);
2917 defsubr (&Sdisplay_completion_list);
2918 defsubr (&Sminibuffer_completion_help);
2919
2920 defsubr (&Sself_insert_and_exit);
2921 defsubr (&Sexit_minibuffer);
2922
2d955a50 2923 defsubr (&Sminibuffer_message);
f927c5ae
JB
2924}
2925
9d815fd9 2926void
f927c5ae
JB
2927keys_of_minibuf ()
2928{
2929 initial_define_key (Vminibuffer_local_map, Ctl ('g'),
2930 "abort-recursive-edit");
2931 initial_define_key (Vminibuffer_local_map, Ctl ('m'),
2932 "exit-minibuffer");
2933 initial_define_key (Vminibuffer_local_map, Ctl ('j'),
2934 "exit-minibuffer");
2935
f927c5ae
JB
2936 initial_define_key (Vminibuffer_local_ns_map, ' ',
2937 "exit-minibuffer");
2938 initial_define_key (Vminibuffer_local_ns_map, '\t',
2939 "exit-minibuffer");
2940 initial_define_key (Vminibuffer_local_ns_map, '?',
2941 "self-insert-and-exit");
2942
f927c5ae
JB
2943 initial_define_key (Vminibuffer_local_completion_map, '\t',
2944 "minibuffer-complete");
2945 initial_define_key (Vminibuffer_local_completion_map, ' ',
2946 "minibuffer-complete-word");
2947 initial_define_key (Vminibuffer_local_completion_map, '?',
2948 "minibuffer-completion-help");
2949
da8ec671
SM
2950 Fdefine_key (Vminibuffer_local_filename_completion_map,
2951 build_string (" "), Qnil);
bb0bdf70 2952
f927c5ae
JB
2953 initial_define_key (Vminibuffer_local_must_match_map, Ctl ('m'),
2954 "minibuffer-complete-and-exit");
2955 initial_define_key (Vminibuffer_local_must_match_map, Ctl ('j'),
2956 "minibuffer-complete-and-exit");
bb0bdf70 2957
5203cd03
JL
2958 Fdefine_key (Vminibuffer_local_must_match_filename_map,
2959 build_string (" "), Qnil);
f927c5ae 2960}
ab5796a9
MB
2961
2962/* arch-tag: 8f69b601-fba3-484c-a6dd-ceaee54a7a73
2963 (do not change this comment) */