To run a subshell in a terminal emulator, use M-x term. This creates (or reuses) a buffer named ‘*terminal*’, and runs a subshell with input coming from your keyboard, and output going to that buffer.
The terminal emulator uses Term mode, which has two input modes. In line mode, Term basically acts like Shell mode; see Shell Mode.
In char mode, each character is sent directly to the inferior subshell, as “terminal input.” Any “echoing” of your input is the responsibility of the subshell. The sole exception is the terminal escape character, which by default is C-c (see Term Mode). Any “terminal output” from the subshell goes into the buffer, advancing point.
Some programs (such as Emacs itself) need to control the appearance
on the terminal screen in detail. They do this by sending special
control codes. The exact control codes needed vary from terminal to
terminal, but nowadays most terminals and terminal emulators
xterm) understand the ANSI-standard (VT100-style)
escape sequences. Term mode recognizes these escape sequences, and
handles each one appropriately, changing the buffer so that the
appearance of the window matches what it would be on a real terminal.
You can actually run Emacs inside an Emacs Term window.
You can use Term mode to communicate with a device connected to a serial port of your computer. See Serial Terminal.
The file name used to load the subshell is determined the same way as for Shell mode. To make multiple terminal emulators, rename the buffer ‘*terminal*’ to something different using M-x rename-uniquely, just as with Shell mode.
Unlike Shell mode, Term mode does not track the current directory by
examining your input. But some shells can tell Term what the current
directory is. This is done automatically by
bash version 1.15