Piping Shell Output to an emacs
Buffer
2. September 2020
Every few months, I see someone on #emacs
mention new eshell
functionality, or re-read amebevar’s excellent post on using it as their main
shell
and am inspired to give it another try. I dream of replacing
long pipelines of sed
and awk
invocations with simple elisp
, of
experiencing the best parts of Plan9’s UX, seamlessly redirecting output to
buffers, and being freed from the tyranny of readline
‘s limited vi
bindings
by the wonderful evil
!
Sadly, as a dyed-in-the-wool bash
user who’s committed more scripting
knowledge to memory than is healthy, I always come back to shell-mode
. Without
fail, the feature I miss most from my dalliances with eshell
is piping command
output into a buffer. With this alias, you can have the best of both worlds.
1
alias eless='(f=$(mktemp "/tmp/pipe.XXX"); cat > $f; emacsclient $f; rm -v $f)'
Invoke it by simply piping to it: cat some-big-file.txt | eless
. When you kill
the buffer with C-x #
your emacsclient
session will end, returning you to your
shell buffer, and the temp file created will be deleted.