annotate lispref/minibuf.texi @ 36150:46e59561af4c

Display Vars node renamed Display Custom. Include info there about customizing cursor appearance. Clean up aggressive scrolling. Clarify horizontal scrolling discussion. Fix index entries for line number mode.
author Richard M. Stallman <rms@gnu.org>
date Sat, 17 Feb 2001 16:45:37 +0000
parents d2e5f1b7d8e2
children a137fb27df08
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1 @c -*-texinfo-*-
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2 @c This is part of the GNU Emacs Lisp Reference Manual.
27189
d2e5f1b7d8e2 Update copyrights.
Gerd Moellmann <gerd@gnu.org>
parents: 27187
diff changeset
3 @c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999
d2e5f1b7d8e2 Update copyrights.
Gerd Moellmann <gerd@gnu.org>
parents: 27187
diff changeset
4 @c Free Software Foundation, Inc.
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5 @c See the file elisp.texi for copying conditions.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6 @setfilename ../info/minibuf
7337
cd57cd335fff *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7221
diff changeset
7 @node Minibuffers, Command Loop, Read and Print, Top
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 @chapter Minibuffers
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9 @cindex arguments, reading
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10 @cindex complex arguments
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11 @cindex minibuffer
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 A @dfn{minibuffer} is a special buffer that Emacs commands use to read
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 arguments more complicated than the single numeric prefix argument.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 These arguments include file names, buffer names, and command names (as
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 in @kbd{M-x}). The minibuffer is displayed on the bottom line of the
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
17 frame, in the same place as the echo area, but only while it is in use
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
18 for reading an argument.
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 @menu
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 * Intro to Minibuffers:: Basic information about minibuffers.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 * Text from Minibuffer:: How to read a straight text string.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 * Object from Minibuffer:: How to read a Lisp object or expression.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24 * Minibuffer History:: Recording previous minibuffer inputs
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25 so the user can reuse them.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26 * Completion:: How to invoke and customize completion.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27 * Yes-or-No Queries:: Asking a question with a simple answer.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28 * Multiple Queries:: Asking a series of similar questions.
23147
ad9732e88e90 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 23146
diff changeset
29 * Reading a Password:: Reading a password from the terminal.
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 * Minibuffer Misc:: Various customization hooks and variables.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 @end menu
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 @node Intro to Minibuffers
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 @section Introduction to Minibuffers
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36 In most ways, a minibuffer is a normal Emacs buffer. Most operations
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37 @emph{within} a buffer, such as editing commands, work normally in a
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38 minibuffer. However, many operations for managing buffers do not apply
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39 to minibuffers. The name of a minibuffer always has the form @w{@samp{
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40 *Minibuf-@var{number}}}, and it cannot be changed. Minibuffers are
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 displayed only in special windows used only for minibuffers; these
22252
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
42 windows always appear at the bottom of a frame. (Sometimes frames have
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43 no minibuffer window, and sometimes a special kind of frame contains
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
44 nothing but a minibuffer window; see @ref{Minibuffers and Frames}.)
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23147
diff changeset
46 The text in the minibuffer always starts with the @dfn{prompt string},
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23147
diff changeset
47 the text that was specified by the program that is using the minibuffer
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23147
diff changeset
48 to tell the user what sort of input to type. This text is marked
26696
ef5e7bbe6f19 Current version from /gd/gnu/elisp.
Dave Love <fx@gnu.org>
parents: 25751
diff changeset
49 read-only so you won't accidentally delete or change it. It is also
ef5e7bbe6f19 Current version from /gd/gnu/elisp.
Dave Love <fx@gnu.org>
parents: 25751
diff changeset
50 marked as a field (@pxref{Fields}), so that certain motion functions,
ef5e7bbe6f19 Current version from /gd/gnu/elisp.
Dave Love <fx@gnu.org>
parents: 25751
diff changeset
51 including @code{beginning-of-line}, @code{forward-word},
ef5e7bbe6f19 Current version from /gd/gnu/elisp.
Dave Love <fx@gnu.org>
parents: 25751
diff changeset
52 @code{forward-sentence}, and @code{forward-paragraph}, stop at the
ef5e7bbe6f19 Current version from /gd/gnu/elisp.
Dave Love <fx@gnu.org>
parents: 25751
diff changeset
53 boundary between the prompt and the actual text. (In older Emacs
ef5e7bbe6f19 Current version from /gd/gnu/elisp.
Dave Love <fx@gnu.org>
parents: 25751
diff changeset
54 versions, the prompt was displayed using a special mechanism and was not
ef5e7bbe6f19 Current version from /gd/gnu/elisp.
Dave Love <fx@gnu.org>
parents: 25751
diff changeset
55 part of the buffer contents.)
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23147
diff changeset
56
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23147
diff changeset
57 The minibuffer's window is normally a single line; it grows
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23147
diff changeset
58 automatically if necessary if the contents require more space. You can
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23147
diff changeset
59 explicitly resize it temporarily with the window sizing commands; it
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23147
diff changeset
60 reverts to its normal size when the minibuffer is exited. You can
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23147
diff changeset
61 resize it permanently by using the window sizing commands in the frame's
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23147
diff changeset
62 other window, when the minibuffer is not active. If the frame contains
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23147
diff changeset
63 just a minibuffer, you can change the minibuffer's size by changing the
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23147
diff changeset
64 frame's size.
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66 If a command uses a minibuffer while there is an active minibuffer,
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 this is called a @dfn{recursive minibuffer}. The first minibuffer is
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 named @w{@samp{ *Minibuf-0*}}. Recursive minibuffers are named by
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 incrementing the number at the end of the name. (The names begin with a
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70 space so that they won't show up in normal buffer lists.) Of several
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71 recursive minibuffers, the innermost (or most recently entered) is the
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72 active minibuffer. We usually call this ``the'' minibuffer. You can
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73 permit or forbid recursive minibuffers by setting the variable
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
74 @code{enable-recursive-minibuffers} or by putting properties of that
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75 name on command symbols (@pxref{Minibuffer Misc}).
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
77 Like other buffers, a minibuffer may use any of several local keymaps
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78 (@pxref{Keymaps}); these contain various exit commands and in some cases
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
79 completion commands (@pxref{Completion}).
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
80
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
81 @itemize @bullet
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
82 @item
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83 @code{minibuffer-local-map} is for ordinary input (no completion).
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85 @item
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
86 @code{minibuffer-local-ns-map} is similar, except that @key{SPC} exits
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
87 just like @key{RET}. This is used mainly for Mocklisp compatibility.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
88
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
89 @item
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
90 @code{minibuffer-local-completion-map} is for permissive completion.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
91
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
92 @item
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
93 @code{minibuffer-local-must-match-map} is for strict completion and
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
94 for cautious completion.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95 @end itemize
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96
26696
ef5e7bbe6f19 Current version from /gd/gnu/elisp.
Dave Love <fx@gnu.org>
parents: 25751
diff changeset
97 When Emacs is running in batch mode, any request to read from the
ef5e7bbe6f19 Current version from /gd/gnu/elisp.
Dave Love <fx@gnu.org>
parents: 25751
diff changeset
98 minibuffer actually reads a line from the standard input descriptor that
ef5e7bbe6f19 Current version from /gd/gnu/elisp.
Dave Love <fx@gnu.org>
parents: 25751
diff changeset
99 was supplied when Emacs was started.
ef5e7bbe6f19 Current version from /gd/gnu/elisp.
Dave Love <fx@gnu.org>
parents: 25751
diff changeset
100
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
101 @node Text from Minibuffer
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
102 @section Reading Text Strings with the Minibuffer
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
103
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
104 Most often, the minibuffer is used to read text as a string. It can
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
105 also be used to read a Lisp object in textual form. The most basic
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
106 primitive for minibuffer input is @code{read-from-minibuffer}; it can do
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
107 either one.
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
109 In most cases, you should not call minibuffer input functions in the
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
110 middle of a Lisp function. Instead, do all minibuffer input as part of
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
111 reading the arguments for a command, in the @code{interactive}
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
112 specification. @xref{Defining Commands}.
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
113
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
114 @defun read-from-minibuffer prompt-string &optional initial-contents keymap read hist default inherit-input-method
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 This function is the most general way to get input through the
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 minibuffer. By default, it accepts arbitrary text and returns it as a
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 string; however, if @var{read} is non-@code{nil}, then it uses
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 @code{read} to convert the text into a Lisp object (@pxref{Input
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119 Functions}).
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
121 The first thing this function does is to activate a minibuffer and
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 display it with @var{prompt-string} as the prompt. This value must be a
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
123 string. Then the user can edit text in the minibuffer.
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
125 When the user types a command to exit the minibuffer,
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
126 @code{read-from-minibuffer} constructs the return value from the text in
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
127 the minibuffer. Normally it returns a string containing that text.
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
128 However, if @var{read} is non-@code{nil}, @code{read-from-minibuffer}
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
129 reads the text and returns the resulting Lisp object, unevaluated.
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
130 (@xref{Input Functions}, for information about reading.)
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
131
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
132 The argument @var{default} specifies a default value to make available
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
133 through the history commands. It should be a string, or @code{nil}. If
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
134 @var{read} is non-@code{nil}, then @var{default} is also used as the
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
135 input to @code{read}, if the user enters empty input. However, in the
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
136 usual case (where @var{read} is @code{nil}), @code{read-from-minibuffer}
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
137 does not return @var{default} when the user enters empty input; it
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
138 returns an empty string, @code{""}. In this respect, it is different
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
139 from all the other minibuffer input functions in this chapter.
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 If @var{keymap} is non-@code{nil}, that keymap is the local keymap to
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142 use in the minibuffer. If @var{keymap} is omitted or @code{nil}, the
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143 value of @code{minibuffer-local-map} is used as the keymap. Specifying
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 a keymap is the most important way to customize the minibuffer for
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 various applications such as completion.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147 The argument @var{hist} specifies which history list variable to use
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148 for saving the input and for history commands used in the minibuffer.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 It defaults to @code{minibuffer-history}. @xref{Minibuffer History}.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
151 If the variable @code{minibuffer-allow-text-properties} is
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
152 non-@code{nil}, then the string which is returned includes whatever text
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
153 properties were present in the minibuffer. Otherwise all the text
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
154 properties are stripped when the value is returned.
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
155
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
156 If the argument @var{inherit-input-method} is non-@code{nil}, then the
22252
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
157 minibuffer inherits the current input method (@pxref{Input Methods}) and
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
158 the setting of @code{enable-multibyte-characters} (@pxref{Text
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
159 Representations}) from whichever buffer was current before entering the
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
160 minibuffer.
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
161
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
162 If @var{initial-contents} is a string, @code{read-from-minibuffer}
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
163 inserts it into the minibuffer, leaving point at the end, before the
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
164 user starts to edit the text. The minibuffer appears with this text as
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
165 its initial contents.
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
166
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
167 Alternatively, @var{initial-contents} can be a cons cell of the form
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
168 @code{(@var{string} . @var{position})}. This means to insert
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
169 @var{string} in the minibuffer but put point @var{position} characters
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
170 from the beginning, rather than at the end.
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
171
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
172 @strong{Usage note:} The @var{initial-contents} argument and the
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
173 @var{default} argument are two alternative features for more or less the
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
174 same job. It does not make sense to use both features in a single call
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
175 to @code{read-from-minibuffer}. In general, we recommend using
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
176 @var{default}, since this permits the user to insert the default value
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
177 when it is wanted, but does not burden the user with deleting it from
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
178 the minibuffer on other occasions.
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179 @end defun
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
181 @defun read-string prompt &optional initial history default inherit-input-method
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182 This function reads a string from the minibuffer and returns it. The
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183 arguments @var{prompt} and @var{initial} are used as in
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
184 @code{read-from-minibuffer}. The keymap used is
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
185 @code{minibuffer-local-map}.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
186
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
187 The optional argument @var{history}, if non-nil, specifies a history
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
188 list and optionally the initial position in the list. The optional
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
189 argument @var{default} specifies a default value to return if the user
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
190 enters null input; it should be a string. The optional argument
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
191 @var{inherit-input-method} specifies whether to inherit the current
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
192 buffer's input method.
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
193
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
194 This function is a simplified interface to the
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
195 @code{read-from-minibuffer} function:
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
196
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197 @smallexample
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
198 @group
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
199 (read-string @var{prompt} @var{initial} @var{history} @var{default} @var{inherit})
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
200 @equiv{}
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
201 (let ((value
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
202 (read-from-minibuffer @var{prompt} @var{initial} nil nil
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
203 @var{history} @var{default} @var{inherit})))
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
204 (if (equal value "")
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
205 @var{default}
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
206 value))
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
207 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208 @end smallexample
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209 @end defun
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
211 @defvar minibuffer-allow-text-properties
22252
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
212 If this variable is @code{nil}, then @code{read-from-minibuffer} strips
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
213 all text properties from the minibuffer input before returning it.
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
214 Since all minibuffer input uses @code{read-from-minibuffer}, this
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
215 variable applies to all minibuffer input.
22252
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
216
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
217 Note that the completion functions discard text properties unconditionally,
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
218 regardless of the value of this variable.
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
219 @end defvar
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
220
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221 @defvar minibuffer-local-map
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222 This is the default local keymap for reading from the minibuffer. By
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223 default, it makes the following bindings:
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 @table @asis
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
226 @item @kbd{C-j}
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 @code{exit-minibuffer}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229 @item @key{RET}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 @code{exit-minibuffer}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232 @item @kbd{C-g}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233 @code{abort-recursive-edit}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 @item @kbd{M-n}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 @code{next-history-element}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238 @item @kbd{M-p}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239 @code{previous-history-element}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241 @item @kbd{M-r}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242 @code{next-matching-history-element}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
244 @item @kbd{M-s}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
245 @code{previous-matching-history-element}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
246 @end table
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247 @end defvar
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
248
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249 @c In version 18, initial is required
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250 @c Emacs 19 feature
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
251 @defun read-no-blanks-input prompt &optional initial inherit-input-method
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252 This function reads a string from the minibuffer, but does not allow
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253 whitespace characters as part of the input: instead, those characters
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
254 terminate the input. The arguments @var{prompt}, @var{initial}, and
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
255 @var{inherit-input-method} are used as in @code{read-from-minibuffer}.
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257 This is a simplified interface to the @code{read-from-minibuffer}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258 function, and passes the value of the @code{minibuffer-local-ns-map}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
259 keymap as the @var{keymap} argument for that function. Since the keymap
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
260 @code{minibuffer-local-ns-map} does not rebind @kbd{C-q}, it @emph{is}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
261 possible to put a space into the string, by quoting it.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
262
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263 @smallexample
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
264 @group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265 (read-no-blanks-input @var{prompt} @var{initial})
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
266 @equiv{}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
267 (read-from-minibuffer @var{prompt} @var{initial} minibuffer-local-ns-map)
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
268 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
269 @end smallexample
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
270 @end defun
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
271
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
272 @defvar minibuffer-local-ns-map
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
273 This built-in variable is the keymap used as the minibuffer local keymap
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
274 in the function @code{read-no-blanks-input}. By default, it makes the
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
275 following bindings, in addition to those of @code{minibuffer-local-map}:
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
276
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277 @table @asis
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
278 @item @key{SPC}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
279 @cindex @key{SPC} in minibuffer
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
280 @code{exit-minibuffer}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
281
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
282 @item @key{TAB}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
283 @cindex @key{TAB} in minibuffer
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
284 @code{exit-minibuffer}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
285
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
286 @item @kbd{?}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
287 @cindex @kbd{?} in minibuffer
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
288 @code{self-insert-and-exit}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
289 @end table
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
290 @end defvar
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
291
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
292 @node Object from Minibuffer
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
293 @section Reading Lisp Objects with the Minibuffer
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
294
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
295 This section describes functions for reading Lisp objects with the
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
296 minibuffer.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
297
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
298 @defun read-minibuffer prompt &optional initial
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
299 This function reads a Lisp object using the minibuffer, and returns it
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
300 without evaluating it. The arguments @var{prompt} and @var{initial} are
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
301 used as in @code{read-from-minibuffer}.
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
302
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
303 This is a simplified interface to the
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
304 @code{read-from-minibuffer} function:
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
305
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
306 @smallexample
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
307 @group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
308 (read-minibuffer @var{prompt} @var{initial})
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
309 @equiv{}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
310 (read-from-minibuffer @var{prompt} @var{initial} nil t)
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
311 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
312 @end smallexample
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
313
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
314 Here is an example in which we supply the string @code{"(testing)"} as
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
315 initial input:
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
316
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
317 @smallexample
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
318 @group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
319 (read-minibuffer
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
320 "Enter an expression: " (format "%s" '(testing)))
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
321
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
322 ;; @r{Here is how the minibuffer is displayed:}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
323 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
324
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
325 @group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
326 ---------- Buffer: Minibuffer ----------
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
327 Enter an expression: (testing)@point{}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
328 ---------- Buffer: Minibuffer ----------
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
329 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
330 @end smallexample
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
331
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
332 @noindent
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
333 The user can type @key{RET} immediately to use the initial input as a
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
334 default, or can edit the input.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
335 @end defun
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
336
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
337 @defun eval-minibuffer prompt &optional initial
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
338 This function reads a Lisp expression using the minibuffer, evaluates
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
339 it, then returns the result. The arguments @var{prompt} and
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
340 @var{initial} are used as in @code{read-from-minibuffer}.
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
341
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
342 This function simply evaluates the result of a call to
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
343 @code{read-minibuffer}:
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
344
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
345 @smallexample
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
346 @group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
347 (eval-minibuffer @var{prompt} @var{initial})
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
348 @equiv{}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
349 (eval (read-minibuffer @var{prompt} @var{initial}))
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
350 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
351 @end smallexample
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
352 @end defun
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
353
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
354 @defun edit-and-eval-command prompt form
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
355 This function reads a Lisp expression in the minibuffer, and then
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
356 evaluates it. The difference between this command and
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
357 @code{eval-minibuffer} is that here the initial @var{form} is not
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
358 optional and it is treated as a Lisp object to be converted to printed
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
359 representation rather than as a string of text. It is printed with
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
360 @code{prin1}, so if it is a string, double-quote characters (@samp{"})
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
361 appear in the initial text. @xref{Output Functions}.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
362
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
363 The first thing @code{edit-and-eval-command} does is to activate the
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
364 minibuffer with @var{prompt} as the prompt. Then it inserts the printed
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
365 representation of @var{form} in the minibuffer, and lets the user edit it.
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
366 When the user exits the minibuffer, the edited text is read with
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
367 @code{read} and then evaluated. The resulting value becomes the value
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
368 of @code{edit-and-eval-command}.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
369
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
370 In the following example, we offer the user an expression with initial
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
371 text which is a valid form already:
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
372
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
373 @smallexample
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
374 @group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
375 (edit-and-eval-command "Please edit: " '(forward-word 1))
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
376
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
377 ;; @r{After evaluation of the preceding expression,}
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
378 ;; @r{the following appears in the minibuffer:}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
379 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
380
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
381 @group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
382 ---------- Buffer: Minibuffer ----------
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
383 Please edit: (forward-word 1)@point{}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
384 ---------- Buffer: Minibuffer ----------
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
385 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
386 @end smallexample
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
387
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
388 @noindent
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
389 Typing @key{RET} right away would exit the minibuffer and evaluate the
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
390 expression, thus moving point forward one word.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
391 @code{edit-and-eval-command} returns @code{nil} in this example.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
392 @end defun
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
393
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
394 @node Minibuffer History
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
395 @section Minibuffer History
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
396 @cindex minibuffer history
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
397 @cindex history list
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
398
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
399 A @dfn{minibuffer history list} records previous minibuffer inputs so
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
400 the user can reuse them conveniently. A history list is actually a
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
401 symbol, not a list; it is a variable whose value is a list of strings
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
402 (previous inputs), most recent first.
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
403
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
404 There are many separate history lists, used for different kinds of
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
405 inputs. It's the Lisp programmer's job to specify the right history
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
406 list for each use of the minibuffer.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
407
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
408 The basic minibuffer input functions @code{read-from-minibuffer} and
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
409 @code{completing-read} both accept an optional argument named @var{hist}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
410 which is how you specify the history list. Here are the possible
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
411 values:
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
412
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
413 @table @asis
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
414 @item @var{variable}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
415 Use @var{variable} (a symbol) as the history list.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
416
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
417 @item (@var{variable} . @var{startpos})
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
418 Use @var{variable} (a symbol) as the history list, and assume that the
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
419 initial history position is @var{startpos} (an integer, counting from
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
420 zero which specifies the most recent element of the history).
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
421
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
422 If you specify @var{startpos}, then you should also specify that element
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
423 of the history as the initial minibuffer contents, for consistency.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
424 @end table
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
425
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
426 If you don't specify @var{hist}, then the default history list
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427 @code{minibuffer-history} is used. For other standard history lists,
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
428 see below. You can also create your own history list variable; just
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
429 initialize it to @code{nil} before the first use.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
430
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
431 Both @code{read-from-minibuffer} and @code{completing-read} add new
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
432 elements to the history list automatically, and provide commands to
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
433 allow the user to reuse items on the list. The only thing your program
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
434 needs to do to use a history list is to initialize it and to pass its
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
435 name to the input functions when you wish. But it is safe to modify the
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
436 list by hand when the minibuffer input functions are not using it.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
437
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
438 Here are some of the standard minibuffer history list variables:
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
439
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
440 @defvar minibuffer-history
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
441 The default history list for minibuffer history input.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
442 @end defvar
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
443
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
444 @defvar query-replace-history
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
445 A history list for arguments to @code{query-replace} (and similar
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
446 arguments to other commands).
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
447 @end defvar
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
448
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
449 @defvar file-name-history
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
450 A history list for file-name arguments.
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
451 @end defvar
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
452
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
453 @defvar buffer-name-history
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
454 A history list for buffer-name arguments.
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
455 @end defvar
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
456
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
457 @defvar regexp-history
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
458 A history list for regular expression arguments.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
459 @end defvar
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
460
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
461 @defvar extended-command-history
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
462 A history list for arguments that are names of extended commands.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
463 @end defvar
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
464
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
465 @defvar shell-command-history
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
466 A history list for arguments that are shell commands.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
467 @end defvar
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
468
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
469 @defvar read-expression-history
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
470 A history list for arguments that are Lisp expressions to evaluate.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
471 @end defvar
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
472
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
473 @node Completion
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
474 @section Completion
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
475 @cindex completion
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
476
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
477 @dfn{Completion} is a feature that fills in the rest of a name
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
478 starting from an abbreviation for it. Completion works by comparing the
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
479 user's input against a list of valid names and determining how much of
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
480 the name is determined uniquely by what the user has typed. For
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
481 example, when you type @kbd{C-x b} (@code{switch-to-buffer}) and then
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
482 type the first few letters of the name of the buffer to which you wish
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
483 to switch, and then type @key{TAB} (@code{minibuffer-complete}), Emacs
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
484 extends the name as far as it can.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
485
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
486 Standard Emacs commands offer completion for names of symbols, files,
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
487 buffers, and processes; with the functions in this section, you can
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
488 implement completion for other kinds of names.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
489
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
490 The @code{try-completion} function is the basic primitive for
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
491 completion: it returns the longest determined completion of a given
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
492 initial string, with a given set of strings to match against.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
493
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
494 The function @code{completing-read} provides a higher-level interface
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
495 for completion. A call to @code{completing-read} specifies how to
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
496 determine the list of valid names. The function then activates the
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
497 minibuffer with a local keymap that binds a few keys to commands useful
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
498 for completion. Other functions provide convenient simple interfaces
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
499 for reading certain kinds of names with completion.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
500
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
501 @menu
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
502 * Basic Completion:: Low-level functions for completing strings.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
503 (These are too low level to use the minibuffer.)
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
504 * Minibuffer Completion:: Invoking the minibuffer with completion.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
505 * Completion Commands:: Minibuffer commands that do completion.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
506 * High-Level Completion:: Convenient special cases of completion
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
507 (reading buffer name, file name, etc.)
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
508 * Reading File Names:: Using completion to read file names.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
509 * Programmed Completion:: Finding the completions for a given file name.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
510 @end menu
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
511
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
512 @node Basic Completion
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
513 @subsection Basic Completion Functions
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
514
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
515 The two functions @code{try-completion} and @code{all-completions}
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
516 have nothing in themselves to do with minibuffers. We describe them in
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
517 this chapter so as to keep them near the higher-level completion
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
518 features that do use the minibuffer.
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
519
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
520 @defun try-completion string collection &optional predicate
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
521 This function returns the longest common substring of all possible
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
522 completions of @var{string} in @var{collection}. The value of
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
523 @var{collection} must be an alist, an obarray, or a function that
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
524 implements a virtual set of strings (see below).
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
525
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
526 Completion compares @var{string} against each of the permissible
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
527 completions specified by @var{collection}; if the beginning of the
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
528 permissible completion equals @var{string}, it matches. If no permissible
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
529 completions match, @code{try-completion} returns @code{nil}. If only
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
530 one permissible completion matches, and the match is exact, then
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
531 @code{try-completion} returns @code{t}. Otherwise, the value is the
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
532 longest initial sequence common to all the permissible completions that
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
533 match.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
534
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
535 If @var{collection} is an alist (@pxref{Association Lists}), the
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
536 @sc{car}s of the alist elements form the set of permissible completions.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
537
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
538 @cindex obarray in completion
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
539 If @var{collection} is an obarray (@pxref{Creating Symbols}), the names
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
540 of all symbols in the obarray form the set of permissible completions. The
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
541 global variable @code{obarray} holds an obarray containing the names of
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
542 all interned Lisp symbols.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
543
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
544 Note that the only valid way to make a new obarray is to create it
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
545 empty and then add symbols to it one by one using @code{intern}.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
546 Also, you cannot intern a given symbol in more than one obarray.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
547
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
548 If the argument @var{predicate} is non-@code{nil}, then it must be a
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
549 function of one argument. It is used to test each possible match, and
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
550 the match is accepted only if @var{predicate} returns non-@code{nil}.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
551 The argument given to @var{predicate} is either a cons cell from the alist
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
552 (the @sc{car} of which is a string) or else it is a symbol (@emph{not} a
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
553 symbol name) from the obarray.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
554
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
555 You can also use a symbol that is a function as @var{collection}. Then
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
556 the function is solely responsible for performing completion;
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
557 @code{try-completion} returns whatever this function returns. The
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
558 function is called with three arguments: @var{string}, @var{predicate}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
559 and @code{nil}. (The reason for the third argument is so that the same
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
560 function can be used in @code{all-completions} and do the appropriate
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
561 thing in either case.) @xref{Programmed Completion}.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
562
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
563 In the first of the following examples, the string @samp{foo} is
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
564 matched by three of the alist @sc{car}s. All of the matches begin with
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
565 the characters @samp{fooba}, so that is the result. In the second
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
566 example, there is only one possible match, and it is exact, so the value
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
567 is @code{t}.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
568
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
569 @smallexample
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
570 @group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
571 (try-completion
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
572 "foo"
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
573 '(("foobar1" 1) ("barfoo" 2) ("foobaz" 3) ("foobar2" 4)))
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
574 @result{} "fooba"
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
575 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
576
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
577 @group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
578 (try-completion "foo" '(("barfoo" 2) ("foo" 3)))
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
579 @result{} t
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
580 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
581 @end smallexample
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
582
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
583 In the following example, numerous symbols begin with the characters
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
584 @samp{forw}, and all of them begin with the word @samp{forward}. In
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
585 most of the symbols, this is followed with a @samp{-}, but not in all,
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
586 so no more than @samp{forward} can be completed.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
587
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
588 @smallexample
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
589 @group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
590 (try-completion "forw" obarray)
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
591 @result{} "forward"
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
592 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
593 @end smallexample
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
594
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
595 Finally, in the following example, only two of the three possible
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
596 matches pass the predicate @code{test} (the string @samp{foobaz} is
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
597 too short). Both of those begin with the string @samp{foobar}.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
598
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
599 @smallexample
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
600 @group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
601 (defun test (s)
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
602 (> (length (car s)) 6))
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
603 @result{} test
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
604 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
605 @group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
606 (try-completion
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
607 "foo"
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
608 '(("foobar1" 1) ("barfoo" 2) ("foobaz" 3) ("foobar2" 4))
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
609 'test)
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
610 @result{} "foobar"
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
611 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
612 @end smallexample
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
613 @end defun
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
614
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 8753
diff changeset
615 @defun all-completions string collection &optional predicate nospace
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
616 This function returns a list of all possible completions of
27093
4b1a67a46d8c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 26696
diff changeset
617 @var{string}. The arguments to this function (aside from @var{nospace})
4b1a67a46d8c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 26696
diff changeset
618 are the same as those of @code{try-completion}. If @var{nospace} is
4b1a67a46d8c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 26696
diff changeset
619 non-@code{nil}, completions that start with a space are ignored unless
4b1a67a46d8c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 26696
diff changeset
620 @var{string} also starts with a space.
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
621
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
622 If @var{collection} is a function, it is called with three arguments:
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
623 @var{string}, @var{predicate} and @code{t}; then @code{all-completions}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
624 returns whatever the function returns. @xref{Programmed Completion}.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
625
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
626 Here is an example, using the function @code{test} shown in the
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
627 example for @code{try-completion}:
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
628
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
629 @smallexample
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
630 @group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
631 (defun test (s)
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
632 (> (length (car s)) 6))
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
633 @result{} test
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
634 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
635
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
636 @group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
637 (all-completions
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
638 "foo"
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
639 '(("foobar1" 1) ("barfoo" 2) ("foobaz" 3) ("foobar2" 4))
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
640 'test)
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
641 @result{} ("foobar1" "foobar2")
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
642 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
643 @end smallexample
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
644 @end defun
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
645
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
646 @defvar completion-ignore-case
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
647 If the value of this variable is
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
648 non-@code{nil}, Emacs does not consider case significant in completion.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
649 @end defvar
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
650
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
651 @node Minibuffer Completion
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
652 @subsection Completion and the Minibuffer
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
653
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
654 This section describes the basic interface for reading from the
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
655 minibuffer with completion.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
656
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
657 @defun completing-read prompt collection &optional predicate require-match initial hist default inherit-input-method
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
658 This function reads a string in the minibuffer, assisting the user by
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
659 providing completion. It activates the minibuffer with prompt
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
660 @var{prompt}, which must be a string.
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
661
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
662 The actual completion is done by passing @var{collection} and
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
663 @var{predicate} to the function @code{try-completion}. This happens in
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
664 certain commands bound in the local keymaps used for completion.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
665
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
666 If @var{require-match} is @code{nil}, the exit commands work regardless
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
667 of the input in the minibuffer. If @var{require-match} is @code{t}, the
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
668 usual minibuffer exit commands won't exit unless the input completes to
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
669 an element of @var{collection}. If @var{require-match} is neither
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
670 @code{nil} nor @code{t}, then the exit commands won't exit unless the
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
671 input already in the buffer matches an element of @var{collection}.
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
672
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
673 However, empty input is always permitted, regardless of the value of
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
674 @var{require-match}; in that case, @code{completing-read} returns
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
675 @var{default}. The value of @var{default} (if non-@code{nil}) is also
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
676 available to the user through the history commands.
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
677
8753
6093207b85e8 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 8529
diff changeset
678 The user can exit with null input by typing @key{RET} with an empty
16238
75913ae7ac7e Clarify how completing-read returns an empty string.
Richard M. Stallman <rms@gnu.org>
parents: 16157
diff changeset
679 minibuffer. Then @code{completing-read} returns @code{""}. This is how
75913ae7ac7e Clarify how completing-read returns an empty string.
Richard M. Stallman <rms@gnu.org>
parents: 16157
diff changeset
680 the user requests whatever default the command uses for the value being
75913ae7ac7e Clarify how completing-read returns an empty string.
Richard M. Stallman <rms@gnu.org>
parents: 16157
diff changeset
681 read. The user can return using @key{RET} in this way regardless of the
75913ae7ac7e Clarify how completing-read returns an empty string.
Richard M. Stallman <rms@gnu.org>
parents: 16157
diff changeset
682 value of @var{require-match}, and regardless of whether the empty string
75913ae7ac7e Clarify how completing-read returns an empty string.
Richard M. Stallman <rms@gnu.org>
parents: 16157
diff changeset
683 is included in @var{collection}.
8753
6093207b85e8 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 8529
diff changeset
684
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
685 The function @code{completing-read} works by calling
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
686 @code{read-minibuffer}. It uses @code{minibuffer-local-completion-map}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
687 as the keymap if @var{require-match} is @code{nil}, and uses
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
688 @code{minibuffer-local-must-match-map} if @var{require-match} is
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
689 non-@code{nil}. @xref{Completion Commands}.
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
690
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
691 The argument @var{hist} specifies which history list variable to use for
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
692 saving the input and for minibuffer history commands. It defaults to
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
693 @code{minibuffer-history}. @xref{Minibuffer History}.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
694
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
695 If @var{initial} is non-@code{nil}, @code{completing-read} inserts it
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
696 into the minibuffer as part of the input. Then it allows the user to
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
697 edit the input, providing several commands to attempt completion.
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
698 In most cases, we recommend using @var{default}, and not @var{initial}.
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
699
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
700 If the argument @var{inherit-input-method} is non-@code{nil}, then the
22252
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
701 minibuffer inherits the current input method (@pxref{Input
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
702 Methods}) and the setting of @code{enable-multibyte-characters}
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
703 (@pxref{Text Representations}) from whichever buffer was current before
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
704 entering the minibuffer.
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
705
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
706 Completion ignores case when comparing the input against the possible
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
707 matches, if the built-in variable @code{completion-ignore-case} is
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
708 non-@code{nil}. @xref{Basic Completion}.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
709
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
710 Here's an example of using @code{completing-read}:
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
711
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
712 @smallexample
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
713 @group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
714 (completing-read
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
715 "Complete a foo: "
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
716 '(("foobar1" 1) ("barfoo" 2) ("foobaz" 3) ("foobar2" 4))
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
717 nil t "fo")
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
718 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
719
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
720 @group
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
721 ;; @r{After evaluation of the preceding expression,}
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
722 ;; @r{the following appears in the minibuffer:}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
723
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
724 ---------- Buffer: Minibuffer ----------
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
725 Complete a foo: fo@point{}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
726 ---------- Buffer: Minibuffer ----------
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
727 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
728 @end smallexample
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
729
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
730 @noindent
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
731 If the user then types @kbd{@key{DEL} @key{DEL} b @key{RET}},
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
732 @code{completing-read} returns @code{barfoo}.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
733
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
734 The @code{completing-read} function binds three variables to pass
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
735 information to the commands that actually do completion. These
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
736 variables are @code{minibuffer-completion-table},
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
737 @code{minibuffer-completion-predicate} and
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
738 @code{minibuffer-completion-confirm}. For more information about them,
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
739 see @ref{Completion Commands}.
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
740 @end defun
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
741
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
742 @node Completion Commands
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23147
diff changeset
743 @subsection Minibuffer Commands that Do Completion
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
744
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
745 This section describes the keymaps, commands and user options used in
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
746 the minibuffer to do completion.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
747
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
748 @defvar minibuffer-local-completion-map
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
749 @code{completing-read} uses this value as the local keymap when an
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
750 exact match of one of the completions is not required. By default, this
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
751 keymap makes the following bindings:
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
752
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
753 @table @asis
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
754 @item @kbd{?}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
755 @code{minibuffer-completion-help}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
756
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
757 @item @key{SPC}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
758 @code{minibuffer-complete-word}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
759
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
760 @item @key{TAB}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
761 @code{minibuffer-complete}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
762 @end table
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
763
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
764 @noindent
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
765 with other characters bound as in @code{minibuffer-local-map}
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
766 (@pxref{Text from Minibuffer}).
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
767 @end defvar
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
768
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
769 @defvar minibuffer-local-must-match-map
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
770 @code{completing-read} uses this value as the local keymap when an
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
771 exact match of one of the completions is required. Therefore, no keys
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
772 are bound to @code{exit-minibuffer}, the command that exits the
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
773 minibuffer unconditionally. By default, this keymap makes the following
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
774 bindings:
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
775
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
776 @table @asis
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
777 @item @kbd{?}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
778 @code{minibuffer-completion-help}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
779
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
780 @item @key{SPC}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
781 @code{minibuffer-complete-word}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
782
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
783 @item @key{TAB}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
784 @code{minibuffer-complete}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
785
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
786 @item @kbd{C-j}
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
787 @code{minibuffer-complete-and-exit}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
788
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
789 @item @key{RET}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
790 @code{minibuffer-complete-and-exit}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
791 @end table
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
792
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
793 @noindent
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
794 with other characters bound as in @code{minibuffer-local-map}.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
795 @end defvar
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
796
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
797 @defvar minibuffer-completion-table
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
798 The value of this variable is the alist or obarray used for completion
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
799 in the minibuffer. This is the global variable that contains what
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
800 @code{completing-read} passes to @code{try-completion}. It is used by
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
801 minibuffer completion commands such as @code{minibuffer-complete-word}.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
802 @end defvar
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
803
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
804 @defvar minibuffer-completion-predicate
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
805 This variable's value is the predicate that @code{completing-read}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
806 passes to @code{try-completion}. The variable is also used by the other
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
807 minibuffer completion functions.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
808 @end defvar
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
809
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
810 @deffn Command minibuffer-complete-word
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
811 This function completes the minibuffer contents by at most a single
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
812 word. Even if the minibuffer contents have only one completion,
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
813 @code{minibuffer-complete-word} does not add any characters beyond the
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
814 first character that is not a word constituent. @xref{Syntax Tables}.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
815 @end deffn
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
816
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
817 @deffn Command minibuffer-complete
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
818 This function completes the minibuffer contents as far as possible.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
819 @end deffn
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
820
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
821 @deffn Command minibuffer-complete-and-exit
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
822 This function completes the minibuffer contents, and exits if
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
823 confirmation is not required, i.e., if
13319
ce09d77f76a6 Minor fix in minibuffer-complete-and-exit.
Richard M. Stallman <rms@gnu.org>
parents: 12226
diff changeset
824 @code{minibuffer-completion-confirm} is @code{nil}. If confirmation
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
825 @emph{is} required, it is given by repeating this command
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
826 immediately---the command is programmed to work without confirmation
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
827 when run twice in succession.
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
828 @end deffn
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
829
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
830 @defvar minibuffer-completion-confirm
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
831 When the value of this variable is non-@code{nil}, Emacs asks for
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
832 confirmation of a completion before exiting the minibuffer. The
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
833 function @code{minibuffer-complete-and-exit} checks the value of this
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
834 variable before it exits.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
835 @end defvar
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
836
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
837 @deffn Command minibuffer-completion-help
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
838 This function creates a list of the possible completions of the
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
839 current minibuffer contents. It works by calling @code{all-completions}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
840 using the value of the variable @code{minibuffer-completion-table} as
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
841 the @var{collection} argument, and the value of
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
842 @code{minibuffer-completion-predicate} as the @var{predicate} argument.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
843 The list of completions is displayed as text in a buffer named
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
844 @samp{*Completions*}.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
845 @end deffn
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
846
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
847 @defun display-completion-list completions
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
848 This function displays @var{completions} to the stream in
7337
cd57cd335fff *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7221
diff changeset
849 @code{standard-output}, usually a buffer. (@xref{Read and Print}, for more
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
850 information about streams.) The argument @var{completions} is normally
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
851 a list of completions just returned by @code{all-completions}, but it
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
852 does not have to be. Each element may be a symbol or a string, either
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
853 of which is simply printed, or a list of two strings, which is printed
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
854 as if the strings were concatenated.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
855
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
856 This function is called by @code{minibuffer-completion-help}. The
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
857 most common way to use it is together with
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
858 @code{with-output-to-temp-buffer}, like this:
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
859
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
860 @example
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
861 (with-output-to-temp-buffer "*Completions*"
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
862 (display-completion-list
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
863 (all-completions (buffer-string) my-alist)))
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
864 @end example
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
865 @end defun
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
866
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
867 @defopt completion-auto-help
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
868 If this variable is non-@code{nil}, the completion commands
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
869 automatically display a list of possible completions whenever nothing
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
870 can be completed because the next character is not uniquely determined.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
871 @end defopt
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
872
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
873 @node High-Level Completion
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
874 @subsection High-Level Completion Functions
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
875
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
876 This section describes the higher-level convenient functions for
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
877 reading certain sorts of names with completion.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
878
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
879 In most cases, you should not call these functions in the middle of a
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
880 Lisp function. When possible, do all minibuffer input as part of
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
881 reading the arguments for a command, in the @code{interactive}
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
882 specification. @xref{Defining Commands}.
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
883
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
884 @defun read-buffer prompt &optional default existing
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
885 This function reads the name of a buffer and returns it as a string.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
886 The argument @var{default} is the default name to use, the value to
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
887 return if the user exits with an empty minibuffer. If non-@code{nil},
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
888 it should be a string or a buffer. It is mentioned in the prompt, but
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
889 is not inserted in the minibuffer as initial input.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
890
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
891 If @var{existing} is non-@code{nil}, then the name specified must be
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
892 that of an existing buffer. The usual commands to exit the minibuffer
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
893 do not exit if the text is not valid, and @key{RET} does completion to
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
894 attempt to find a valid name. (However, @var{default} is not checked
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
895 for validity; it is returned, whatever it is, if the user exits with the
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
896 minibuffer empty.)
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
897
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
898 In the following example, the user enters @samp{minibuffer.t}, and
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
899 then types @key{RET}. The argument @var{existing} is @code{t}, and the
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
900 only buffer name starting with the given input is
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
901 @samp{minibuffer.texi}, so that name is the value.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
902
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
903 @example
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
904 (read-buffer "Buffer name? " "foo" t)
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
905 @group
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
906 ;; @r{After evaluation of the preceding expression,}
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
907 ;; @r{the following prompt appears,}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
908 ;; @r{with an empty minibuffer:}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
909 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
910
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
911 @group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
912 ---------- Buffer: Minibuffer ----------
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
913 Buffer name? (default foo) @point{}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
914 ---------- Buffer: Minibuffer ----------
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
915 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
916
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
917 @group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
918 ;; @r{The user types @kbd{minibuffer.t @key{RET}}.}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
919 @result{} "minibuffer.texi"
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
920 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
921 @end example
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
922 @end defun
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
923
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
924 @defvar read-buffer-function
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
925 This variable specifies how to read buffer names. For example, if you
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
926 set this variable to @code{iswitchb-read-buffer}, all Emacs commands
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
927 that call @code{read-buffer} to read a buffer name will actually use the
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
928 @code{iswitchb} package to read it.
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
929 @end defvar
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
930
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
931 @defun read-command prompt &optional default
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
932 This function reads the name of a command and returns it as a Lisp
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
933 symbol. The argument @var{prompt} is used as in
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
934 @code{read-from-minibuffer}. Recall that a command is anything for
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
935 which @code{commandp} returns @code{t}, and a command name is a symbol
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
936 for which @code{commandp} returns @code{t}. @xref{Interactive Call}.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
937
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
938 The argument @var{default} specifies what to return if the user enters
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
939 null input. It can be a symbol or a string; if it is a string,
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
940 @code{read-command} interns it before returning it. If @var{default} is
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
941 @code{nil}, that means no default has been specified; then if the user
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
942 enters null input, the return value is @code{nil}.
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
943
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
944 @example
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
945 (read-command "Command name? ")
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
946
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
947 @group
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
948 ;; @r{After evaluation of the preceding expression,}
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
949 ;; @r{the following prompt appears with an empty minibuffer:}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
950 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
951
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
952 @group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
953 ---------- Buffer: Minibuffer ----------
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
954 Command name?
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
955 ---------- Buffer: Minibuffer ----------
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
956 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
957 @end example
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
958
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
959 @noindent
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
960 If the user types @kbd{forward-c @key{RET}}, then this function returns
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
961 @code{forward-char}.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
962
16736
981e116b4ac6 Minor cleanups for overfull hboxes.
Richard M. Stallman <rms@gnu.org>
parents: 16238
diff changeset
963 The @code{read-command} function is a simplified interface to
981e116b4ac6 Minor cleanups for overfull hboxes.
Richard M. Stallman <rms@gnu.org>
parents: 16238
diff changeset
964 @code{completing-read}. It uses the variable @code{obarray} so as to
981e116b4ac6 Minor cleanups for overfull hboxes.
Richard M. Stallman <rms@gnu.org>
parents: 16238
diff changeset
965 complete in the set of extant Lisp symbols, and it uses the
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
966 @code{commandp} predicate so as to accept only command names:
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
967
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
968 @cindex @code{commandp} example
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
969 @example
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
970 @group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
971 (read-command @var{prompt})
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
972 @equiv{}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
973 (intern (completing-read @var{prompt} obarray
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
974 'commandp t nil))
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
975 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
976 @end example
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
977 @end defun
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
978
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
979 @defun read-variable prompt &optional default
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
980 This function reads the name of a user variable and returns it as a
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
981 symbol.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
982
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
983 The argument @var{default} specifies what to return if the user enters
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
984 null input. It can be a symbol or a string; if it is a string,
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
985 @code{read-variable} interns it before returning it. If @var{default}
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
986 is @code{nil}, that means no default has been specified; then if the
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
987 user enters null input, the return value is @code{nil}.
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
988
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
989 @example
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
990 @group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
991 (read-variable "Variable name? ")
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
992
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
993 ;; @r{After evaluation of the preceding expression,}
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
994 ;; @r{the following prompt appears,}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
995 ;; @r{with an empty minibuffer:}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
996 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
997
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
998 @group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
999 ---------- Buffer: Minibuffer ----------
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1000 Variable name? @point{}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1001 ---------- Buffer: Minibuffer ----------
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1002 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1003 @end example
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1004
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1005 @noindent
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1006 If the user then types @kbd{fill-p @key{RET}}, @code{read-variable}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1007 returns @code{fill-prefix}.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1008
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1009 This function is similar to @code{read-command}, but uses the
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1010 predicate @code{user-variable-p} instead of @code{commandp}:
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1011
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1012 @cindex @code{user-variable-p} example
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1013 @example
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1014 @group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1015 (read-variable @var{prompt})
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1016 @equiv{}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1017 (intern
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1018 (completing-read @var{prompt} obarray
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1019 'user-variable-p t nil))
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1020 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1021 @end example
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1022 @end defun
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1023
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1024 See also the functions @code{read-coding-system} and
22252
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
1025 @code{read-non-nil-coding-system}, in @ref{User-Chosen Coding Systems}.
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1026
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1027 @node Reading File Names
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1028 @subsection Reading File Names
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1029
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1030 Here is another high-level completion function, designed for reading a
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1031 file name. It provides special features including automatic insertion
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1032 of the default directory.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1033
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1034 @defun read-file-name prompt &optional directory default existing initial
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1035 This function reads a file name in the minibuffer, prompting with
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1036 @var{prompt} and providing completion. If @var{default} is
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1037 non-@code{nil}, then the function returns @var{default} if the user just
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1038 types @key{RET}. @var{default} is not checked for validity; it is
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1039 returned, whatever it is, if the user exits with the minibuffer empty.
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1040
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1041 If @var{existing} is non-@code{nil}, then the user must specify the name
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1042 of an existing file; @key{RET} performs completion to make the name
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1043 valid if possible, and then refuses to exit if it is not valid. If the
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1044 value of @var{existing} is neither @code{nil} nor @code{t}, then
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1045 @key{RET} also requires confirmation after completion. If
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1046 @var{existing} is @code{nil}, then the name of a nonexistent file is
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1047 acceptable.
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1048
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1049 The argument @var{directory} specifies the directory to use for
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1050 completion of relative file names. If @code{insert-default-directory}
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1051 is non-@code{nil}, @var{directory} is also inserted in the minibuffer as
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1052 initial input. It defaults to the current buffer's value of
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1053 @code{default-directory}.
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1054
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1055 @c Emacs 19 feature
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1056 If you specify @var{initial}, that is an initial file name to insert in
22252
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
1057 the buffer (after @var{directory}, if that is inserted). In this
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1058 case, point goes at the beginning of @var{initial}. The default for
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1059 @var{initial} is @code{nil}---don't insert any file name. To see what
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1060 @var{initial} does, try the command @kbd{C-x C-v}. @strong{Note:} we
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1061 recommend using @var{default} rather than @var{initial} in most cases.
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1062
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1063 Here is an example:
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1064
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1065 @example
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1066 @group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1067 (read-file-name "The file is ")
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1068
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1069 ;; @r{After evaluation of the preceding expression,}
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1070 ;; @r{the following appears in the minibuffer:}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1071 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1072
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1073 @group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1074 ---------- Buffer: Minibuffer ----------
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1075 The file is /gp/gnu/elisp/@point{}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1076 ---------- Buffer: Minibuffer ----------
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1077 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1078 @end example
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1079
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1080 @noindent
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1081 Typing @kbd{manual @key{TAB}} results in the following:
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1082
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1083 @example
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1084 @group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1085 ---------- Buffer: Minibuffer ----------
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1086 The file is /gp/gnu/elisp/manual.texi@point{}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1087 ---------- Buffer: Minibuffer ----------
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1088 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1089 @end example
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1090
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1091 @c Wordy to avoid overfull hbox in smallbook mode.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1092 @noindent
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1093 If the user types @key{RET}, @code{read-file-name} returns the file name
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1094 as the string @code{"/gp/gnu/elisp/manual.texi"}.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1095 @end defun
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1096
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1097 @defopt insert-default-directory
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1098 This variable is used by @code{read-file-name}. Its value controls
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1099 whether @code{read-file-name} starts by placing the name of the default
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1100 directory in the minibuffer, plus the initial file name if any. If the
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1101 value of this variable is @code{nil}, then @code{read-file-name} does
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1102 not place any initial input in the minibuffer (unless you specify
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1103 initial input with the @var{initial} argument). In that case, the
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1104 default directory is still used for completion of relative file names,
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1105 but is not displayed.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1106
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1107 For example:
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1108
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1109 @example
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1110 @group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1111 ;; @r{Here the minibuffer starts out with the default directory.}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1112 (let ((insert-default-directory t))
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1113 (read-file-name "The file is "))
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1114 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1115
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1116 @group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1117 ---------- Buffer: Minibuffer ----------
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1118 The file is ~lewis/manual/@point{}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1119 ---------- Buffer: Minibuffer ----------
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1120 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1121
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1122 @group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1123 ;; @r{Here the minibuffer is empty and only the prompt}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1124 ;; @r{appears on its line.}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1125 (let ((insert-default-directory nil))
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1126 (read-file-name "The file is "))
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1127 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1128
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1129 @group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1130 ---------- Buffer: Minibuffer ----------
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1131 The file is @point{}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1132 ---------- Buffer: Minibuffer ----------
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1133 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1134 @end example
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1135 @end defopt
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1136
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1137 @node Programmed Completion
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1138 @subsection Programmed Completion
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1139 @cindex programmed completion
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1140
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1141 Sometimes it is not possible to create an alist or an obarray
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1142 containing all the intended possible completions. In such a case, you
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1143 can supply your own function to compute the completion of a given string.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1144 This is called @dfn{programmed completion}.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1145
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1146 To use this feature, pass a symbol with a function definition as the
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1147 @var{collection} argument to @code{completing-read}. The function
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1148 @code{completing-read} arranges to pass your completion function along
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1149 to @code{try-completion} and @code{all-completions}, which will then let
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1150 your function do all the work.
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1151
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1152 The completion function should accept three arguments:
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1153
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1154 @itemize @bullet
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1155 @item
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1156 The string to be completed.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1157
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1158 @item
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1159 The predicate function to filter possible matches, or @code{nil} if
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1160 none. Your function should call the predicate for each possible match,
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1161 and ignore the possible match if the predicate returns @code{nil}.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1162
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1163 @item
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1164 A flag specifying the type of operation.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1165 @end itemize
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1166
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1167 There are three flag values for three operations:
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1168
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1169 @itemize @bullet
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1170 @item
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1171 @code{nil} specifies @code{try-completion}. The completion function
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1172 should return the completion of the specified string, or @code{t} if the
16157
1713fe640e41 Clarify value returned by programmed completion function.
Richard M. Stallman <rms@gnu.org>
parents: 15768
diff changeset
1173 string is a unique and exact match already, or @code{nil} if the string
1713fe640e41 Clarify value returned by programmed completion function.
Richard M. Stallman <rms@gnu.org>
parents: 15768
diff changeset
1174 matches no possibility.
1713fe640e41 Clarify value returned by programmed completion function.
Richard M. Stallman <rms@gnu.org>
parents: 15768
diff changeset
1175
1713fe640e41 Clarify value returned by programmed completion function.
Richard M. Stallman <rms@gnu.org>
parents: 15768
diff changeset
1176 If the string is an exact match for one possibility, but also matches
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1177 other longer possibilities, the function should return the string, not
16157
1713fe640e41 Clarify value returned by programmed completion function.
Richard M. Stallman <rms@gnu.org>
parents: 15768
diff changeset
1178 @code{t}.
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1179
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1180 @item
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1181 @code{t} specifies @code{all-completions}. The completion function
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1182 should return a list of all possible completions of the specified
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1183 string.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1184
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1185 @item
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1186 @code{lambda} specifies a test for an exact match. The completion
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1187 function should return @code{t} if the specified string is an exact
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1188 match for some possibility; @code{nil} otherwise.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1189 @end itemize
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1190
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1191 It would be consistent and clean for completion functions to allow
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1192 lambda expressions (lists that are functions) as well as function
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1193 symbols as @var{collection}, but this is impossible. Lists as
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1194 completion tables are already assigned another meaning---as alists. It
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1195 would be unreliable to fail to handle an alist normally because it is
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1196 also a possible function. So you must arrange for any function you wish
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1197 to use for completion to be encapsulated in a symbol.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1198
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1199 Emacs uses programmed completion when completing file names.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1200 @xref{File Name Completion}.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1201
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1202 @node Yes-or-No Queries
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1203 @section Yes-or-No Queries
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1204 @cindex asking the user questions
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1205 @cindex querying the user
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1206 @cindex yes-or-no questions
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1207
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1208 This section describes functions used to ask the user a yes-or-no
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1209 question. The function @code{y-or-n-p} can be answered with a single
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1210 character; it is useful for questions where an inadvertent wrong answer
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1211 will not have serious consequences. @code{yes-or-no-p} is suitable for
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1212 more momentous questions, since it requires three or four characters to
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1213 answer.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1214
7337
cd57cd335fff *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7221
diff changeset
1215 If either of these functions is called in a command that was invoked
cd57cd335fff *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7221
diff changeset
1216 using the mouse---more precisely, if @code{last-nonmenu-event}
cd57cd335fff *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7221
diff changeset
1217 (@pxref{Command Loop Info}) is either @code{nil} or a list---then it
cd57cd335fff *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7221
diff changeset
1218 uses a dialog box or pop-up menu to ask the question. Otherwise, it
cd57cd335fff *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7221
diff changeset
1219 uses keyboard input. You can force use of the mouse or use of keyboard
cd57cd335fff *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7221
diff changeset
1220 input by binding @code{last-nonmenu-event} to a suitable value around
cd57cd335fff *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7221
diff changeset
1221 the call.
cd57cd335fff *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7221
diff changeset
1222
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1223 Strictly speaking, @code{yes-or-no-p} uses the minibuffer and
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1224 @code{y-or-n-p} does not; but it seems best to describe them together.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1225
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1226 @defun y-or-n-p prompt
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1227 This function asks the user a question, expecting input in the echo
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1228 area. It returns @code{t} if the user types @kbd{y}, @code{nil} if the
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1229 user types @kbd{n}. This function also accepts @key{SPC} to mean yes
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1230 and @key{DEL} to mean no. It accepts @kbd{C-]} to mean ``quit'', like
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1231 @kbd{C-g}, because the question might look like a minibuffer and for
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1232 that reason the user might try to use @kbd{C-]} to get out. The answer
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1233 is a single character, with no @key{RET} needed to terminate it. Upper
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1234 and lower case are equivalent.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1235
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1236 ``Asking the question'' means printing @var{prompt} in the echo area,
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1237 followed by the string @w{@samp{(y or n) }}. If the input is not one of
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1238 the expected answers (@kbd{y}, @kbd{n}, @kbd{@key{SPC}},
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1239 @kbd{@key{DEL}}, or something that quits), the function responds
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1240 @samp{Please answer y or n.}, and repeats the request.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1241
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1242 This function does not actually use the minibuffer, since it does not
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1243 allow editing of the answer. It actually uses the echo area (@pxref{The
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1244 Echo Area}), which uses the same screen space as the minibuffer. The
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1245 cursor moves to the echo area while the question is being asked.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1246
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1247 The answers and their meanings, even @samp{y} and @samp{n}, are not
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1248 hardwired. The keymap @code{query-replace-map} specifies them.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1249 @xref{Search and Replace}.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1250
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1251 In the following example, the user first types @kbd{q}, which is
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1252 invalid. At the next prompt the user types @kbd{y}.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1253
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1254 @smallexample
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1255 @group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1256 (y-or-n-p "Do you need a lift? ")
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1257
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1258 ;; @r{After evaluation of the preceding expression,}
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1259 ;; @r{the following prompt appears in the echo area:}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1260 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1261
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1262 @group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1263 ---------- Echo area ----------
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1264 Do you need a lift? (y or n)
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1265 ---------- Echo area ----------
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1266 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1267
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1268 ;; @r{If the user then types @kbd{q}, the following appears:}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1269
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1270 @group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1271 ---------- Echo area ----------
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1272 Please answer y or n. Do you need a lift? (y or n)
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1273 ---------- Echo area ----------
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1274 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1275
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1276 ;; @r{When the user types a valid answer,}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1277 ;; @r{it is displayed after the question:}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1278
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1279 @group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1280 ---------- Echo area ----------
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1281 Do you need a lift? (y or n) y
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1282 ---------- Echo area ----------
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1283 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1284 @end smallexample
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1285
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1286 @noindent
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1287 We show successive lines of echo area messages, but only one actually
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1288 appears on the screen at a time.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1289 @end defun
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1290
15768
b913a75fddee Add y-or-n-p-with-timeout.
Richard M. Stallman <rms@gnu.org>
parents: 13319
diff changeset
1291 @defun y-or-n-p-with-timeout prompt seconds default-value
b913a75fddee Add y-or-n-p-with-timeout.
Richard M. Stallman <rms@gnu.org>
parents: 13319
diff changeset
1292 Like @code{y-or-n-p}, except that if the user fails to answer within
b913a75fddee Add y-or-n-p-with-timeout.
Richard M. Stallman <rms@gnu.org>
parents: 13319
diff changeset
1293 @var{seconds} seconds, this function stops waiting and returns
b913a75fddee Add y-or-n-p-with-timeout.
Richard M. Stallman <rms@gnu.org>
parents: 13319
diff changeset
1294 @var{default-value}. It works by setting up a timer; see @ref{Timers}.
b913a75fddee Add y-or-n-p-with-timeout.
Richard M. Stallman <rms@gnu.org>
parents: 13319
diff changeset
1295 The argument @var{seconds} may be an integer or a floating point number.
b913a75fddee Add y-or-n-p-with-timeout.
Richard M. Stallman <rms@gnu.org>
parents: 13319
diff changeset
1296 @end defun
b913a75fddee Add y-or-n-p-with-timeout.
Richard M. Stallman <rms@gnu.org>
parents: 13319
diff changeset
1297
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1298 @defun yes-or-no-p prompt
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1299 This function asks the user a question, expecting input in the
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1300 minibuffer. It returns @code{t} if the user enters @samp{yes},
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1301 @code{nil} if the user types @samp{no}. The user must type @key{RET} to
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1302 finalize the response. Upper and lower case are equivalent.
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1303
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1304 @code{yes-or-no-p} starts by displaying @var{prompt} in the echo area,
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1305 followed by @w{@samp{(yes or no) }}. The user must type one of the
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1306 expected responses; otherwise, the function responds @samp{Please answer
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1307 yes or no.}, waits about two seconds and repeats the request.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1308
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1309 @code{yes-or-no-p} requires more work from the user than
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1310 @code{y-or-n-p} and is appropriate for more crucial decisions.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1311
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1312 Here is an example:
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1313
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1314 @smallexample
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1315 @group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1316 (yes-or-no-p "Do you really want to remove everything? ")
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1317
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1318 ;; @r{After evaluation of the preceding expression,}
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1319 ;; @r{the following prompt appears,}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1320 ;; @r{with an empty minibuffer:}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1321 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1322
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1323 @group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1324 ---------- Buffer: minibuffer ----------
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1325 Do you really want to remove everything? (yes or no)
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1326 ---------- Buffer: minibuffer ----------
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1327 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1328 @end smallexample
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1329
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1330 @noindent
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1331 If the user first types @kbd{y @key{RET}}, which is invalid because this
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1332 function demands the entire word @samp{yes}, it responds by displaying
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1333 these prompts, with a brief pause between them:
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1334
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1335 @smallexample
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1336 @group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1337 ---------- Buffer: minibuffer ----------
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1338 Please answer yes or no.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1339 Do you really want to remove everything? (yes or no)
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1340 ---------- Buffer: minibuffer ----------
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1341 @end group
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1342 @end smallexample
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1343 @end defun
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1344
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1345 @node Multiple Queries
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1346 @section Asking Multiple Y-or-N Questions
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1347
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1348 When you have a series of similar questions to ask, such as ``Do you
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1349 want to save this buffer'' for each buffer in turn, you should use
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1350 @code{map-y-or-n-p} to ask the collection of questions, rather than
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1351 asking each question individually. This gives the user certain
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1352 convenient facilities such as the ability to answer the whole series at
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1353 once.
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1354
26696
ef5e7bbe6f19 Current version from /gd/gnu/elisp.
Dave Love <fx@gnu.org>
parents: 25751
diff changeset
1355 @defun map-y-or-n-p prompter actor list &optional help action-alist no-cursor-in-echo-area
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1356 This function asks the user a series of questions, reading a
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1357 single-character answer in the echo area for each one.
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1358
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1359 The value of @var{list} specifies the objects to ask questions about.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1360 It should be either a list of objects or a generator function. If it is
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1361 a function, it should expect no arguments, and should return either the
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1362 next object to ask about, or @code{nil} meaning stop asking questions.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1363
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1364 The argument @var{prompter} specifies how to ask each question. If
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1365 @var{prompter} is a string, the question text is computed like this:
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1366
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1367 @example
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1368 (format @var{prompter} @var{object})
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1369 @end example
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1370
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1371 @noindent
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1372 where @var{object} is the next object to ask about (as obtained from
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1373 @var{list}).
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1374
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1375 If not a string, @var{prompter} should be a function of one argument
12226
af994773013b changes for 19.29.
Melissa Weisshaus <melissa@gnu.org>
parents: 12098
diff changeset
1376 (the next object to ask about) and should return the question text. If
af994773013b changes for 19.29.
Melissa Weisshaus <melissa@gnu.org>
parents: 12098
diff changeset
1377 the value is a string, that is the question to ask the user. The
af994773013b changes for 19.29.
Melissa Weisshaus <melissa@gnu.org>
parents: 12098
diff changeset
1378 function can also return @code{t} meaning do act on this object (and
af994773013b changes for 19.29.
Melissa Weisshaus <melissa@gnu.org>
parents: 12098
diff changeset
1379 don't ask the user), or @code{nil} meaning ignore this object (and don't
af994773013b changes for 19.29.
Melissa Weisshaus <melissa@gnu.org>
parents: 12098
diff changeset
1380 ask the user).
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1381
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1382 The argument @var{actor} says how to act on the answers that the user
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1383 gives. It should be a function of one argument, and it is called with
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1384 each object that the user says yes for. Its argument is always an
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1385 object obtained from @var{list}.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1386
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1387 If the argument @var{help} is given, it should be a list of this form:
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1388
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1389 @example
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1390 (@var{singular} @var{plural} @var{action})
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1391 @end example
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1392
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1393 @noindent
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1394 where @var{singular} is a string containing a singular noun that
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1395 describes the objects conceptually being acted on, @var{plural} is the
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1396 corresponding plural noun, and @var{action} is a transitive verb
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1397 describing what @var{actor} does.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1398
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1399 If you don't specify @var{help}, the default is @code{("object"
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1400 "objects" "act on")}.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1401
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1402 Each time a question is asked, the user may enter @kbd{y}, @kbd{Y}, or
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1403 @key{SPC} to act on that object; @kbd{n}, @kbd{N}, or @key{DEL} to skip
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1404 that object; @kbd{!} to act on all following objects; @key{ESC} or
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1405 @kbd{q} to exit (skip all following objects); @kbd{.} (period) to act on
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1406 the current object and then exit; or @kbd{C-h} to get help. These are
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1407 the same answers that @code{query-replace} accepts. The keymap
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1408 @code{query-replace-map} defines their meaning for @code{map-y-or-n-p}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1409 as well as for @code{query-replace}; see @ref{Search and Replace}.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1410
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1411 You can use @var{action-alist} to specify additional possible answers
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1412 and what they mean. It is an alist of elements of the form
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1413 @code{(@var{char} @var{function} @var{help})}, each of which defines one
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1414 additional answer. In this element, @var{char} is a character (the
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1415 answer); @var{function} is a function of one argument (an object from
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1416 @var{list}); @var{help} is a string.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1417
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1418 When the user responds with @var{char}, @code{map-y-or-n-p} calls
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1419 @var{function}. If it returns non-@code{nil}, the object is considered
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1420 ``acted upon'', and @code{map-y-or-n-p} advances to the next object in
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1421 @var{list}. If it returns @code{nil}, the prompt is repeated for the
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1422 same object.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1423
26696
ef5e7bbe6f19 Current version from /gd/gnu/elisp.
Dave Love <fx@gnu.org>
parents: 25751
diff changeset
1424 Normally, @code{map-y-or-n-p} binds @code{cursor-in-echo-area} while
ef5e7bbe6f19 Current version from /gd/gnu/elisp.
Dave Love <fx@gnu.org>
parents: 25751
diff changeset
1425 prompting. But if @var{no-cursor-in-echo-area} is non-@code{nil}, it
ef5e7bbe6f19 Current version from /gd/gnu/elisp.
Dave Love <fx@gnu.org>
parents: 25751
diff changeset
1426 does not do that.
ef5e7bbe6f19 Current version from /gd/gnu/elisp.
Dave Love <fx@gnu.org>
parents: 25751
diff changeset
1427
7337
cd57cd335fff *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7221
diff changeset
1428 If @code{map-y-or-n-p} is called in a command that was invoked using the
cd57cd335fff *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7221
diff changeset
1429 mouse---more precisely, if @code{last-nonmenu-event} (@pxref{Command
cd57cd335fff *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7221
diff changeset
1430 Loop Info}) is either @code{nil} or a list---then it uses a dialog box
cd57cd335fff *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7221
diff changeset
1431 or pop-up menu to ask the question. In this case, it does not use
cd57cd335fff *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7221
diff changeset
1432 keyboard input or the echo area. You can force use of the mouse or use
cd57cd335fff *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7221
diff changeset
1433 of keyboard input by binding @code{last-nonmenu-event} to a suitable
cd57cd335fff *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7221
diff changeset
1434 value around the call.
cd57cd335fff *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7221
diff changeset
1435
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1436 The return value of @code{map-y-or-n-p} is the number of objects acted on.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1437 @end defun
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1438
23147
ad9732e88e90 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 23146
diff changeset
1439 @node Reading a Password
ad9732e88e90 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 23146
diff changeset
1440 @section Reading a Password
ad9732e88e90 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 23146
diff changeset
1441 @cindex passwords, reading
ad9732e88e90 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 23146
diff changeset
1442
ad9732e88e90 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 23146
diff changeset
1443 To read a password to pass to another program, you can use the
ad9732e88e90 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 23146
diff changeset
1444 function @code{read-passwd}.
ad9732e88e90 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 23146
diff changeset
1445
ad9732e88e90 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 23146
diff changeset
1446 @defun read-passwd prompt &optional confirm default
ad9732e88e90 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 23146
diff changeset
1447 This function reads a password, prompting with @var{prompt}. It does
ad9732e88e90 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 23146
diff changeset
1448 not echo the password as the user types it; instead, it echoes @samp{.}
ad9732e88e90 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 23146
diff changeset
1449 for each character in the password.
ad9732e88e90 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 23146
diff changeset
1450
ad9732e88e90 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 23146
diff changeset
1451 The optional argument @var{confirm}, if non-@code{nil}, says to read the
ad9732e88e90 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 23146
diff changeset
1452 password twice and insist it must be the same both times. If it isn't
ad9732e88e90 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 23146
diff changeset
1453 the same, the user has to type it over and over until the last two
ad9732e88e90 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 23146
diff changeset
1454 times match.
ad9732e88e90 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 23146
diff changeset
1455
ad9732e88e90 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 23146
diff changeset
1456 The optional argument @var{default} specifies the default password to
ad9732e88e90 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 23146
diff changeset
1457 return if the user enters empty input. If @var{default} is @code{nil},
ad9732e88e90 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 23146
diff changeset
1458 then @code{read-passwd} returns the null string in that case.
ad9732e88e90 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 23146
diff changeset
1459 @end defun
ad9732e88e90 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 23146
diff changeset
1460
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1461 @node Minibuffer Misc
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1462 @section Minibuffer Miscellany
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1463
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1464 This section describes some basic functions and variables related to
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1465 minibuffers.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1466
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1467 @deffn Command exit-minibuffer
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1468 This command exits the active minibuffer. It is normally bound to
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1469 keys in minibuffer local keymaps.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1470 @end deffn
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1471
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1472 @deffn Command self-insert-and-exit
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1473 This command exits the active minibuffer after inserting the last
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1474 character typed on the keyboard (found in @code{last-command-char};
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1475 @pxref{Command Loop Info}).
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1476 @end deffn
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1477
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1478 @deffn Command previous-history-element n
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1479 This command replaces the minibuffer contents with the value of the
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1480 @var{n}th previous (older) history element.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1481 @end deffn
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1482
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1483 @deffn Command next-history-element n
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1484 This command replaces the minibuffer contents with the value of the
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1485 @var{n}th more recent history element.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1486 @end deffn
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1487
26696
ef5e7bbe6f19 Current version from /gd/gnu/elisp.
Dave Love <fx@gnu.org>
parents: 25751
diff changeset
1488 @deffn Command previous-matching-history-element pattern n
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1489 This command replaces the minibuffer contents with the value of the
26696
ef5e7bbe6f19 Current version from /gd/gnu/elisp.
Dave Love <fx@gnu.org>
parents: 25751
diff changeset
1490 @var{n}th previous (older) history element that matches @var{pattern} (a
ef5e7bbe6f19 Current version from /gd/gnu/elisp.
Dave Love <fx@gnu.org>
parents: 25751
diff changeset
1491 regular expression).
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1492 @end deffn
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1493
26696
ef5e7bbe6f19 Current version from /gd/gnu/elisp.
Dave Love <fx@gnu.org>
parents: 25751
diff changeset
1494 @deffn Command next-matching-history-element pattern n
ef5e7bbe6f19 Current version from /gd/gnu/elisp.
Dave Love <fx@gnu.org>
parents: 25751
diff changeset
1495 This command replaces the minibuffer contents with the value of the
ef5e7bbe6f19 Current version from /gd/gnu/elisp.
Dave Love <fx@gnu.org>
parents: 25751
diff changeset
1496 @var{n}th next (newer) history element that matches @var{pattern} (a
ef5e7bbe6f19 Current version from /gd/gnu/elisp.
Dave Love <fx@gnu.org>
parents: 25751
diff changeset
1497 regular expression).
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1498 @end deffn
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1499
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1500 @defun minibuffer-prompt
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1501 This function returns the prompt string of the currently active
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1502 minibuffer. If no minibuffer is active, it returns @code{nil}.
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1503 @end defun
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1504
26696
ef5e7bbe6f19 Current version from /gd/gnu/elisp.
Dave Love <fx@gnu.org>
parents: 25751
diff changeset
1505 @tindex minibuffer-prompt-end
ef5e7bbe6f19 Current version from /gd/gnu/elisp.
Dave Love <fx@gnu.org>
parents: 25751
diff changeset
1506 @defun minibuffer-prompt-end
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23147
diff changeset
1507 This function, available starting in Emacs 21, returns the current
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23147
diff changeset
1508 position of the end of the minibuffer prompt, if a minibuffer is
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23147
diff changeset
1509 current. Otherwise, it returns zero.
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23147
diff changeset
1510 @end defun
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23147
diff changeset
1511
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23147
diff changeset
1512 @defun minubuffer-prompt-width
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23147
diff changeset
1513 This function returns the current display-width of the minibuffer
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23147
diff changeset
1514 prompt, if a minibuffer is current. Otherwise, it returns zero.
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1515 @end defun
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1516
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1517 @defvar minibuffer-setup-hook
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1518 This is a normal hook that is run whenever the minibuffer is entered.
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1519 @xref{Hooks}.
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1520 @end defvar
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1521
8529
464f7abd0b26 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7337
diff changeset
1522 @defvar minibuffer-exit-hook
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1523 This is a normal hook that is run whenever the minibuffer is exited.
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1524 @xref{Hooks}.
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1525 @end defvar
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1526
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1527 @defvar minibuffer-help-form
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1528 The current value of this variable is used to rebind @code{help-form}
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1529 locally inside the minibuffer (@pxref{Help Functions}).
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1530 @end defvar
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1531
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 8753
diff changeset
1532 @defun active-minibuffer-window
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 8753
diff changeset
1533 This function returns the currently active minibuffer window, or
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 8753
diff changeset
1534 @code{nil} if none is currently active.
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 8753
diff changeset
1535 @end defun
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 8753
diff changeset
1536
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1537 @defun minibuffer-window &optional frame
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 8753
diff changeset
1538 This function returns the minibuffer window used for frame @var{frame}.
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 8753
diff changeset
1539 If @var{frame} is @code{nil}, that stands for the current frame. Note
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 8753
diff changeset
1540 that the minibuffer window used by a frame need not be part of that
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 8753
diff changeset
1541 frame---a frame that has no minibuffer of its own necessarily uses some
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 8753
diff changeset
1542 other frame's minibuffer window.
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1543 @end defun
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1544
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1545 @c Emacs 19 feature
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1546 @defun window-minibuffer-p window
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1547 This function returns non-@code{nil} if @var{window} is a minibuffer window.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1548 @end defun
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1549
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1550 It is not correct to determine whether a given window is a minibuffer by
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1551 comparing it with the result of @code{(minibuffer-window)}, because
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1552 there can be more than one minibuffer window if there is more than one
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1553 frame.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1554
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1555 @defun minibuffer-window-active-p window
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1556 This function returns non-@code{nil} if @var{window}, assumed to be
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1557 a minibuffer window, is currently active.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1558 @end defun
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1559
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1560 @defvar minibuffer-scroll-window
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1561 If the value of this variable is non-@code{nil}, it should be a window
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1562 object. When the function @code{scroll-other-window} is called in the
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1563 minibuffer, it scrolls this window.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1564 @end defvar
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1565
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1566 Finally, some functions and variables deal with recursive minibuffers
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1567 (@pxref{Recursive Editing}):
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1568
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1569 @defun minibuffer-depth
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1570 This function returns the current depth of activations of the
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1571 minibuffer, a nonnegative integer. If no minibuffers are active, it
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1572 returns zero.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1573 @end defun
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1574
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1575 @defopt enable-recursive-minibuffers
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1576 If this variable is non-@code{nil}, you can invoke commands (such as
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1577 @code{find-file}) that use minibuffers even while the minibuffer window
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1578 is active. Such invocation produces a recursive editing level for a new
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1579 minibuffer. The outer-level minibuffer is invisible while you are
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1580 editing the inner one.
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1581
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1582 If this variable is @code{nil}, you cannot invoke minibuffer
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1583 commands when the minibuffer window is active, not even if you switch to
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1584 another window to do it.
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1585 @end defopt
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1586
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1587 @c Emacs 19 feature
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1588 If a command name has a property @code{enable-recursive-minibuffers}
7221
a2c7acc3be9c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6555
diff changeset
1589 that is non-@code{nil}, then the command can use the minibuffer to read
6555
771fa0ddb356 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1590 arguments even if it is invoked from the minibuffer. The minibuffer
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1591 command @code{next-matching-history-element} (normally @kbd{M-s} in the
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1592 minibuffer) uses this feature.