9 comments

[ 3.2 ms ] story [ 28.7 ms ] thread
Personally, while living in Emacs (EXWM), I still can't live on eshell, the issue is "the terminal", too many commands are simply uncomfortable to use in eshell while run smoothly in a real terminal.

I've also tried some new shells, the one I last more is xonsh, but generally I came back to zsh even if I use in general much less the shell than before thanks to Emacs, the 2D shell.

Emacs completion also it's very nice for text, but slower than tab-cycle in zsh as well and for quick commands that's matter.

Have you tried Eat[0]? It's a reasonably fast terminal emulator that integrates with Eshell so that all commands run in Eshell have full terminal emulation (but they're still run in the original Eshell buffer, which makes it better than `eshell-visual-commands'). I haven't had any terminal emulation problems since switching to it.

[0]: https://codeberg.org/akib/emacs-eat

With regards to completion, I use corfu, which gives me nice inline popups. I use the bash-completion package, so I don't have issues with programs that don't provide Eshell completions (which are basically all of them).

i second the eat package recommendation.

there are some quirks with it though, given it has a couple of input modes.

i think everyone should read its fantastic documentation 1st to avoid frustration, instead of just falling back to the local minima of trying to use their pimped up shell inside eat as is.

e.g. i had a 2 line starship prompt enabled in my macOS zsh and inside eat it made the screen scroll back and forth by half a page randomly as i was just typing regular characters at the prompt.

M-<left>/<right> moves the Emacs point in semi-char mode, but the underlying shell is not aware of it, so the next character input will happen at an incorrect position. M-f/b works though.

There is an auto-line-mode, which might be a good compromise, but i haven't tried it yet.

I tried using shell mode in emacs, but my fingers use control-p and control-r on the terminal shell and I fail.

instead of searching backwards in commands, it does it in the buffer.

How do people deal with this?

I'm surprised no one has yet mentioned Eshell has a module built in for exactly what you want, you just need to `(push 'eshell-rebind eshell-modules-list)`. Now C-p, C-r, etc. work as you are used to.
I never could get used to different key bindings. vterm in Emacs, with a few workarounds, works beautifully for me.
> with EShell, you don’t need to bother with a pager, since if you received too much information, hit C-c C-p which jumps you to the top of the last command, and then C-v your way down. Or better yet, just search for what you want.

Cmd+Up - jumps you to the top of the last command

Cmd+F - just search for what you want

I don't need no stinkin' Emacs

The biggest strength of Eshell, for me, is that I can maintain some sanity in Windows environments (with or without WSL). In linuxland, it's a tougher sell. Compared to term-mode and the others, Eshell hacks better and I can fine tune my tab completions. The best thing is that my keybinds integrate better across all emacs modes when I use eshell.