37.4 Shell Prompts

A prompt is text output by a program to show that it is ready to
accept new user input. Normally, Comint mode (and thus Shell mode)
automatically figures out part of the buffer is a prompt, based on the
output of the subprocess. (Specifically, it assumes that any received
output line which doesn't end with a newline is a prompt.)

Comint mode divides the buffer into two types of fields: input
fields (where user input is typed) and output fields (everywhere
else). Prompts are part of the output fields. Most Emacs motion
commands do not cross field boundaries, unless they move over multiple
lines. For instance, when point is in the input field on a shell
command line, C-a puts point at the beginning of the input
field, after the prompt. Internally, the fields are implemented using
the field text property (see Text Properties).

If you change the variable comint-use-prompt-regexp to a
non-nil value, then Comint mode recognize prompts using a
regular expression (see Regexps). In Shell mode, the regular
expression is specified by the variable shell-prompt-pattern.
The default value of comint-use-prompt-regexp is nil,
because this method for recognizing prompts is unreliable, but you may
want to set it to a non-nil value in unusual circumstances. In
that case, Emacs does not divide the Comint buffer into fields, so the
general motion commands behave as they normally do in buffers without
special text properties. However, you can use the paragraph motion
commands to conveniently navigate the buffer (see Paragraphs); in
Shell mode, Emacs uses shell-prompt-pattern as paragraph
boundaries.