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
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
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
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
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’.