GNU Emacs Lisp Reference Manual
In most ways, a minibuffer is a normal Emacs buffer. Most operations
within a buffer, such as editing commands, work normally in a
minibuffer. However, many operations for managing buffers do not apply
to minibuffers. The name of a minibuffer always has the form *Minibuf-number, and it cannot be changed. Minibuffers are
displayed only in special windows used only for minibuffers; these
windows always appear at the bottom of a frame. (Sometime frames have
no minibuffer window, and sometimes a special kind of frame contains
nothing but a minibuffer window; see Minibuffers and Frames.)
The minibuffer's window is normally a single line. You can resize it temporarily with the window sizing commands; it reverts to its normal size when the minibuffer is exited. You can resize it permanently by using the window sizing commands in the frame's other window, when the minibuffer is not active. If the frame contains just a minibuffer, you can change the minibuffer's size by changing the frame's size.
If a command uses a minibuffer while there is an active minibuffer,
this is called a recursive minibuffer. The first minibuffer is
named *Minibuf-0*. Recursive minibuffers are named by
incrementing the number at the end of the name. (The names begin with a
space so that they won't show up in normal buffer lists.) Of several
recursive minibuffers, the innermost (or most recently entered) is the
active minibuffer. We usually call this ``the'' minibuffer. You can
permit or forbid recursive minibuffers by setting the variable
enable-recursive-minibuffers or by putting properties of that
name on command symbols (see Minibuffer Misc).
Like other buffers, a minibuffer may use any of several local keymaps (see Keymaps); these contain various exit commands and in some cases completion commands (see Completion).
minibuffer-local-map is for ordinary input (no completion).
minibuffer-local-ns-map is similar, except that SPC exits
just like RET. This is used mainly for Mocklisp compatibility.
minibuffer-local-completion-map is for permissive completion.
minibuffer-local-must-match-map is for strict completion and
for cautious completion.