1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
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) <anything-else>` is like doing equates to `C-x
<anything-else>` in normal Emacs.
* `(term-escape-char) C-j` switches to line mode.
* line mode: Editing is done like in a normal Emacs buffer, `<enter>`
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*<n>" 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.
|