annotate src/minibuf.c @ 5865:8dc616f310e8

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