From 6a42c8de66e3b2dc7293ddeadaa3ee396db2624d Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Sat, 12 Oct 2013 13:47:42 -0400 Subject: initial commit --- public/emacs-shells.md | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 public/emacs-shells.md (limited to 'public/emacs-shells.md') diff --git a/public/emacs-shells.md b/public/emacs-shells.md new file mode 100644 index 0000000..fdd5bcb --- /dev/null +++ b/public/emacs-shells.md @@ -0,0 +1,63 @@ +A summary of Emacs' bundled shell and terminal modes +==================================================== +:copyright 2013 Luke Shumaker + +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-f" + 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. -- cgit v1.2.3