annotate src/minibuf.c @ 1436:e7c5faab6571

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