The Road to Emacs

What is Emacs?

Emacs is not just an editor. It's an editor construction kit that comes with a half-finished editor. And that's one of the features that makes it by far the best text editor in the world. The other feature is that you program it in Lisp. O.K., so Elisp (Emacs's Lisp) is an antiquated dynamically scoped Lisp, but it's still a real Lisp with Lisp macros and all. And, as anyone who uses the force will tell you, Lisp is the most powerful programming language there is.

Stages of Emacs Communion

Emacs has a serious flaw: the learning curve. I learned Emacs in two stages. In the first stage, I learned how to use Emacs like I learned how to use any other editor. I learned all the key combinations that make Emacs tick and learned how to become somewhat productive with out-of-the-box Emacs. I began using Emacs quite a bit, but eventually switched to a better editor and relegated Emacs to editing text files in the shell or via SSH.

One day, however, I was fed up with the limitations of my better editor. I began to look for an editor that could do it all. I wanted an editor that provided excellent support for

  • All programming languages
  • All computing environments
  • Remote editing of text using all protocols
  • Extending the editor with ease
  • Viewing and navigating XML and other data formats
  • Windowed environments
  • Text-only shell-based environments
  • Accessing all of the editor's internals

In addition to that, I wanted the editor to be supported forever (guaranteed), to have great documentation, a solid community, and to be easy to find and install, regardless of the platform.

(Actually, I wanted a whole lot more.)

I tried many an editor. And a few IDEs too. But I lived a life in which I had to open some files with one editor and other files with another editor and yet other files with a third or fourth editor. Common sense seemed to dictate that no editor could do everything. But deep inside I knew there was an editor out there that could indeed do it all.

An exhaustive search brought me right back to Emacs again. I was surprised with this at first. After all, Emacs does seem a little archaic out of the box. But, I pressed on.

I began to learn how to configure Emacs, how to use its advanced features, and even how to extend it using Elisp. This new Emacs was nothing like the Emacs that I had used for years before. I began to experience a second stage of communion with Emacs. I became far more productive than I had ever been before (who knew that an editor could make such a difference!). The improvement felt much like the improvement I experienced in Perl programming (and programming in general) after I was exposed to Lisp.

Emacs and I Today

Now I use Emacs for everything. In my Emacs configuration, I have little bits of code that allow me to perform all kinds of tasks, such as formatting XML, subtracting one list from another, creating a list of distinct items from a list with some duplicate items, adding columns of numbers, editing wiki topics, encrypting sensitive material, and writing this article. Emacs even connects directly to Mark Logic database servers and other servers, allowing me to use keyboard shortcuts to quickly highlight and test snippets of code that I've inserted into in an article or a program.

But getting Emacs to behave exactly like I want took a great deal of work. These days, out-of-the-box Emacs feels just like that: out of the box; like a desk from OfficeMax before it's been assembled.

Among many other things, my current Emacs configuration includes the following modules:

Configuring Emacs

To install Emacs on a new machine, I usually perform these steps:
  • Clone the Elisp directory using Git:
    git clone git://
  • Create a symbolic link .emacs in my home directory. The link points to emacs.el in the elisp working copy
  • Delete cperl-mode.elc from /usr/share/emacs/2x.x/lisp/progmodes (or equivalent directory) and, in that directory, put a symbolic link to the cperl-mode.el in the elisp working copy.
I also usually install the following Ubuntu packages (or their equivalents, when using another distribution or platform):
  • slime
  • aspell

My Future with Emacs

I have grown out of every programming language and skill that I've learned so far. Almost without exception. But I can't imagine that I'll grow out of Emacs any time soon. I hope that something better comes along one day, but I think Emacs is going to be king for a while.