Vivek Haldar

The levels of Emacs proficiency

0. Awareness

You know about the existence of Emacs. You know that “C-x C-c” will get out of it. You also know that “C-h t” will go to the built-in tutorial, and you slowly and clumsily start making your way through it.

1. Basic usage

You can use Emacs for basic text editing. You are beginning to get comfortable moving around files, searching, and you know how to open multiple buffers, navigate among them, and split frames. You are now at the level where you can use Emacs as a substitute for a basic text editor like Notepad/Textedit/whatever.

2. Basic customization

You are now beginning to use Emacs on a regular basis, and begin to feel the need for minor tweaking. You learn how to customize Emacs by adding some text to a file called .emacs in your home directory. You don’t yet know or understand Emacs Lisp, but googling around has taught you that “(global-font-lock-mode t)” will turn on the pretty syntax highlighting everywhere automatically.

3. Advanced usage

Reading the built-in documentation, as well as websites and blog posts, you begin to incorporate some of the more advanced features of Emacs into your day to day editing. This includes things like using regular expressions, registers, dired, tramp, and the intricacies of various modes for the programming languages you edit regularly.

But the big aha moment comes when you use keyboard macros to refactor the usage of a function in 40 different files in 30 seconds. You marvel at how easy it was, and how you ever got by without it. Dreadful memories of similar refactorings carried out manually, one file at a time, one usage at a time, reinforce your determination to never go back.

4. Shell inside Emacs

At first this sounds like just another “advanced usage” topic, but this is the first quantum leap on the Emacs learning curve which illustrates how Emacs can subsume activities that were typically carried out outside it. Hence, it deserves special treatment.

Up until now, you probably had one large Emacs window plus many other shell windows spread out on your screen. Also, if you are a typical developer, you often had to cut and paste text between those windows. And that was a major road bump, because you had to use the mouse to select text in an xterm. Often, the text you really wanted had scrolled off the window.

And then, you learned about it: M-x “shell”.

It was all just text. Why did you need another application for it? Why should only the shell prompt be editable? Why can’t I move my cursor up a few lines to where the last command spewed out its results? All these problems simply disappear when your shell (or shells) simply becomes another Emacs buffer, upon which all of the text manipulation power of Emacs can be brought to bear.

Another reason this level is special is that now begins to pain you to watch other people flicking between their shell windows and editor windows, wasting time mousing around, wasting time eyeballing command output because it is not searchable. “There is a better way! Why are they still doing this?” you wonder to yourself. This feeling only gets worse as you continue climbing up the Emacs curve.

5. Advanced customization

You begin to pick up Emacs Lisp. Your .emacs starts to accumulate small functions that you have written to solve your own little problems. You realize that the rich libraries for text manipulation that Emacs comes with are like an intricate domain-specific language for fine text surgery, built up over decades. Now whenever there is some friction, you put some thought into how it can be smoothed out with some customization, or Emacs Lisp automation.

6. Emacs-ifying everything

You long to move into Emacs every application that has anything to do with the entry and manipulation of text. For most programmers, this is pretty much everything. E-mail is the first obvious target. But you can even move a good fraction of your web surfing (sites where you just plain read, that are not JavaScript heavy) into Emacs as well. You can even turn Emacs into a full-fledged twitter client.

The transformation is visually apparent on your screen. At the earlier levels, you probably had one Emacs window, and then a few shell and browser windows. By now, you have one maximized Emacs window, probably split among some shell and text buffers, and the browser window behind it, which you occasionally Alt-Tab into.