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
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
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
~/.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.
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.
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.