The major mode for Shell buffers is Shell mode. Many of its special commands are bound to the C-c prefix, and resemble the usual editing and job control characters present in ordinary shells, except that you must type C-c first. Here is a list of Shell mode commands:
comint-send-input). Any shell prompt at the beginning of the line is omitted (see Shell Prompts). If point is at the end of buffer, this is like submitting the command line in an ordinary interactive shell. However, you can also invoke <RET> elsewhere in the shell buffer to submit the current line as input.
completion-at-point). This uses the usual Emacs completion rules (see Completion), with the completion alternatives being file names, environment variable names, the shell command history, and history references (see History References).
shell-completion-fignore specifies a list of file
name extensions to ignore in Shell mode completion. The default
nil, but some users prefer
("~" "#" "%") to
ignore file names ending in ‘~’, ‘#’ or ‘%’. Other
related Comint modes use the variable
comint-delchar-or-maybe-eof). Typed at the end of the shell buffer, this sends EOF to the subshell. Typed at any other position in the buffer, this deletes a character as usual.
comint-bol-or-process-mark). If you repeat this command twice in a row, the second time it moves back to the process mark, which is the beginning of the input that you have not yet sent to the subshell. (Normally that is the same place—the end of the prompt on this line—but after C-c <SPC> the process mark may be in a previous line.)
comint-kill-input). If point is not at end of buffer, this only kills the part of this text that precedes point.
comint-interrupt-subjob). This command also kills any shell input pending in the shell buffer and not yet sent.
comint-stop-subjob). This command also kills any shell input pending in the shell buffer and not yet sent.
comint-quit-subjob). This command also kills any shell input pending in the shell buffer and not yet sent.
comint-delete-output). This is useful if a shell command spews out lots of output that just gets in the way.
comint-write-output). With a prefix argument, the file is appended to instead. Any prompt at the end of the output is not written.
shell-forward-command). The variable
shell-command-regexpspecifies how to recognize the end of a command.
Please note that Emacs will not echo passwords by default. If you really want them to be echoed, evaluate the following Lisp expression:
(remove-hook 'comint-output-filter-functions 'comint-watch-for-password-prompt)
(add-hook 'comint-output-filter-functions 'comint-strip-ctrl-m)
comint-buffer-maximum-size. Here's how to do this automatically each time you get output from the subshell:
(add-hook 'comint-output-filter-functions 'comint-truncate-buffer)
Shell mode is a derivative of Comint mode, a general-purpose mode for communicating with interactive subprocesses. Most of the features of Shell mode actually come from Comint mode, as you can see from the command names listed above. The special features of Shell mode include the directory tracking feature, and a few user commands.
Other Emacs features that use variants of Comint mode include GUD (see Debuggers) and M-x run-lisp (see External Lisp).
You can use M-x comint-run to execute any program of your choice in a subprocess using unmodified Comint mode—without the specializations of Shell mode.
 You should not suspend the shell process. Suspending a subjob of the shell is a completely different matter—that is normal practice, but you must use the shell to continue the subjob; this command won't do it.