A summary of Emacs' bundled shell and terminal modes ==================================================== --- date: "2013-04-09" --- This is based on a post on [reddit][1], published on 2013-04-09. [1]: http://www.reddit.com/r/emacs/comments/1bzl8b/how_can_i_get_a_dumbersimpler_shell_in_emacs/c9blzyb Emacs comes bundled with a few different shell and terminal modes. It can be hard to keep them straight. What's the difference between `M-x term` and `M-x ansi-term`? Here's a good breakdown of the different bundled shells and terminals for Emacs, from dumbest to most Emacs-y. term-mode --------- Your VT100-esque terminal emulator; it does what most terminal programs do. Ncurses-things work OK, but dumping large amounts of text can be slow. By default it asks you which shell to run, defaulting to the environmental variable `$SHELL` (`/bin/bash` for me). There are two modes of operation: * char mode: Keys are sent immediately to the shell (including keys that are normally Emacs keystrokes), with the following exceptions: * `(term-escape-char) (term-escape-char)` sends `(term-escape-char)` to the shell (see above for what the default value is). * `(term-escape-char) ` is like doing equates to `C-x ` in normal Emacs. * `(term-escape-char) C-j` switches to line mode. * line mode: Editing is done like in a normal Emacs buffer, `` sends the current line to the shell. This is useful for working with a program's output. * `C-c C-k` switches to char mode. This mode is activated with ; Creates or switches to an existing "*terminal*" buffer. ; The default 'term-escape-char' is "C-c" M-x term or ; Creates a new "*ansi-term*" or "*ansi-term*" buffer. ; The default 'term-escape-char' is "C-c" and "C-x" M-x ansi-term shell-mode ---------- The name is a misnomer; shell-mode is a terminal emulator, not a shell; it's called that because it is used for running a shell (bash, zsh, …). The idea of this mode is to use an external shell, but make it Emacs-y. History is not handled by the shell, but by Emacs; `M-p` and `M-n` access the history, while arrows/`C-p`/`C-n` move the point (which is is consistent with other Emacs REPL-type interfaces). It ignores VT100-type terminal colors, and colorizes things itself (it inspects words to see if they are directories, in the case of `ls`). This has the benefit that it does syntax highlighting on the currently being typed command. Ncurses programs will of course not work. This mode is activated with: M-x shell eshell-mode ----------- This is a shell+terminal, entirely written in Emacs lisp. (Interestingly, it doesn't set `$SHELL`, so that will be whatever it was when you launched Emacs). This won't even be running zsh or bash, it will be running "esh", part of Emacs.