Interactive Shell Shell Shell History
Shell buffers use Shell mode, which defines several special keys attached to the C-c prefix. They are chosen to resemble the usual editing and job control characters present in shells that are not under Emacs, except that you must type C-c first. Here is a complete list of the special key bindings of Shell mode:
RET
|
At end of buffer send line as input; otherwise, copy current line to end
of buffer and send it ( |
TAB
|
Complete the command name or file name before point in the shell buffer
(
The variable |
M-? |
Display temporarily a list of the possible completions of the file name
before point in the shell buffer
( |
C-d |
Either delete a character or send EOF
( |
C-c C-a |
Move to the beginning of the line, but after the prompt if any
( |
C-c SPC
|
Accumulate multiple lines of input, then send them together. This
command inserts a newline before point, but does not send the preceding
text as input to the subshell---at least, not yet. Both lines, the one
before this newline and the one after, will be sent together (along with
the newline that separates them), when you type |
C-c C-u |
Kill all text pending at end of buffer to be sent as input
( |
C-c C-w |
Kill a word before point ( |
C-c C-c |
Interrupt the shell or its current subjob if any
( |
C-c C-z |
Stop the shell or its current subjob if any ( |
C-c C-\ |
Send quit signal to the shell or its current subjob if any
( |
C-c C-o |
Kill the last batch of output from a shell command
( |
C-c C-r
C-M-l |
Scroll to display the beginning of the last batch of output at the top
of the window; also move the cursor there ( |
C-c C-e |
Scroll to put the end of the buffer at the bottom of the window
( |
C-c C-f |
Move forward across one shell command, but not beyond the current line
( |
C-c C-b |
Move backward across one shell command, but not beyond the current line
( |
C-c C-l |
Display the buffer's history of shell commands in another window
( |
M-x dirs | Ask the shell what its current directory is, so that Emacs can agree with the shell. |
M-x send-invisible RET text RET
|
Send text as input to the shell, after reading it without echoing. This is useful when a shell command runs a program that asks for a password. Alternatively, you can arrange for Emacs to notice password prompts and turn off echoing for them, as follows:
|
M-x comint-continue-subjob | Continue the shell process. This is useful if you accidentally suspend the shell process.[1] |
M-x comint-strip-ctrl-m | Discard all control-M characters from the current group of shell output. The most convenient way to use this command is to make it run automatically when you get output from the subshell. To do that, evaluate this Lisp expression:
|
M-x comint-truncate-buffer |
This command truncates the shell buffer to a certain maximum number of
lines, specified by the variable
|
Shell mode also customizes the paragraph commands so that only shell prompts start new paragraphs. Thus, a paragraph consists of an input command plus the output that follows it in the 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 in particular include the choice of regular expression for detecting prompts, 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.
[1] 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.
Interactive Shell Shell Shell History