Every Emacs command has a name that you can use to run it. For convenience, many commands also have key bindings. You can run those commands by typing the keys, or run them by name. Most Emacs commands have no key bindings, so the only way to run them is by name. (See Key Bindings, for how to set up key bindings.)
By convention, a command name consists of one or more words,
separated by hyphens; for example,
manual-entry. Command names mostly use complete English words
to make them easier to remember.
To run a command by name, start with M-x, type the command name, then terminate it with RET. M-x uses the minibuffer to read the command name. The string ‘M-x’ appears at the beginning of the minibuffer as a prompt to remind you to enter a command name to be run. RET exits the minibuffer and runs the command. See Minibuffer, for more information on the minibuffer.
You can use completion to enter the command name. For example,
to invoke the command
forward-char, you can type
M-x forward-char RET
M-x forw TAB c RET
forward-char is the same command that you invoke with
the key C-f. The existence of a key binding does not stop you
from running the command by name.
To cancel the M-x and not run a command, type C-g instead of entering the command name. This takes you back to command level.
To pass a numeric argument to the command you are invoking with M-x, specify the numeric argument before M-x. The argument value appears in the prompt while the command name is being read, and finally M-x passes the argument to that command.
When the command you run with M-x has a key binding, Emacs
mentions this in the echo area after running the command. For
example, if you type M-x forward-word, the message says that you
can run the same command by typing M-f. You can turn off these
messages by setting the variable
In this manual, when we speak of running a command by name, we often omit the RET that terminates the name. Thus we might say M-x auto-fill-mode rather than M-x auto-fill-mode RET. We mention the RET only for emphasis, such as when the command is followed by arguments.
M-x works by running the command
execute-extended-command, which is responsible for reading the
name of another command and invoking it.