Persistent emacs server sessions

emacs

In my spare time, I’ve been working on two tools to make emacs more useful to me by leveraging two key features: the ability to save the desktop state and the ability to have emacs clients connect to an emacs server.

For the former, I wrote an emacs-lisp package called desktop-autosave. Once initiated, the package will periodically save the desktop under the name of your choice. The benefit of this is that you do not have to remember to save the desktop explictly yourself before you exit emacs or before you experience an emacs or system crash. Moreover, the next time you start desktop-autosave with that same name, the corresponding desktop is automatically loaded into your emacs workspace.

For the latter, I wrote a bash shell script called ee that will allow you to connect to a named emacs server (bringing up the server if it is not already running). The value of this package is that you can now invoke ee wherever you would normally have invoked emacs, and by just specifying the name of the desired server, you can easily set up as many emacs sessions as you have concurrent projects.

The real benefit comes when you use both packages together. In this case, you can use ee to bring up a named emacs server, and that server will save its desktop to disk periodically. As long as emacs stays running, you can keep connecting to the same server from as many clients as you wish. After your emacs server terminates (by exiting normally, by crashing, or by the machine being reset), you can use ee to once again bring up a server with the same name. In this case, emacs will load the automatically-saved desktop file from disk and you will have in memory all the files that you were working on previously on that particular emacs server. Nifty, no?

Feel fry to try these packages out. They are available on GitHub. If you find them useful or if you find bugs, let me know. Enjoy!

UPDATE 020120.02.11: desktop-autosave now saves shell-mode buffer contents, directory, and command history.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>