A Full Screen Eshell

Almost all of my tube time is spent in 4 programs: Emacs; Safari; Reeder; and Mail, roughly in that order. Naturally, I try to stay in Emacs as much as I can. In particular, I've long bound 【Ctrl+c s】 to start a bash shell in an Emacs buffer.

Recently, I came across this post and video by Eric Himmelreich on ways he makes Emacs fit his workflow. He demonstrates two things. First, he has a function that splits his Emacs frame into two side-by-side windows of 80 characters each and makes the frame take up all available screen height. I do much the same thing except that the window configuration is performed by a system-specific initialization file.

The second thing is more interesting. He likes to have a full screen terminal running that he can bring up when he needs it. He decided to integrate that into Emacs by writing a keyboard macro to start a full screen eshell and another to restore the previous window configuration. That seemed pretty useful to me and after playing around with eshell a bit, I decided I liked it better than running bash so I decided to implement something similar to what Himmelreich did.

Rather than use keyboard macros, as he did, I stole the idea behind Magnar Sveen's excellent magit-status hack. The idea is simple: typing 【Hyper+e】 saves the current window configuration, starts eshell, and deletes the other windows. A subsequent 【Hyper+e】 restores the window configuration. The code is simple

(global-set-key (kbd "H-e")
                (lambda ()
                  "Bring up a full-screen eshell or restore previous config."
                  (interactive)
                  (if (string= "eshell-mode" major-mode)
                      (jump-to-register :eshell-fullscreen)
                    (progn
                      (window-configuration-to-register :eshell-fullscreen)
                      (eshell)
                      (delete-other-windows)))))
This entry was posted in Programming and tagged , . Bookmark the permalink.
  • https://github.com/Fuco1/ Fuco

    There's also the excellent "escreen" package that can manage multiple window configurations you can switch between (pretty much like "screen" or "tmux"). Worth looking into if working with windows a lot is something in your workflow.

    I personally use two frames (one for each physical monitor) with a single vertical split. And since I can't stand terminals in emacs I just atl-tab to a real one ;D.

    However, I think I'll join the chain and hack your code a bit to pop-up other interesting things :D

  • https://github.com/ptrv Peter

    Great tip!

    Thanks.

  • http://noorul.com Noorul

    I have not found anything close to mult-term (wrapper for ansi-term) so far.