:term eshell

The elisp shell that works everywhere

1. Description

This module extends the built-in Emacs Shell (eshell).

The Emacs Shell or eshell is a shell-like command interpreter implemented in Emacs Lisp. It is an alternative to traditional shells such as bash, zsh, fish, etc. that is built into Emacs and entirely cross-platform.

It’s stable, works anywhere Emacs runs (on any OS), and has no external dependencies. The downside is it lacks features some features you’d expect from mature shells (and a tiny community around it), tends to be slower in some cases, and does not support command line tools with TUIs (e.g. curses, ncdu, nmtui, top, etc).

Eshell would be perfect if you didn’t have to reinvent all the wheels in the dealership.

1.1. Maintainers

This module has no dedicated maintainers. Become a maintainer?

1.2. Module flags

This module has no flags.

1.4. Hacks

  • Even with fish-completion-fallback-on-bash-p non-nil, fish must be installed for bash completion to work. Workaround in config.el.
  • M-x eshell-did-you-mean does not work on first invocation, so we manually invoke it once.

2. Prerequisites

  • Optionally uses fish for completions, falling back to bash otherwise. If neither shell is found, completions may not be available.

3. TODO Usage

This module’s usage documentation is incomplete. Complete it?

  • Command completion with Company
  • fish-style prompt with Git integration
  • z-like directory jumping
  • Command-not-found recommendations

4. TODO Configuration

This module’s configuration documentation is incomplete. Complete it?

4.1. TERM name

By default, eshell sets the $TERM variable to "xterm-256color", which helps with rendering various colours. As eshell is not a terminal emulator, these will not always work 100%. Modifying eshell-term-name to your liking may help.

5. Troubleshooting

There are no known problems with this module. Report one?

6. TODO Appendix

This module has no appendix yet. Write one?