NonGNU ELPA - eat


Emulate A Terminal, in a region, in a buffer and in Eshell
eat-0.8.tar, 2023-Apr-13, 650 KiB
Akib Azmain Turja <>
Browse ELPA's repository
CGit or Gitweb

To install this package, run in Emacs:

M-x package-install RET eat RET

Full description

Eat's name self-explanatory, it stands for "Emulate A Terminal". Eat is a terminal emulator. It can run most (if not all) full-screen terminal programs, including Emacs.

It is pretty fast, more than three times faster than Term, despite being implemented entirely in Emacs Lisp. So fast that you can comfortably run Emacs inside Eat, or even use your Emacs as a terminal multiplexer.

It has many features that other Emacs terminal emulator still don't have, for example complete mouse support, shell integration, etc.

It flickers less than other Emacs terminal emulator, so you get more performance and a smoother experience.

To get the most out of Eat, you should also setup shell integration.

1 Usage

To start Eat, run M-x eat. Eat has three keybinding modes:

  • "semi-char" mode: This is the default keybinding mode. Most keys are bound to send the key to the terminal, except the following keys: C-\, C-c, C-x, C-g, C-h, C-M-c, C-u, C-q, M-x, M-:, M-!, M-& and some other keys (see the user option eat-semi-char-non-bound-keys for the complete list). The following special keybinding are available:
    • C-q: Send next key to the terminal.
    • C-y: Like `yank', but send the text to the terminal.
    • M-y: Like `yank-pop', but send the text to the terminal.
    • C-c C-k: Kill process.
  • "emacs" mode: No special keybinding, except the following:
    • C-c C-j: Switch to semi-char mode.
    • C-c M-d: Switch to char mode.
    • C-c C-k: Kill process.
  • "char" mode: All supported keys are bound to send the key to the terminal, except C-M-m or M-RET, which is bound to switch to semi-char mode.

If you like Eshell, then there is a good news for you. Eat integrates with Eshell. Eat has two global minor modes for Eshell:

  • eat-eshell-visual-command-mode: Run visual commands with Eat instead of Term.
  • eat-eshell-mode: Run Eat inside Eshell. After enabling this, you can run full-screen terminal programs directly in Eshell. You have the above three keybinding modes here too, except that C-c C-k is not special (i.e. not bound by Eat) in "emacs" mode and "line" mode.

You can add any of these to eshell-load-hook like the following:

;; For `eat-eshell-mode'.
(add-hook 'eshell-load-hook #'eat-eshell-mode)

;; For `eat-eshell-visual-command-mode'.
(add-hook 'eshell-load-hook #'eat-eshell-visual-command-mode)

To setup shell integration for GNU Bash, put the following at the end of your .bashrc:

#+beginsrc sh [ -n "$EATSHELLINTEGRATIONDIR" ] && \ source "$EATSHELLINTEGRATIONDIR/bash" #+endsrc sh

For Zsh, put the following in your .zshrc:

#+beginsrc sh [ -n "$EATSHELLINTEGRATIONDIR" ] && \ source "$EATSHELLINTEGRATIONDIR/zsh" #+endsrc sh

There's a Info manual available with much more information, which can be accessed with C-h i m Eat, also available here on the internet.

2 Installation

Eat requires at least Emacs 28.1 or above.


Eat is available on NonGNU ELPA. If you don't have the archive setup, put something like the following in your init file:

(add-to-list 'package-archives
	     '("nongnu" . ""))

2.2 Quelpa

(quelpa '(eat :fetcher git
	      :url ""
	      :files ("*.el" ("term" "term/*.el") "*.texi"
		      "*.ti" ("terminfo/e" "terminfo/e/*")
		      ("terminfo/65" "terminfo/65/*")
		      ("integration" "integration/*")
		      (:exclude ".dir-locals.el" "*-tests.el"))))

2.3 Straight.el

 '(eat :type git
       :host codeberg
       :repo "akib/emacs-eat"
       :files ("*.el" ("term" "term/*.el") "*.texi"
	       "*.ti" ("terminfo/e" "terminfo/e/*")
	       ("terminfo/65" "terminfo/65/*")
	       ("integration" "integration/*")
	       (:exclude ".dir-locals.el" "*-tests.el"))))

2.4 Manual

Clone the repository and put it in your load-path.

3 Comparison With Other Terminal Emulators

3.1 Term

Term is the Emacs built-in terminal emulator. Its terminal emulation is pretty good too. But it's slow. It is so slow that Eat can beat native-compiled Term even without byte-compilation, and when Eat is byte-compiled, Eat is more than three times fast. Also, Term flickers, just try to run emacs -nw in it. It doesn't support remote connections, for example over Tramp. However, it has "line" mode, which Eat still doesn't have. If you want line mode in a terminal, or use an old version of Emacs, you can use Term, but Coterm + Shell is probably a better choice in case your Emacs version is 26.1 or above.

3.2 Vterm

Vterm is powered by a C library, libvterm. For this reason, it can process huge amount of text quickly. It is about 1.5 times faster than Eat (byte-compiled or native-compiled) (and about 2.75 faster then Eat without byte-compilation). But it doesn't have a char mode (however you can make a char mode spending some effort). And it too flickers like Term, so despite being much faster that Eat, it seems to be slow. If you need your terminal to handle huge bursts (megabytes) of data, you should use Vterm.

3.3 Coterm + Shell

Coterm adds terminal emulation to Shell mode. Although the terminal Coterm emulates is same as Term, it is much faster, about three times, just a bit slow than Eat. However, it too flickers like other terminals. Since it's an upgrade to Shell, you get all the features of Shell like "line" mode, completion using your favorite completion UI (Company, Corfu, etc), etc. Most of these features are available in Eat-Eshell-Mode as Eshell is similar to Shell, however it's not Shell mode. Recommended if you like Shell.

4 Acknowledgements

This wouldn't have been possible if the following awesome softwares didn't exist:

Old versions

eat-0.7.tar.lz2023-Apr-0299.5 KiB
eat-0.6.1.tar.lz2023-Mar-2897.1 KiB
eat-0.6.tar.lz2023-Feb-0896.5 KiB
eat-0.5.tar.lz2023-Jan-2295.8 KiB
eat-0.4.tar.lz2022-Dec-2893.7 KiB
eat-0.3.1.tar.lz2022-Dec-2093.3 KiB
eat-0.3.tar.lz2022-Dec-1692.9 KiB
eat-0.2.3.tar.lz2022-Dec-1391.3 KiB
eat-0.2.2.tar.lz2022-Dec-1190.9 KiB
eat-0.2.1.tar.lz2022-Dec-1090.6 KiB
eat-0.1.1.tar.lz2022-Nov-3083.0 KiB
eat-0.1.tar.lz2022-Nov-2980.7 KiB


Eat NEWS -- History of user-visible changes

Copyright (C) 2022 Akib Azmain Turja.
See the end of the file for license conditions.

This file is about changes in Eat.

+++ indicates that Eat manual have been updated.
--- means no change in the manuals is needed.
When you add a new item, use the appropriate mark if you are sure it
applies, and please also update docstrings as needed.

Adapted from etc/NEWS in Emacs source tree.

This file is part of Eat and is not part of GNU Emacs.

Eat is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

Eat is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with GNU Emacs.  If not, see <>.