@c This is part of the Emacs manual. @c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2024 Free Software @c Foundation, Inc. @c See file emacs.texi for copying conditions. @node Minibuffer @chapter The Minibuffer @cindex minibuffer The @dfn{minibuffer} is where Emacs commands read complicated arguments, such as file names, buffer names, Emacs command names, or Lisp expressions. We call it the ``minibuffer'' because it's a special-purpose buffer with a small amount of screen space. You can use the usual Emacs editing commands in the minibuffer to edit the argument text. @menu * Basic Minibuffer:: Basic usage of the minibuffer. * Minibuffer File:: Entering file names with the minibuffer. * Minibuffer Edit:: How to edit in the minibuffer. * Completion:: An abbreviation facility for minibuffer input. * Minibuffer History:: Reusing recent minibuffer arguments. * Repetition:: Re-executing commands that used the minibuffer. * Passwords:: Entering passwords in the echo area. * Yes or No Prompts:: Replying yes or no in the echo area. @end menu @node Basic Minibuffer @section Using the Minibuffer @cindex prompt When the minibuffer is in use, it appears in the echo area, with a cursor. The minibuffer starts with a @dfn{prompt}, usually ending with a colon. The prompt states what kind of input is expected, and how it will be used. The prompt is highlighted using the @code{minibuffer-prompt} face (@pxref{Faces}). The simplest way to enter a minibuffer argument is to type the text, then @key{RET} to submit the argument and exit the minibuffer. Alternatively, you can type @kbd{C-g} to exit the minibuffer by canceling the command asking for the argument (@pxref{Quitting}). @cindex default argument @vindex minibuffer-default-prompt-format Sometimes, the prompt shows a @dfn{default argument}, inside parentheses before the colon. This default will be used as the argument if you just type @key{RET}. For example, commands that read buffer names usually show a buffer name as the default; you can type @key{RET} to operate on that default buffer. You can customize how the default argument is shown with the user option @code{minibuffer-default-prompt-format}. @cindex Minibuffer Electric Default mode @cindex mode, Minibuffer Electric Default @findex minibuffer-electric-default-mode @vindex minibuffer-eldef-shorten-default If you enable Minibuffer Electric Default mode, a global minor mode, Emacs hides the default argument as soon as you modify the contents of the minibuffer (since typing @key{RET} would no longer submit that default). If you ever bring back the original minibuffer text, the prompt again shows the default. To enable this minor mode, type @kbd{M-x minibuffer-electric-default-mode}. Since the minibuffer appears in the echo area, it can conflict with other uses of the echo area. If an error message or an informative message is emitted while the minibuffer is active, the message is displayed in brackets after the minibuffer text for a few seconds, or until you type something; then the message disappears. While the minibuffer is in use, Emacs does not echo keystrokes. @vindex minibuffer-follows-selected-frame While using the minibuffer, you can switch to a different frame, perhaps to note text you need to enter (@pxref{Frame Commands}). By default, the active minibuffer moves to this new frame. If you set the user option @code{minibuffer-follows-selected-frame} to @code{nil}, then the minibuffer stays in the frame where you opened it, and you must switch back to that frame in order to complete (or abort) the current command. If you set that option to a value which is neither @code{nil} nor @code{t}, the minibuffer moves frame only after a recursive minibuffer has been opened in the current command (@pxref{Recursive Mini,,, elisp}). This option is mainly to retain (approximately) the behavior prior to Emacs 28.1. Note that the effect of the command, when you finally finish using the minibuffer, always takes place in the frame where you first opened it. The sole exception is that when that frame no longer exists, the action takes place in the currently selected frame. @node Minibuffer File @section Minibuffers for File Names @cindex default directory Commands such as @kbd{C-x C-f} (@code{find-file}) use the minibuffer to read a file name argument (@pxref{Basic Files}). When the minibuffer is used to read a file name, it typically starts out with some initial text ending in a slash. This is the @dfn{default directory}. For example, it may start out like this: @example Find file: /u2/emacs/src/ @end example @noindent Here, @samp{Find file:@: } is the prompt and @samp{/u2/emacs/src/} is the default directory. If you now type @kbd{buffer.c} as input, that specifies the file @file{/u2/emacs/src/buffer.c}. @xref{File Names}, for information about the default directory. Alternative defaults for the file name you may want are available by typing @kbd{M-n}, see @ref{Minibuffer History}. You can specify a file in the parent directory with @file{..}: @file{/a/b/../foo.el} is equivalent to @file{/a/foo.el}. Alternatively, you can use @kbd{M-@key{DEL}} to kill directory names backwards (@pxref{Words}). To specify a file in a completely different directory, you can kill the entire default with @kbd{C-a C-k} (@pxref{Minibuffer Edit}). Alternatively, you can ignore the default, and enter an absolute file name starting with a slash or a tilde after the default directory. For example, you can specify @file{/etc/termcap} as follows: @example Find file: /u2/emacs/src//etc/termcap @end example @noindent @cindex // in file name @cindex double slash in file name @cindex slashes repeated in file name @findex file-name-shadow-mode A double slash causes Emacs to ignore everything before the second slash in the pair. In the example above, @file{/u2/emacs/src/} is ignored, so the argument you supplied is @file{/etc/termcap}. The ignored part of the file name is dimmed if the terminal allows it. (To disable this dimming, turn off File Name Shadow mode with the command @w{@kbd{M-x file-name-shadow-mode}}.) When completing remote file names (@pxref{Remote Files}), a double slash behaves slightly differently: it causes Emacs to ignore only the file-name part, leaving the rest (method, host and username, etc.) intact. Typing three slashes in a row ignores everything in remote file names. @xref{File name completion,,, tramp, The Tramp Manual}. @cindex home directory shorthand Emacs interprets @file{~/} as your home directory. Thus, @file{~/foo/bar.txt} specifies a file named @file{bar.txt}, inside a directory named @file{foo}, which is in turn located in your home directory. In addition, @file{~@var{user-id}/} means the home directory of a user whose login name is @var{user-id}. Any leading directory name in front of the @file{~} is ignored: thus, @file{/u2/emacs/~/foo/bar.txt} is equivalent to @file{~/foo/bar.txt}. On MS-Windows and MS-DOS systems, where a user doesn't always have a home directory, Emacs uses several alternatives. For MS-Windows, see @ref{Windows HOME}; for MS-DOS, see @ifnottex @ref{MS-DOS File Names}. @end ifnottex @iftex @ref{MS-DOS File Names, HOME on MS-DOS,, emacs, the digital version of the Emacs Manual}. @end iftex On these systems, the @file{~@var{user-id}/} construct is supported only for the current user, i.e., only if @var{user-id} is the current user's login name. @vindex insert-default-directory To prevent Emacs from inserting the default directory when reading file names, change the variable @code{insert-default-directory} to @code{nil}. In that case, the minibuffer starts out empty. Nonetheless, relative file name arguments are still interpreted based on the same default directory. You can also enter remote file names in the minibuffer. @xref{Remote Files}. @node Minibuffer Edit @section Editing in the Minibuffer The minibuffer is an Emacs buffer, albeit a peculiar one, and the usual Emacs commands are available for editing the argument text. (The prompt, however, is @dfn{read-only}, and cannot be changed.) Since @key{RET} in the minibuffer submits the argument, you can't use it to insert a newline. You can do that with @kbd{C-q C-j}, which inserts a @kbd{C-j} control character, which is formally equivalent to a newline character (@pxref{Inserting Text}). Alternatively, you can use the @kbd{C-o} (@code{open-line}) command (@pxref{Blank Lines}). Inside a minibuffer, the keys @key{TAB}, @key{SPC}, and @kbd{?} are often bound to @dfn{completion commands}, which allow you to easily fill in the desired text without typing all of it. @xref{Completion}. As with @key{RET}, you can use @kbd{C-q} to insert a @key{TAB}, @key{SPC}, or @samp{?} character. If you want to make @key{SPC} and @key{?} insert normally instead of starting completion, you can put the following in your init file: @lisp (keymap-unset minibuffer-local-completion-map "SPC") (keymap-unset minibuffer-local-completion-map "?") @end lisp For convenience, @kbd{C-a} (@code{move-beginning-of-line}) in a minibuffer moves point to the beginning of the argument text, not the beginning of the prompt. For example, this allows you to erase the entire argument with @kbd{C-a C-k}. @cindex height of minibuffer @cindex size of minibuffer @cindex growing minibuffer @cindex resizing minibuffer When the minibuffer is active, the echo area is treated much like an ordinary Emacs window. For instance, you can switch to another window (with @kbd{C-x o}), edit text there, then return to the minibuffer window to finish the argument. You can even kill text in another window, return to the minibuffer window, and yank the text into the argument. There are some restrictions on the minibuffer window, however: for instance, you cannot split it. @xref{Windows}. @vindex resize-mini-windows Normally, the minibuffer window occupies a single screen line. However, if you add two or more lines' worth of text into the minibuffer, it expands automatically to accommodate the text. The variable @code{resize-mini-windows} controls the resizing of the minibuffer. The default value is @code{grow-only}, which means the behavior we have just described. If the value is @code{t}, the minibuffer window will also shrink automatically if you remove some lines of text from the minibuffer, down to a minimum of one screen line. If the value is @code{nil}, the minibuffer window never changes size automatically, but you can use the usual window-resizing commands on it (@pxref{Windows}). @vindex max-mini-window-height The variable @code{max-mini-window-height} controls the maximum height for resizing the minibuffer window. A floating-point number specifies a fraction of the frame's height; an integer specifies the maximum number of lines; @code{nil} means do not resize the minibuffer window automatically. The default value is 0.25. The @kbd{C-M-v} command in the minibuffer scrolls the help text from commands that display help text of any sort in another window. You can also scroll the help text with @kbd{M-@key{PageUp}} and @kbd{M-@key{PageDown}} (or, equivalently, @kbd{M-@key{prior}} and @kbd{M-@key{next}}). This is especially useful with long lists of possible completions. @xref{Other Window}. @vindex enable-recursive-minibuffers @findex minibuffer-depth-indicate-mode Emacs normally disallows most commands that use the minibuffer while the minibuffer is active. To allow such commands in the minibuffer, set the variable @code{enable-recursive-minibuffers} to @code{t}. You might need also to enable @code{minibuffer-depth-indicate-mode} to show the current recursion depth in the minibuffer prompt on recursive use of the minibuffer. When active, the minibuffer is usually in @code{minibuffer-mode}. This is an internal Emacs mode without any special features. @findex minibuffer-inactive-mode When not active, the minibuffer is in @code{minibuffer-inactive-mode}, and clicking @kbd{mouse-1} there shows the @file{*Messages*} buffer. If you use a dedicated frame for minibuffers, Emacs also recognizes certain keys there, for example, @kbd{n} to make a new frame. @node Completion @section Completion @c This node is referenced in the tutorial. When renaming or deleting @c it, the tutorial needs to be adjusted. @cindex completion You can often use a feature called @dfn{completion} to help enter arguments. This means that after you type part of the argument, Emacs can fill in the rest, or some of it, based on what was typed so far. @cindex completion alternative When completion is available, certain keys (usually @key{TAB}, @key{RET}, and @key{SPC}) are rebound in the minibuffer to special completion commands (@pxref{Completion Commands}). These commands attempt to complete the text in the minibuffer, based on a set of @dfn{completion alternatives} provided by the command that requested the argument. You can usually type @kbd{?} to see a list of completion alternatives. Although completion is usually done in the minibuffer, the feature is sometimes available in ordinary buffers too. @xref{Symbol Completion}. @menu * Completion Example:: Examples of using completion. * Completion Commands:: A list of completion commands. * Completion Exit:: Completion and minibuffer text submission. * Completion Styles:: How completion matches are chosen. * Completion Options:: Options for completion. @end menu @node Completion Example @subsection Completion Example @kindex TAB @r{(completion example)} A simple example may help here. @kbd{M-x} uses the minibuffer to read the name of a command, so completion works by matching the minibuffer text against the names of existing Emacs commands. Suppose you wish to run the command @code{auto-fill-mode}. You can do that by typing @kbd{M-x auto-fill-mode @key{RET}}, but it is easier to use completion. If you type @kbd{M-x a u @key{TAB}}, the @key{TAB} looks for completion alternatives (in this case, command names) that start with @samp{au}. There are several, including @code{auto-fill-mode} and @code{autoconf-mode}, but they all begin with @code{auto}, so the @samp{au} in the minibuffer completes to @samp{auto}. (More commands may be defined in your Emacs session. For example, if a command called @code{authorize-me} was defined, Emacs could only complete as far as @samp{aut}.) If you type @kbd{@key{TAB}} again immediately, it cannot determine the next character; it could be @samp{-}, @samp{a}, or @samp{c}. So it does not add any characters; instead, @key{TAB} displays a list of all possible completions in another window. Next, type @kbd{-f}. The minibuffer now contains @samp{auto-f}, and the only command name that starts with this is @code{auto-fill-mode}. If you now type @kbd{@key{TAB}}, completion fills in the rest of the argument @samp{auto-fill-mode} into the minibuffer. Hence, typing just @kbd{a u @key{TAB} - f @key{TAB}} allows you to enter @samp{auto-fill-mode}. @key{TAB} also works while point is not at the end of the minibuffer. In that case, it will fill in text both at point and at the end of the minibuffer. If you type @kbd{M-x autocm}, then press @kbd{C-b} to move point before the @samp{m}, you can type @kbd{@key{TAB}} to insert the text @samp{onf-} at point and @samp{ode} at the end of the minibuffer, so that the minibuffer contains @samp{autoconf-mode}. @node Completion Commands @subsection Completion Commands Here is a list of the completion commands defined in the minibuffer when completion is allowed. @table @kbd @item @key{TAB} Complete the text in the minibuffer as much as possible; if unable to complete, display a list of possible completions (@code{minibuffer-complete}). @item @key{SPC} Complete up to one word from the minibuffer text before point (@code{minibuffer-complete-word}). This command is not available for arguments that often include spaces, such as file names. @item @key{RET} Submit the text in the minibuffer as the argument, possibly completing first (@code{minibuffer-complete-and-exit}). @xref{Completion Exit}. @item ? Display a list of completions and a few useful key bindings (@code{minibuffer-completion-help}). @end table @kindex TAB @r{(completion)} @findex minibuffer-complete @key{TAB} (@code{minibuffer-complete}) is the most fundamental completion command. It searches for all possible completions that match the existing minibuffer text, and attempts to complete as much as it can. @xref{Completion Styles}, for how completion alternatives are chosen. @kindex SPC @r{(completion)} @findex minibuffer-complete-word @key{SPC} (@code{minibuffer-complete-word}) completes like @key{TAB}, but only up to the next hyphen or space. If you have @samp{auto-f} in the minibuffer and type @key{SPC}, it finds that the completion is @samp{auto-fill-mode}, but it only inserts @samp{ill-}, giving @samp{auto-fill-}. Another @key{SPC} at this point completes all the way to @samp{auto-fill-mode}. @kindex ? @r{(completion)} @cindex completion list If @key{TAB} or @key{SPC} is unable to complete, it displays in another window a list of matching completion alternatives (if there are any) and a few useful commands to select a completion candidate. You can display the same completion list and help with @kbd{?} (@code{minibuffer-completion-help}). The following commands can be used with the completion list: @table @kbd @vindex minibuffer-completion-auto-choose @kindex M-DOWN @kindex M-UP @kindex M-RET @findex minibuffer-next-completion @findex minibuffer-previous-completion @findex minibuffer-choose-completion @item M-@key{DOWN} @itemx M-@key{UP} While in the minibuffer or in the completion list buffer, @kbd{M-@key{DOWN}} (@code{minibuffer-next-completion} and @kbd{M-@key{UP}} (@code{minibuffer-previous-completion}) navigate through the completions and displayed in the completions buffer. When @code{minibuffer-completion-auto-choose} is non-@code{nil} (which is the default), using these commands also inserts the current completion candidate into the minibuffer. If @code{minibuffer-completion-auto-choose} is @code{nil}, you can use the @kbd{M-@key{RET}} command (@code{minibuffer-choose-completion}) to insert the completion candidates into the minibuffer. By default, that exits the minibuffer, but with a prefix argument, @kbd{C-u M-@key{RET}} inserts the currently active candidate without exiting the minibuffer. @findex switch-to-completions @item M-v @itemx @key{PageUp} @itemx @key{prior} Typing @kbd{M-v}, while in the minibuffer, selects the window showing the completion list (@code{switch-to-completions}). This paves the way for using the commands below. @key{PageUp}, @key{prior} and @kbd{M-g M-c} do the same. You can also select the window in other ways (@pxref{Windows}). @findex choose-completion @item @key{RET} @itemx mouse-1 @itemx mouse-2 While in the completion list buffer, this chooses the completion at point (@code{choose-completion}). With a prefix argument, @kbd{C-u @key{RET}} inserts the completion at point into the minibuffer, but doesn't exit the minibuffer---thus, you can change your mind and choose another candidate. @findex next-completion @item @key{TAB} @item @key{RIGHT} @item @key{n} While in the completion list buffer, these keys move point to the following completion alternative (@code{next-completion}). @findex previous-completion @item @key{S-TAB} @item @key{LEFT} @item @key{p} While in the completion list buffer, these keys move point to the previous completion alternative (@code{previous-completion}). @findex quit-window @item @kbd{q} While in the completion list buffer, this quits the window showing it and selects the window showing the minibuffer (@code{quit-window}). @findex kill-current-buffer @item @kbd{z} While in the completion list buffer, kill it and delete the window showing it (@code{kill-current-buffer}). @end table @vindex minibuffer-visible-completions If the variable @code{minibuffer-visible-completions} is customized to a non-@code{nil} value, it changes the commands bound to the arrow keys: instead of moving in the minibuffer, they move between completion candidates, like meta-arrow keys do by default. Similarly, @kbd{@key{RET}} selects the current candidate, like @kbd{M-@key{RET}} does normally. @code{C-g} hides the completion window, but leaves the minibuffer active, so you can continue typing at the prompt. @node Completion Exit @subsection Completion Exit @kindex RET @r{(completion in minibuffer)} @findex minibuffer-complete-and-exit When a command reads an argument using the minibuffer with completion, it also controls what happens when you type @key{RET} (@code{minibuffer-complete-and-exit}) to submit the argument. There are four types of behavior: @itemize @bullet @item @dfn{Strict completion} accepts only exact completion matches. Typing @key{RET} exits the minibuffer only if the minibuffer text is an exact match, or completes to one. Otherwise, Emacs refuses to exit the minibuffer; instead it tries to complete, and if no completion can be done it momentarily displays @samp{[No match]} after the minibuffer text. (You can still leave the minibuffer by typing @kbd{C-g} to cancel the command.) An example of a command that uses this behavior is @kbd{M-x}, since it is meaningless for it to accept a non-existent command name. @item @dfn{Cautious completion} is like strict completion, except @key{RET} exits only if the text is already an exact match. If the text completes to an exact match, @key{RET} performs that completion but does not exit yet; you must type a second @key{RET} to exit. Cautious completion is used for reading file names for files that must already exist, for example. @item @dfn{Permissive completion} allows any input; the completion candidates are just suggestions. Typing @key{RET} does not complete, it just submits the argument as you have entered it. @cindex minibuffer confirmation @cindex confirming in the minibuffer @item @dfn{Permissive completion with confirmation} is like permissive completion, with an exception: if you typed @key{TAB} and this completed the text up to some intermediate state (i.e., one that is not yet an exact completion match), typing @key{RET} right afterward does not submit the argument. Instead, Emacs asks for confirmation by momentarily displaying @samp{[Confirm]} after the text; type @key{RET} again to confirm and submit the text. This catches a common mistake, in which one types @key{RET} before realizing that @key{TAB} did not complete as far as desired. @vindex confirm-nonexistent-file-or-buffer You can tweak the confirmation behavior by customizing the variable @code{confirm-nonexistent-file-or-buffer}. The default value, @code{after-completion}, gives the behavior we have just described. If you change it to @code{nil}, Emacs does not ask for confirmation, falling back on permissive completion. If you change it to any other non-@code{nil} value, Emacs asks for confirmation whether or not the preceding command was @key{TAB}. This behavior is used by most commands that read file names, like @kbd{C-x C-f}, and commands that read buffer names, like @kbd{C-x b}. @end itemize @node Completion Styles @subsection How Completion Alternatives Are Chosen @cindex completion style Completion commands work by narrowing a large list of possible completion alternatives to a smaller subset that matches what you have typed in the minibuffer. In @ref{Completion Example}, we gave a simple example of such matching. The procedure of determining what constitutes a match is quite intricate. Emacs attempts to offer plausible completions under most circumstances. Emacs performs completion using one or more @dfn{completion styles}---sets of criteria for matching minibuffer text to completion alternatives. During completion, Emacs tries each completion style in turn. If a style yields one or more matches, that is used as the list of completion alternatives. If a style produces no matches, Emacs falls back on the next style. @vindex completion-styles The list variable @code{completion-styles} specifies the completion styles to use. Each list element is either the name of a completion style (a Lisp symbol) or a list starting with the name of a completion style followed by @code{let}-style list of bindings which will be in effect for that completion style. Multiple elements of @code{completion-styles} can name the same completion style with different variable bindings. The available style symbols are stored in the variable @code{completion-styles-alist} (@pxref{Completion Variables,,, elisp, The Emacs Lisp Reference Manual}). The default completion styles are (in order): @table @code @item basic @cindex @code{basic}, completion style A matching completion alternative must have the same beginning as the text in the minibuffer before point. Furthermore, if there is any text in the minibuffer after point, the rest of the completion alternative must contain that text as a substring. @cindex partial completion @cindex @code{partial-completion}, completion style @item partial-completion This aggressive completion style divides the minibuffer text into words separated by hyphens or spaces, and completes each word separately. (For example, when completing command names, @samp{em-l-m} completes to @samp{emacs-lisp-mode}.) Furthermore, a @samp{*} in the minibuffer text is treated as a @dfn{wildcard}---it matches any string of characters at the corresponding position in the completion alternative. @vindex completion-pcm-leading-wildcard If @code{completion-pcm-leading-wildcard} is set to @code{t}, this style always acts as if a @dfn{wildcard} is present at the start of the minibuffer text, similar to the @code{substring} style. For example, @samp{l-m} will complete to @samp{emacs-lisp-mode}. @item emacs22 @cindex @code{emacs22}, completion style This completion style is similar to @code{basic}, except that it ignores the text in the minibuffer after point. It is so-named because it corresponds to the completion behavior in Emacs 22. @end table @noindent The following additional completion styles are also defined, and you can add them to @code{completion-styles} if you wish (@pxref{Customization}): @table @code @item substring @cindex @code{substring}, completion style A matching completion alternative must contain the text in the minibuffer before point, and the text in the minibuffer after point, as substrings (in that same order). Thus, if the text in the minibuffer is @samp{foobar}, with point between @samp{foo} and @samp{bar}, that matches @samp{@var{a}foo@var{b}bar@var{c}}, where @var{a}, @var{b}, and @var{c} can be any string including the empty string. @item flex @cindex @code{flex}, completion style This aggressive completion style, also known as @code{flx} or @code{fuzzy} or @code{scatter} completion, attempts to complete using in-order substrings. For example, it can consider @samp{foo} to match @samp{frodo} or @samp{fbarbazoo}. @item initials @cindex @code{initials}, completion style This very aggressive completion style attempts to complete acronyms and initialisms. For example, when completing command names, it matches @samp{lch} to @samp{list-command-history}. @end table @noindent There is also a very simple completion style called @code{emacs21}. In this style, if the text in the minibuffer is @samp{foobar}, only matches starting with @samp{foobar} are considered. @vindex completion-category-overrides You can use different completion styles in different situations, by setting the variable @code{completion-category-overrides}. For example, the default setting says to use only @code{basic} and @code{substring} completion for buffer names. @node Completion Options @subsection Completion Options @cindex case-sensitivity and completion @cindex case in completion Case is significant when completing case-sensitive arguments, such as command names. For example, when completing command names, @samp{AU} does not complete to @samp{auto-fill-mode}. Case differences are ignored when completing arguments in which case does not matter. @vindex read-file-name-completion-ignore-case @vindex read-buffer-completion-ignore-case When completing file names, case differences are ignored if the variable @code{read-file-name-completion-ignore-case} is non-@code{nil}. The default value is @code{nil} on systems that have case-sensitive file-names, such as GNU/Linux; it is non-@code{nil} on systems that have case-insensitive file-names, such as Microsoft Windows. When completing buffer names, case differences are ignored if the variable @code{read-buffer-completion-ignore-case} is non-@code{nil}; the default is @code{nil}. @vindex completion-ignored-extensions @cindex ignored file names, in completion When completing file names, Emacs usually omits certain alternatives that are considered unlikely to be chosen, as determined by the list variable @code{completion-ignored-extensions}. Each element in the list should be a string; any file name ending in such a string is ignored as a completion alternative. Any element ending in a slash (@file{/}) represents a subdirectory name. The standard value of @code{completion-ignored-extensions} has several elements including @code{".o"}, @code{".elc"}, and @code{"~"}. For example, if a directory contains @samp{foo.c} and @samp{foo.elc}, @samp{foo} completes to @samp{foo.c}. However, if @emph{all} possible completions end in otherwise-ignored strings, they are not ignored: in the previous example, @samp{foo.e} completes to @samp{foo.elc}. Emacs disregards @code{completion-ignored-extensions} when showing completion alternatives in the completion list. Shell completion is an extended version of filename completion, @pxref{Shell Options}. @vindex completion-auto-help If @code{completion-auto-help} is set to @code{nil}, the completion commands never display the completion list buffer; you must type @kbd{?} to display the list. If the value is @code{lazy}, Emacs only shows the completion list buffer on the second attempt to complete. In other words, if there is nothing to complete, the first @key{TAB} echoes @samp{Next char not unique}; the second @key{TAB} shows the completion list buffer. If the value is @code{always}, the completion list buffer is always shown when completion is attempted. The display of the completion list buffer after it is shown for the first time is also controlled by @code{completion-auto-help}. If the value is @code{t} or @code{lazy}, the window showing the completions pops down when Emacs is able to complete (and may pop up again if Emacs is again unable to complete after you type some more text); if the value is @code{always}, the window pops down only when you exit the completion. The value @code{visible} is a hybrid: it behaves like @code{t} when it decides whether to pop up the window showing the completion list buffer, and like @code{always} when it decides whether to pop it down. @vindex completion-auto-select Emacs can optionally select the window showing the completions when it shows that window. To enable this behavior, customize the user option @code{completion-auto-select} to @code{t}, which changes the behavior of @key{TAB} when Emacs pops up the completions: pressing @kbd{@key{TAB}} will switch to the completion list buffer, and you can then move to a candidate by cursor motion commands and select it with @kbd{@key{RET}}. If the value of @code{completion-auto-select} is @code{second-tab}, then the first @kbd{@key{TAB}} will pop up the completions list buffer, and the second one will switch to it. @findex previous-line-completion @findex next-line-completion @vindex completion-auto-wrap When the window showing the completions is selected, either because you customized @code{completion-auto-select} or because you switched to it by typing @kbd{C-x o}, the @kbd{@key{UP}} and @kbd{@key{DOWN}} arrow keys (@code{previous-line-completion} and @code{next-line-completion}, respectively) move by lines between completion candidates; with a prefix numeric argument, they move that many lines. If @code{completion-auto-wrap} is non-@code{nil}, these commands will wrap at bottom and top of the candidate list. @vindex completion-cycle-threshold If @code{completion-cycle-threshold} is non-@code{nil}, completion commands can cycle through completion alternatives. Normally, if there is more than one completion alternative for the text in the minibuffer, a completion command completes up to the longest common substring. If you change @code{completion-cycle-threshold} to @code{t}, the completion command instead completes to the first of those completion alternatives; each subsequent invocation of the completion command replaces that with the next completion alternative, in a cyclic manner. If you give @code{completion-cycle-threshold} a numeric value @var{n}, completion commands switch to this cycling behavior only when there are @var{n} or fewer alternatives. @vindex completions-format When displaying completions, Emacs will normally pop up a new buffer to display the completions. The completions will by default be sorted horizontally, using as many columns as will fit in the window-width, but this can be changed by customizing the @code{completions-format} user option. If its value is @code{vertical}, Emacs will sort the completions vertically instead, and if it's @code{one-column}, Emacs will use just one column. @vindex completions-sort The @code{completions-sort} user option controls the order in which the completions are sorted in the @samp{*Completions*} buffer. The default is @code{alphabetical}, which sorts in alphabetical order. The value @code{nil} disables sorting; the value @code{historical} sorts alphabetically first, and then rearranges according to the order of the candidates in the minibuffer history. The value can also be a function, which will be called with the list of completions, and should return the list in the desired order. @vindex completions-max-height When @code{completions-max-height} is non-@code{nil}, it limits the size of the completions window. It is specified in lines and include mode, header line and a bottom divider, if any. For a more complex control of the Completion window display properties, you can use @code{display-buffer-alist} (@pxref{Buffer Display Action Alists,,Action Alists for Buffer Display, elisp, The Emacs Lisp Reference Manual}). @vindex completions-header-format The variable @code{completions-header-format} is a format spec string to control the informative line shown before the completions list of candidates. If it contains a @samp{%s} construct, that get replaced by the number of completions shown in the completion list buffer. To suppress the display of the heading line, customize this variable to @code{nil}. The string that is the value of this variable can have text properties to change the visual appearance of the heading line; some useful properties @code{face} or @code{cursor-intangible} (@pxref{Special Properties,,Properties with Special Meanings, elisp, The Emacs Lisp Reference Manual}). @vindex completions-highlight-face When @code{completions-highlight-face} names a face, the current completion candidate, the one that will be selected by typing @kbd{@key{RET}} or clicking the mouse, will be highlighted using that face. The default value of this variable is @code{completions-highlight}; the value is @code{nil} disables this highlighting. This feature uses the special text property @code{cursor-face}. @node Minibuffer History @section Minibuffer History @cindex minibuffer history @cindex history of minibuffer input @cindex completion, walking through candidates Everything you type in the minibuffer is saved in a @dfn{minibuffer history list} so you can easily use it again later. This includes completion candidates (such as file names, buffer names, command names, etc.@:) and any other kind of minibuffer input. You can use the following commands to quickly fetch an earlier or alternative response into the minibuffer: @table @kbd @item M-p Move to the previous item in the minibuffer history, an earlier argument (@code{previous-history-element}). @item M-n Move to the next item in the minibuffer history (@code{next-history-element}). @item @key{UP} @itemx @key{DOWN} Like @kbd{M-p} and @kbd{M-n}, but move to the previous or next line of a multi-line item before going to the previous history item (@code{previous-line-or-history-element} and @code{next-line-or-history-element}) . @item M-r @var{regexp} @key{RET} Move to an earlier item in the minibuffer history that matches @var{regexp} (@code{previous-matching-history-element}). @item M-s @var{regexp} @key{RET} Move to a later item in the minibuffer history that matches @var{regexp} (@code{next-matching-history-element}). @end table @kindex M-p @r{(minibuffer history)} @kindex M-n @r{(minibuffer history)} @findex next-history-element @findex previous-history-element While in the minibuffer, @kbd{M-p} (@code{previous-history-element}) moves through the minibuffer history list, one item at a time. Each @kbd{M-p} fetches an earlier item from the history list into the minibuffer, replacing its existing contents. Typing @kbd{M-n} (@code{next-history-element}) moves through the minibuffer history list in the opposite direction, fetching later entries into the minibuffer. If you type @kbd{M-n} in the minibuffer when there are no later entries in the minibuffer history (e.g., if you haven't previously typed @kbd{M-p}), Emacs tries fetching from a list of default arguments: values that you are likely to enter. You can think of this as moving through the ``future history''. @cindex future history for file names @cindex minibuffer defaults for file names @vindex file-name-at-point-functions The ``future history'' for file names includes several possible alternatives you may find useful, such as the file name or the URL at point in the current buffer. The defaults put into the ``future history'' in this case are controlled by the functions mentioned in the value of the option @code{file-name-at-point-functions}. By default, its value invokes the @code{ffap} package (@pxref{FFAP}), which tries to guess the default file or URL from the text around point. To disable this guessing, customize the option to a @code{nil} value, then the ``future history'' of file names will include only the file, if any, visited by the current buffer, and the default directory. @findex previous-line-or-history-element @findex next-line-or-history-element @kindex UP @r{(minibuffer history)} @kindex DOWN @r{(minibuffer history)} The arrow keys @kbd{@key{UP}} and @kbd{@key{DOWN}} work like @kbd{M-p} and @kbd{M-n}, but if the current history item is longer than a single line, they allow you to move to the previous or next line of the current history item before going to the previous or next history item. If you edit the text inserted by the @kbd{M-p} or @kbd{M-n} minibuffer history commands, this does not change its entry in the history list. However, the edited argument does go at the end of the history list when you submit it. @findex previous-matching-history-element @findex next-matching-history-element @kindex M-r @r{(minibuffer history)} @kindex M-s @r{(minibuffer history)} You can use @kbd{M-r} (@code{previous-matching-history-element}) to search through older elements in the history list, and @kbd{M-s} (@code{next-matching-history-element}) to search through newer entries. Each of these commands asks for a @dfn{regular expression} as an argument, and fetches the first matching entry into the minibuffer. @xref{Regexps}, for an explanation of regular expressions. A numeric prefix argument @var{n} means to fetch the @var{n}th matching entry. These commands are unusual, in that they use the minibuffer to read the regular expression argument, even though they are invoked from the minibuffer. An upper-case letter in the regular expression makes the search case-sensitive (@pxref{Lax Search}). You can also search through the history using an incremental search. @xref{Isearch Minibuffer}. Emacs keeps separate history lists for several different kinds of arguments. For example, there is a list for file names, used by all the commands that read file names. Other history lists include buffer names, command names (used by @kbd{M-x}), and command arguments (used by commands like @code{query-replace}). @vindex history-length The variable @code{history-length} specifies the maximum length of a minibuffer history list; adding a new element deletes the oldest element if the list gets too long. If the value is @code{t}, there is no maximum length. @vindex history-delete-duplicates The variable @code{history-delete-duplicates} specifies whether to delete duplicates in history. If it is non-@code{nil}, adding a new element deletes from the list all other elements that are equal to it. The default is @code{nil}. @node Repetition @section Repeating Minibuffer Commands @cindex command history @cindex history of commands Every command that uses the minibuffer once is recorded on a special history list, the @dfn{command history}, together with the values of its arguments, so that you can repeat the entire command. In particular, every use of @kbd{M-x} is recorded there, since @kbd{M-x} uses the minibuffer to read the command name. @findex list-command-history @table @kbd @item C-x @key{ESC} @key{ESC} Re-execute a recent minibuffer command from the command history (@code{repeat-complex-command}). @item M-x list-command-history Display the entire command history, showing all the commands @kbd{C-x @key{ESC} @key{ESC}} can repeat, most recent first. @end table @kindex C-x ESC ESC @findex repeat-complex-command @kbd{C-x @key{ESC} @key{ESC}} re-executes a recent command that used the minibuffer. With no argument, it repeats the last such command. A numeric argument specifies which command to repeat; 1 means the last one, 2 the previous, and so on. @kbd{C-x @key{ESC} @key{ESC}} works by turning the previous command into a Lisp expression and then entering a minibuffer initialized with the text for that expression. Even if you don't know Lisp, it will probably be obvious which command is displayed for repetition. If you type just @key{RET}, that repeats the command unchanged. You can also change the command by editing the Lisp expression before you execute it. The executed command is added to the front of the command history unless it is identical to the most recent item. Once inside the minibuffer for @kbd{C-x @key{ESC} @key{ESC}}, you can use the usual minibuffer history commands (@pxref{Minibuffer History}) to move through the history list. After finding the desired previous command, you can edit its expression as usual and then execute it by typing @key{RET}. @vindex isearch-resume-in-command-history Incremental search does not, strictly speaking, use the minibuffer. Therefore, although it behaves like a complex command, it normally does not appear in the history list for @w{@kbd{C-x @key{ESC} @key{ESC}}}. You can make incremental search commands appear in the history by setting @code{isearch-resume-in-command-history} to a non-@code{nil} value. @xref{Incremental Search}. @vindex command-history The list of previous minibuffer-using commands is stored as a Lisp list in the variable @code{command-history}. Each element is a Lisp expression that describes one command and its arguments. Lisp programs can re-execute a command by calling @code{eval} with the @code{command-history} element. @node Passwords @section Entering passwords @cindex entering passwords Sometimes, you may need to enter a password into Emacs. For instance, when you tell Emacs to visit a file on another machine via a network protocol such as FTP, you often need to supply a password to gain access to the machine (@pxref{Remote Files}). Entering a password is similar to using a minibuffer. Emacs displays a prompt in the echo area (such as @samp{Password: }); after you type the required password, press @key{RET} to submit it. To prevent others from seeing your password, every character you type is displayed as an asterisk (@samp{*}) instead of its usual form. Most of the features and commands associated with the minibuffer @emph{cannot} be used when entering a password. There is no history or completion, and you cannot change windows or perform any other action with Emacs until you have submitted the password. While you are typing the password, you may press @key{DEL} to delete backwards, removing the last character entered. @kbd{C-u} deletes everything you have typed so far. @kbd{C-g} quits the password prompt (@pxref{Quitting}). @kbd{C-y} inserts the current kill into the password (@pxref{Killing}). @key{TAB} toggles the visibility of the password. You may type either @key{RET} or @key{ESC} to submit the password. Any other self-inserting character key inserts the associated character into the password, and all other input is ignored. There is also an icon in the mode line indicating the password visibility. Clicking @kbd{mouse-1} on it toggles the password visibility as well. @node Yes or No Prompts @section Yes or No Prompts An Emacs command may require you to answer a yes-or-no question during the course of its execution. Such queries come in two main varieties. @cindex y or n prompt For the first type of yes-or-no query, the prompt ends with @w{@samp{(y or n)}}. You answer the query by typing a single key, either @samp{y} or @samp{n}, which immediately exits the minibuffer and delivers the response. For example, if you type @kbd{C-x C-w} (@kbd{write-file}) to save a buffer, and enter the name of an existing file, Emacs issues a prompt like this: @smallexample File `foo.el' exists; overwrite? (y or n) @end smallexample @cindex yes or no prompt @vindex yes-or-no-prompt The second type of yes-or-no query is typically employed if giving the wrong answer would have serious consequences; it thus features a longer prompt ending with @samp{(yes or no)} (or the value of @code{yes-or-no-prompt} if you've customized that). For example, if you invoke @kbd{C-x k} (@code{kill-buffer}) on a file-visiting buffer with unsaved changes, Emacs activates the minibuffer with a prompt like this: @smallexample Buffer foo.el modified; kill anyway? (yes or no) @end smallexample @noindent To answer, you must type @samp{yes} or @samp{no} into the minibuffer, followed by @key{RET}. With both types of yes-or-no query the minibuffer behaves as described in the previous sections; you can recenter the selected window with @kbd{C-l}, scroll that window (@kbd{C-v} or @kbd{PageDown} scrolls forward, @kbd{M-v} or @kbd{PageUp} scrolls backward), switch to another window with @kbd{C-x o}, use the history commands @kbd{M-p} and @kbd{M-n}, etc. Type @kbd{C-g} to dismiss the query, and quit the minibuffer and the querying command (@pxref{Quitting}).