A simple example may help here. 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 auto-fill-mode
. You can do that by
typing M-x auto-fill-mode RET, but it is easier to use
completion.
If you type M-x a u TAB, the TAB looks for
completion alternatives (in this case, command names) that start with
‘au’. There are several, including auto-fill-mode
and
autoconf-mode
, but they all begin with auto
, so the
‘au’ in the minibuffer completes to ‘auto’. (More commands
may be defined in your Emacs session. For example, if a command
called authorize-me
was defined, Emacs could only complete
as far as ‘aut’.)
If you type TAB again immediately, it cannot determine the next character; it could be ‘-’, ‘a’, or ‘c’. So it does not add any characters; instead, TAB displays a list of all possible completions in another window.
Next, type -f. The minibuffer now contains ‘auto-f’, and
the only command name that starts with this is auto-fill-mode
.
If you now type TAB, completion fills in the rest of the
argument ‘auto-fill-mode’ into the minibuffer.
Hence, typing just a u TAB - f TAB allows you to enter ‘auto-fill-mode’.
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 M-x autocm, then press C-b to move point before the ‘m’, you can type TAB to insert the text ‘onf-’ at point and ‘ode’ at the end of the minibuffer, so that the minibuffer contains ‘autoconf-mode’.