annotate src/minibuf.c @ 4824:eaf67474339b

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