A blog

Starting over with Emacs


I switched to Emacs sometime in 2009. At the time, I was using TextMate most of the time (though diving frequently into vi, as befitting my background as a system administrator). There wasn’t any singular event that drove me to try out Emacs, but I do remember being frustrated by TextMate’s performance with a particularly large project at work. I’d noticed Emacs-using colleagues having a much better time of things, and some stories about Emacs on Hacker News had piqued my interest.

The learning curve was initially quite steep, which presented something of a challenge – I needed to use the tool to get work done, and couldn’t afford to significantly slow myself down for an unknown period. I bought PeepCode’s “Meet Emacs” screencast to see a quick introduction to the essential features, and get a handle on my ignorance. It’s important to know what you don’t know, and the screencast helped me reach “conscious competence” quickly enough to stick with it.

Following the advice in “Meet Emacs”, I used the Emacs Starter Kit for my initial configuration. It was awesome. More awesome than I could comprehend; despite spending time poking around the contents of my new ~/.emacs.d, only the most superficial aspects of the configuration made much sense. I had an editor that was powerful and feature-rich, but the much-vaunted malleability of the Emacs environment lay beyond my grasp.

Fortunately, my earlier switch to OS X had brought with it a certain serenity in the face of technology. If an opinionated application (or OS) does what you want, most of the time, it’s worth going along with it in the places you disagree. That this is largely antithetical to the Emacs view of the world is not lost on me.

So, I spent my first couple of years with Emacs using a barely-customised ESK configuration, and I was pretty happy with it. While missing some of vi’s functionality, I choose not to install any vi-compatibility features. The lynch-pin of my commitment turned out to be magit, the excellent git mode for Emacs. Having become accustomed to such seamless interaction with my VCS, I can no longer imagine working without it.


Though I was largely happy with the end result, the amount of magic (or sufficiently advanced technology) bothered me. Nor was this entirely academic – I had been putting up with a bunch of quirks I was sure could be fixed, if only I knew how. Last week, I came across the article that helped me start down that road.

“Emacs Configuration Rewrite” documents Steven Danna’s experience rebuilding his Emacs configuration from scratch. The result is positively minimalist alongside ESK, and lacks many features and customisations the latter delivers “out of the box”. I decided that probably didn’t matter to me – after all, if I missed something enough to add it back in, that would simply drive me to learn how to do that. Above all else, Steven’s configuration showed me that I could start out with something I could comprehend completely, and expand from there. So that’s what I did.

The initial commit to my emacs configuration repo doesn’t tweak anything – it simply introduces the skeleton that everything else hangs off. I’ve added one thing at a time as I’ve needed it, and understood it. That’s not to say it’s entirely (or even mostly) original work – I’ve picked things up from various places, but they only go into my config when I understand what they do. No blind copy-and-paste, no cargo cults.

Emacs makes this exercise pretty easy. The built-in help can give you the value and meaning of any variable (C-h v), and the documentation for any function (C-h f). For anything implemented in elisp (and that’s nearly everything), you can even jump straight to the source. This was way too much to deal with when I first started using Emacs, but I regret leaving it so long to come back to it.

The Future

I don’t like unnecessary wheel reinvention. My goal is to understand how things fit together, that I might change them according to my needs – I don’t feel that meeting that goal demands personally entering every single sexp into my Emacs configuration.

The Emacs Starter Kit has evolved considerably since I made a personal fork in 2009, and I made no attempt to evolve my forked configuration with it. It contains lots of good stuff, and I’ve started to look more closely at exactly how it’s put together. As my understanding grows, I expect to be able to reuse larger pieces of elisp (from ESK and elsewhere) without feeling that my configuration is outgrowing my competence.

I may move to an ESK-based configuration again in the future, and I’m glad I used one in the past. In the present, I’m appreciating a greater understanding of a smaller set of features.