[[!meta title="Eat and Eat powered Eshell, fast featureful terminal inside Emacs"]] [[!meta copyright="Copyright © 2023 Akib Azmain Turja"]] [[!inline pages="internal(2023/info/eat-nav)" raw="yes"]] # Eat and Eat powered Eshell, fast featureful terminal inside Emacs Akib Azmain Turja (he/him) - IRC: akib, Fediverse: akib@hostux.social, [[!inline pages="internal(2023/info/eat-before)" raw="yes"]] Eat is a terminal emulator for Emacs, written in pure Emacs Lisp. It can run most (if not all) terminal programs. Despite being implemented in Emacs Lisp, it is fast enough for day-to-day uses. In this talk, I'll give an overview of Eat, its features and configuration. I'll show the most useful features and the features that make Eat unique (e.g. shell integration, mouse tracking, Sixel support). (This may include features that hasn't been implemented yet but will be implemented and stable enough by the time of the recording of the talk.) Most of the features require no configuration to use, but are configurable with user options. I'll also show the most useful customization options available that users may want to customize or tinker with. Thanks to the architecture of Eat, Eat can emulate terminal within any region of a buffer. Therefore, Eat can be integrated with Eshell. I'll show how to integrate Eat with Eshell, and the useful Eshell-specific features and configuration. Then, I'll compare Eat with other terminal emulators available for Emacs, and I'll show which feature that Eat has but the other doesn't, and which feature Eat lacks. I'll show why Eat is good or bad for some users/use cases. For example, why Shell mode users may prefer Coterm (a terminal emulator for Comint) over Eat, why Eat is better Term mode in the most cases, or why Vterm should be prefered for huge bursts of outputs, etc. Then I'll give pointers to the documentation available like the Info manual or README and what they contain. And I'll also discuss what to do when you hit a problem. I'll discuss about the common problems or misconfiguration, and also discuss where and how to report bugs properly. I won't go into much details in this part, since the manual covers this topic completely, and the users are expected to not encounter problems. Then I'll discuss the future plans of the project. And finally, I'll conclude the talk with a summary of the whole talk. Outline: - Introduction: What's Eat and why? - Installing Eat from NonGNU ELPA - Demonstrating Eat's features and configuring them - Eshell integration - Comparison with other terminal emulators - Shortcomings and common (fixable) problems - Future plans - Conclusion # Discussion ## Questions and answers - Q: Have you thought about upstreaming EAT? - A: Yes, but I haven't yet completed the copyright paperwork. - S: Look into it, I think it would be great to have a better implementation of a terminal OOTB! - Q: Very impressive!  What lessons did you learn while developing EAT? - A:I learned how to optimize Elisp code, and also how terminals work actually.  And also process handling in Elisp. - Q: How long did it take you to develop EAT to this point? - A:It took around 5 months to make it working at bare minimum. - Q: Did you have any experience with terminal emulation before working on EAT? - A:Not much really.  I mean I knew how terminals worked but I didn't know the escape sequences. - Q:Impressive work; I look forward to trying it.  What did you want that Vterm did not provide?  I think I'll try it today. - A:The keybindings, specially.  And also I wanted Eshell terminal emulation. - Q: Is Elisp native-compilation what allows EAT to peform as well as or better than Vterm, or is EAT even that fast with just byte-compilation? - A:I use native-compilation.  But Eat is still quite a few times faster than Term mode when byte-compiled. - Q: Should it work on Emacs 28.1? - A:Yes. - Q: What does EAT do differently than other terminal emulators that allows it to perform so well? - A:I don't really know quite clearly.  At the time I implemented the main code, I had plenty of time.  I did profiling and tried various implementations to do the same thing. - Q: what sparked your interest in Emacs, considering its often perceived as outdated, and how do its powerful capabilities remain relevant today? - A: First of all, it's free software, I have the freedom.  And the IDEs I used to use were resource hogs, so needed something lightweight.  And, after I started using Emacs, I discovered how powerful it actually is.  Emacs is itself a programming platform, so you can make literally anything with it. - Q: have you thought about making EAT work with shell-mode? - A: Yes, I have considered integrating with shell-mode/Comint but it doesn't work, they need the terminal text to be mutable and Eat doesn't support that.  So I have implemented "line mode," an input mode similar to shell-mode. - Q: did the talk show how to show sixel? ## Notes - I found out about EAT a while ago and was excited to find out that it works so well! Thank you for your great work! - akib, truly impressive! - :clap::clap::clap::clap::clap::clap: - ¡Muy bueno! - I use eat, and I have almost replace terminal (bash/zsh) with eshell paired with eat - i use eat but i don't really have anything to say cuz i don't use the CLI nearly as much anymore since learning more emacs stuff. but i still think eat is awesome cuz it is really fast for when i do need it - I'll be looking into eat more, thanks for the talk! - demonstrating sixels would have been a surprise for some... - eat is very easy to try out compared to vterm since there's no foreign code involved - I was stunned at how fast eat is! - even without native-comp, it's pretty fast - eat is the apple equivalent of terminal emulators in emacs: It just works! ;) - best of both world is, eshell paired with eat - - I usd img2sixel wnd some awk glue - imagemagick can also convert to sixel - you're the one who helped me with eat and the dumb term line for .zshrc so ty! - speaker: yes, i have considering integrating with shell-mode/comint but it doesn't work, they need the terminal text to be mutable and eat doesn't support that so i have implemented "line mode," input mode similar to shell mode [[!inline pages="internal(2023/info/eat-after)" raw="yes"]] [[!inline pages="internal(2023/info/eat-nav)" raw="yes"]]