summaryrefslogblamecommitdiffstats
path: root/2023/talks/eat.md
blob: bd5481531755fb5462c3a739eec5137f4818ab0f (plain) (tree)
1
2
3
4
5
6
7
8
9








                                                                                                    

                                                                    




















































                                                                        




                                              
                                                                    










                                                                       
                                                       
                                                                       
                                                            










                                                                         
                                                                        




                                                                        
                                                                      





                                                                         

                                                                      
























                                                                                                                                                                                                                                     





                                                           
[[!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"]]

<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
<!-- You can manually edit this file to update the abstract, add links, etc. --->


# Eat and Eat powered Eshell, fast featureful terminal inside Emacs
Akib Azmain Turja (he/him) - IRC: akib, <https://akib.codeberg.page>
Fediverse: akib@hostux.social, <mailto:akib@disroot.org>

[[!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
- <http://yeti.freeshell.org/tmp/20231203-155213__emacs_eshell_eat__showing_xkcd_378_via_sixels.png>
  - 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"]]