Next: , Previous: , Up: Shell   [Contents][Index]


26.7.2 Interactive Inferior Shell

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 environment variable 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 ~/.emacs_csh.

cd, pushd, and 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-popd-regexp and 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.


Next: , Previous: , Up: Shell   [Contents][Index]