#+TITLE:   term/eshell
#+DATE:    May 18, 2020
#+SINCE:   v2.0
#+STARTUP: inlineimages nofold

* Table of Contents :TOC_3:noexport:
- [[#description][Description]]
  - [[#maintainers][Maintainers]]
  - [[#module-flags][Module Flags]]
  - [[#plugins][Plugins]]
  - [[#hacks][Hacks]]
- [[#prerequisites][Prerequisites]]
- [[#features][Features]]
- [[#configuration][Configuration]]
  - [[#term-name][TERM name]]
- [[#troubleshooting][Troubleshooting]]

* Description
This module provides additional features for the built-in [[https://www.gnu.org/software/emacs/manual/html_mono/eshell.html][Emacs Shell]]

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.

** Maintainers
This module has no dedicated maintainers.

** Module Flags
This module provides no flags, but does gain auto-completion if =:completion
company= is enabled.

** Plugins
+ [[https://github.com/peterwvj/eshell-up][eshell-up]]
+ [[https://github.com/xuchunyang/eshell-z][eshell-z]]
+ [[https://github.com/tom-tan/esh-help][esh-help]]
+ [[https://gitlab.com/bennya/shrink-path.el][shrink-path]]
+ [[https://github.com/xuchunyang/eshell-did-you-mean][eshell-did-you-mean]]
+ =:completion company=
  + [[https://gitlab.com/ambrevar/emacs-fish-completion][fish-completion]]
  + [[https://github.com/szermatt/emacs-bash-completion][bash-completion]]

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

* Prerequisites
[[https://fishshell.com/][=fish= shell]] for completions, falling back to [[https://www.gnu.org/software/bash/][=bash= shell]] if =fish= is not
found. If neither shell is found, completions may not be available.

* Features
+ Command completion with Company
+ =fish=-style prompt with Git integration
+ [[https://github.com/rupa/z][=z=]]-like directory jumping
+ Command-not-found recommendations

* Configuration
** 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.

* TODO Troubleshooting
# Common issues and their solution, or places to look for help.
