To run a subshell interactively with its typescript in an SXEmacs buffer, use M-x shell. This creates (or reuses) a buffer named ‘*shell*’ and runs a subshell with input coming from and output going to that buffer. That is to say, any “terminal output” from the subshell will go into the buffer, advancing point, and any “terminal input” for the subshell comes from text in the buffer. To give input to the subshell, go to the end of the buffer and type the input, terminated by RET.
SXEmacs does not wait for the subshell to do anything. You can switch windows or buffers and edit them while the shell is waiting, or while it is running a command. Output from the subshell waits until SXEmacs has time to process it; this happens whenever SXEmacs is waiting for keyboard input or for time to elapse.
To get multiple subshells, change the name of buffer ‘*shell*’ to something different by using M-x rename-buffer. The next use of M-x shell creates a new buffer ‘*shell*’ with its own subshell. By renaming this buffer as well you can create a third one, and so on. All the subshells run independently and in parallel.
The file name used to load the subshell is the value of the variable
explicit-shell-file-name, if that is non-
nil. Otherwise, the
ESHELL is used, or the environment variable
SHELL if there is no
ESHELL. If the file name specified
is relative, the directories in the list
exec-path are searched
(see Single Shell Commands).
As soon as the subshell is started, it is sent as input the contents of
the file ~/.emacs_shellname, if that file exists, where
shellname is the name of the file that the shell was loaded from.
For example, if you use
csh, the file sent to it is
popd commands given to the inferior
shell are watched by SXEmacs so it can keep the ‘*shell*’ buffer’s
default directory the same as the shell’s working directory. These
commands are recognized syntactically by examining lines of input that are
sent. If you use aliases for these commands, you can tell SXEmacs to
recognize them also. For example, if the value of the variable
shell-pushd-regexp matches the beginning of a shell command line,
that line is regarded as a
pushd command. Change this variable when
you add aliases for ‘pushd’. Likewise,
shell-cd-regexp are used to recognize commands with the meaning of
‘popd’ and ‘cd’.
M-x shell-resync-dirs queries the shell and resynchronizes SXEmacs’ idea of what the current directory stack is. M-x shell-dirtrack-toggle turns directory tracking on and off.
SXEmacs keeps a history of the most recent commands you have typed in the
‘*shell*’ buffer. If you are at the beginning of a shell command
line and type M-p, the previous shell input is inserted into the
buffer before point. Immediately typing M-p again deletes that
input and inserts the one before it. By repeating M-p you can
move backward through your commands until you find one you want to
repeat. You may then edit the command before typing RET if you
wish. M-n moves forward through the command history, in case you
moved backward past the one you wanted while using M-p. If you
type the first few characters of a previous command and then type
M-p, the most recent shell input starting with those characters is
inserted. This can be very convenient when you are repeating a sequence
of shell commands. The variable
input-ring-size controls how
many commands are saved in your input history. The default is 30.