Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/dieggsy/esh-autosuggest
Fish-like autosuggestions in eshell.
https://github.com/dieggsy/esh-autosuggest
autosuggest company completion emacs-lisp eshell history
Last synced: 3 months ago
JSON representation
Fish-like autosuggestions in eshell.
- Host: GitHub
- URL: https://github.com/dieggsy/esh-autosuggest
- Owner: dieggsy
- License: gpl-3.0
- Created: 2017-11-01T15:45:53.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2023-02-15T08:02:07.000Z (over 1 year ago)
- Last Synced: 2024-01-23T19:09:53.431Z (6 months ago)
- Topics: autosuggest, company, completion, emacs-lisp, eshell, history
- Language: Emacs Lisp
- Homepage:
- Size: 196 KB
- Stars: 98
- Watchers: 5
- Forks: 10
- Open Issues: 4
-
Metadata Files:
- Readme: README.org
- License: LICENSE.md
Lists
- awesome - esh-autosuggest - Fish-like autosuggestions in eshell. (Emacs Lisp)
README
* esh-autosuggest
[[https://melpa.org/#/esh-autosuggest][file:https://melpa.org/packages/esh-autosuggest-badge.svg]]
[[https://stable.melpa.org/#/esh-autosuggest][file:https://stable.melpa.org/packages/esh-autosuggest-badge.svg]]Fish-like history autosuggestions in eshell
[[demo.gif]]
** Installation
This package is on melpa. If you have melpa in your package repositories, you
can use ~M-x RET package-install RET esh-autosuggest~ or install
with [[https://github.com/jwiegley/use-package][use-package]]:
#+begin_src emacs-lisp
(use-package esh-autosuggest
:hook (eshell-mode . esh-autosuggest-mode)
;; If you have use-package-hook-name-suffix set to nil, uncomment and use the
;; line below instead:
;; :hook (eshell-mode-hook . esh-autosuggest-mode)
:ensure t)
#+end_srcAlternatively, consider installing with [[https://github.com/raxod502/straight.el][straight.el]] or [[https://github.com/quelpa/quelpa-use-package][quelpa-use-package]].
Otherwise, download the files to somewhere on your load path, and require
esh-autosuggest:
#+begin_src emacs-lisp
(require 'esh-autosuggest)
#+end_src** Usage
This package assumes you use something other than company for eshell completion
(e.g. ~eshell-pcomplete~, ~completion-at-point~, ~helm-esh-pcomplete~).
~company-mode~ is used solely as a mechanism for history autosuggestions.Unless you're using use-package's hook keyword as described in Installation,
you can enable the autosuggestions with:
#+begin_src emacs-lisp
(add-hook 'eshell-mode-hook #'esh-autosuggest-mode)
#+end_src*** Key Bindings
- ~~ and ~C-f~ are used to select the suggestion.
- ~M-~ and ~M-f~ are used to select the next word in the suggestion.Keys can be modified using ~esh-autosuggest-active-map~.
If instead you don't want ~company-active-map~ to be overridden, you may set
~esh-autosuggest-use-company-map~ to ~t~. This may cause unexpected
behavior when pressing ~RET~ or ~TAB~, depending on what you want those to do.
To emulate fish-shell most closely, it is recommended you leave this ~nil~, as
that will explicitly run your input (regardless of suggestion) on ~RET~, and
bring up your preferred completion system on ~TAB~.*** Delay
~esh-autosuggest-delay~ defaults to 0 seconds. This is most like
fish shell's instant history autosuggestions, but can be customized.*** With other backends (not recommended)
It is technically possible to group this backend with other company backends
like e.g. ~company-capf~ like so:#+begin_src emacs-lisp
;; don't add esh-autosuggest-mode to eshell-mode-hook
(defun setup-eshell-grouped-backends ()
(setq-local company-backends
'((company-capf esh-autosuggest))))(add-hook 'eshell-mode-hook #'setup-eshell-grouped-backends)
#+end_srcThis isn't recommended since the history suggestions will be neither fish-like,
nor will they work after typing the first word on the command line, since
company-backends need to share a prefix to work together smoothly. See
[[https://github.com/company-mode/company-mode/issues/744][company-mode/company-mode#744]] for more information.*** Known bugs and workarounds
If you're using [[https://github.com/emacs-evil/evil-collection][evil-collection]], there's a [[https://github.com/dieggsy/esh-autosuggest/issues/12][known issue]] that occurs when
~evil-collection-company-use-tng~ is set to ~t~ (the default). If you don't
need that feature, you can set it to ~nil~ for the time being.** Rationale and tips
I made this package to help ease a transition from zsh to eshell as my main
shell. The reason the main mechanism is a minor-mode that overrides
company-mode is that I didn't find company-mode that useful for eshell
completion.While the default popup-buffer frontend to pcomplete can be a bit annoying,
I've found there are alternatives that make pcomplete behave more like normal
shell completion. Try one or more of the following for tab completion:- [[https://github.com/Ambrevar/emacs-fish-completion][Ambrevar/emacs-fish-completion]]
- If you use helm
#+begin_src emacs-lisp
(defun setup-eshell-helm-completion ()
(define-key eshell-mode-map [remap eshell-pcomplete] 'helm-esh-pcomplete))(add-hook 'eshell-mode-hook #'setup-eshell-helm-completion)
#+end_src
- If you use ivy
#+begin_src emacs-lisp
(setq ivy-do-completion-in-region t) ; this is the default(defun setup-eshell-ivy-completion ()
(define-key eshell-mode-map [remap eshell-pcomplete] 'completion-at-point)
;; only if you want to use the minibuffer for completions instead of the
;; in-buffer interface
(setq-local ivy-display-functions-alist
(remq (assoc 'ivy-completion-in-region ivy-display-functions-alist)
ivy-display-functions-alist)))(add-hook 'eshell-mode-hook #'setup-eshell-ivy-completion)
#+end_src