Is there any technical (or philosophical) reason which makes it especially hard to implement pipes in Eshell, or has simply no one been interested enough to implement it?
Also worth reading if you’re interested in eshell: Mastering Eshell by Mickey Peterson
I’ve tried a few times to make the switch (for redirecting to buffers, using emacs commands easily like opening dired, even little things like opening man foo in the much nicer emacs pager) but so far I haven’t been able to make it stick. My big pain point is the I/O performance: because everything has to go through emacs buffers it’s slow for anything that produces more than a couple of screenfuls of output, and I never seem to know when that’s going to happen. I can’t run one normal terminal emulator and emacs/eshell side-by-side and try remembering to use the proper emulator when a command might trigger lots of output.
Has anyone here managed to successfully get around this sort of issue? How did you manage it?
People seem to be able to get around this, or it doesn’t bother them, I don’t know.
I ran into the same issues as you when I attempted to use terminals in Emacs. Decades of Unix usage conditioned me to terminals that just work when there’s lots of output (as they should).
My fix: EXWM.
I keep a urxvt terminal around for performance reasons, but I rarely use it. Mostly it’s handy when running something that’s going to spew out tons of logs, but usually you can have that stuff sent to a file without redirects.
eshell is the thing I use the most in emacs. I open projects with projectile then M-x projectile-run-eshell and go off from there. If I need more eshell windows I will usually C-u 1 M-x eshell or so on when I need more windows. I find that I rarely need more than one eshell pane for most tasks.
C-u 1 M-x eshell