annotate src/minibuf.c @ 4413:5a00cec8e9b0

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