I use emacs – with a server and client setup – so that I can quickly open new files in it using emacsclient . My typical setup is to have xterm + tmux on one monitor and a single emacs(client) frame on another. But there are times when I do not want to shift focus from one monitor to another, like when I just need to review some log file. So I started using an alias to emacs -nw -Q to quickly open log files, review, filter, and C-x C-c .

Of course, that’s not where this post ends. An alias was no longer adequate to do what I wanted it to do more ..

I typically do my text editing in the emacs frame, while do just non-editing actions like viewing, navigating, searching, filtering in quick emacs sessions from tmux .

I wanted that “tmux emacs” to be independent of my config, independent of the server – Just something really quick that I can launch, do, and quit. I wanted something like less , but better .. better in these ways:

Do syntax highlighting

Render Org-mode files

A better navigable man page viewer

Dired, especially wdired (batch edit symbolic links, for example?)

(batch edit symbolic links, for example?) Show colored diffs

Filter log files to only show or not show lines matching a regexp

Start auto-reverting log files when I want (like tail -f )

) Quickly change frame and font sizes

.. and more; basically everything that emacs has to offer!

I call it eless and here’s a little taste of what it looks like:

Click the below image to see a GIF animation in larger size.

As a bonus:

This script passes ShellCheck, and

Unofficial Bash strict mode is enabled.

Try it out and let me know how you find it. As you will see, eless is a bash script where most of it is a string containing a sane emacs configuration for view-mode . I wanted eless to be a monolithic script, and not a multi-file setup.

eless -h | eless

Update (2017/04/25)

Thanks to the PR by Iqbal Ansari, eless now supports reading piped-in data even when emacs is run in terminal mode. The solution was to:

Always start the emacs process in a sub-shell, and

Redirect /dev/tty into that emacs instance.

That way, that emacs instance would always think that it is receiving input from tty – even when the wrapper bash script is receiving input from the pipe.