emacs

A couple of years ago I was standing outside my son’s nursery, waiting to pick him up at the end of the day. I got chatting to another father, whose name was Tafuma, and once we’d negotiated the usual pleasantries and parenthood-centric remarks, we discovered that we both had a technology background.

Virtually without additional preamble, he asked “Have you heard of org mode?”

I truthfully answered that I had, but I’d bounced off the project’s homepage every time, for the two main reasons that it seemed like overkill for my needs, and that I had no experience with emacs, the editor within which org mode runs.

I’ve used command-line text editors before. I administer this server, and can get around in vi or nano quite comfortably for basic tasks. I even used mutt as my primary email client for a while, and it has the same interface. Emacs, though, remained a mystery.

Recently, I’ve made some significant changes in my tech setup. I switched back to Mac, after eight years on the iPad. I’ve also been feeling increasingly dissatisfied with Apple as a company. They care about privacy, but not choice; security, but not liberty. I suppose it’s natural enough that, after almost a decade locked into the walled garden of a wholly vendor-controlled device and their own app store, I feel disproportionately aggrieved when I notice the invisible walls of lock-in and proprietary services and silos.

I love macOS, and I won’t be moving away from it any time soon, but I do want my setup to be more platform-agnostic, and I very much want to have ownership of my data. To that end, I’ve taken some steps towards getting some of my most valuable data into open formats and app-agnostic storage.

My beloved Ulysses is a Markdown editor at heart, with lots of useful ancillary features including export configurations for publishing both digital and print books, and some editing conveniences which I’ve made occasional use of in the past. It’s been the repository of most of my writing for years, and is available on all of the Apple device platforms. It’s wonderful, and I highly recommend it for the majority of people who want to write in Markdown on an Apple device, and publish their work.

There are a couple of sub-optimal aspects, though. Using the full set of features entails keeping your work in its own internal format, which is essentially a big opaque archive with all the necessary metadata and so on. That’s fine, and inevitable, but not what I’m quite comfortable with right now. You can export to regular Markdown (Ulysses uses its own variant with some unique syntax), even in bulk, but you’ll of course lose any proprietary types of annotations or attachments like separate per-document notes, images, and keywords. You’ll also lose any custom ordering of documents within a group, understandably, but I was able to ameliorate this by merging any custom-ordered groups into a single document — those files are just concatenated into one big Markdown document for export anyway — and thus preserve the overall intent. It took a couple of hours of faffing around, but I now have all of my writing, as vanilla Markdown files, in a suitable directory structure that can be read by anything that can cope with plain text.

So I have the data. Now what about the editor?

I had a lot of preconceptions about emacs, split pretty evenly between what I thought it was, and what I thought it wasn’t. I have to admit that, knowing what I now know, I didn’t have a good hit rate at all in my assumptions. Nor even did I have a good grasp of what the pros and cons of it would turn out to be, for me or for users in general.

The thing with emacs is that its pros and cons are all extremely subjective. Certainly, it’s not for most people who are coming from typical GUI apps. We should avoid categorising differences as weaknesses per se, of course, but learning curve is a legitimate factor, and emacs definitely has one. Everything does, though; especially things that are ultimately worthwhile. The initial experience is rarely the full story, or even a representative part of it.

I’ve spent a few weeks using emacs for hours every day, fiddling with its innards, reading the entirety of its manual, and using it for my work. I’ve learned a lot that’s surprised me. Here are some of the things that stood out.

emacs is a GUI app for ten-fingered typists

First, emacs isn’t a terminal-based text editor. It can be, if you want, but it’s primarily a windowed application at least superficially analogous to Notepad or TextEdit or such. You don’t need to visit the command-line to launch or use it, unless you want to.

That said, it’s very different from most GUI apps. Let me say up front that if you’re a mouse type of person, using a pointing device to trigger menu items and to click buttons, you need read no further; emacs isn’t for you. I’ve always tried to avoid my pointing device whenever possible, greedily learning keyboard shortcuts so I can keep my hands on the keyboard and my eyes on the screen. If that sounds like you, too, then emacs is at least viable for you.

emacs has sequential keyboard shortcuts

The next big thing is the nature of those keyboard shortcuts: they look different than you’re used to, and they’re constructed differently. There are two main parts to this.

  1. Due to historical reasons and also its cross-platform nature, emacs doesn’t use the familiar symbols for keyboard shortcuts on your chosen operating system. You won’t see the key on the Mac, or the symbol for Control/Ctrl, or whatever. Emacs does use those keys, of course; it just notates them differently, and indeed in plain text. It’s pretty simple: Shift is S, Control or Ctrl is C, Alt or Option is M (for Meta), and Command on Mac or the Windows key on Windows is s (note the lowercase), for Super.

    The way those shortcuts are displayed is also a tiny bit different, using hyphens to indicate that keys should be pressed simultaneously. So, for example, the macOS shortcut of ⌃⌥N (meaning to simultaneously press Control, Option, and the N key) would be shown in emacs as C-M-n. Emacs uses lowercase letter keys in shortcuts, and would only show the uppercase version if you really were meant to include the Shift key to type it in uppercase; macOS, for whatever reason, shows shortcut letters always in uppercase, even though you’re typing them in lowercase.

  2. The second difference is that the GUI keyboard shortcuts you’re used to are virtually always just a single splat of keys, all pressed at the same time. In emacs, though, almost all shortcuts are sequences of key-presses or combinations. Here’s an example: M-x C-s means to press Meta (which is Alt/Option, remember) and x at the same time, then release those keys and press Control and s. This actually gives a huge amount of flexibility, since the first part of the shortcut selects a whole group of further shortcuts, in a hierarchy, giving far more keyboard control without requiring increasingly uncomfortable multi-key simultaneous combinations.

You get used to it quickly, and then you realise just how powerful it is. And you can remap any of the shortcuts for anything at all: I really mean that. Not just for the menu commands. Not just for things that already have a shortcut. For anything at all.

emacs has more features than any other app

You’re thinking that I’m exaggerating right now. I am not. Emacs has more functionality than probably any other app on your system, of any kind, by a very large margin. It can replace, at least to a substantial degree, most apps that deal with any kind of data that can conceivably be rendered in a primarily textual format, and that grouping is very much larger than you presently think.

I haven’t been using emacs for very long and have made only minimal customisations, but when I trigger the global shortcut to execute an arbitrary command, I get a list of 6,183 options at the moment, and there are over 10,000 commands built-in, before you start adding optional packages. Amongst literally thousands of other things, emacs is (and can be) a writing tool, programming IDE, calendar and agenda app, web browser, mail client, file browser, terminal, presentation tool, spreadsheet, finance tracker, media player, page-layout app, personal knowledge management repository, version control system, and a ridiculous number of other things. It has its own package manager, and its own customisation interface, but the main thing is that it’s modular.

On the one hand, your favourite features in your current word processor or text editor or IDE were very possibly inspired by emacs, which has been around for a very long time. The first version was written in 1976. The most recent version, 30.1, was released in February 2025. And on the other hand, if you have some favourite features from other apps that evolved independently, they are very likely also available in emacs.

emacs is your favourite editor

What this means is that emacs is not just customisable, but composable. Before I started using Ulysses, I spent years with Scrivener, which is another fantastic writing app; it just focuses on styled text instead of Markdown, and has many more planning and brainstorming conveniences. I always particularly liked its binder, with a three-pane setup of the file tree, the per-file notes, and the current document. Emacs has that. In Ulysses, I liked the Markdown editor and syntax-insertion and export via stylesheets instead of complicated configuration windows. Emacs has that too. At this point, if emacs doesn’t have a particular feature, either built-in or installable, it’s not even a choice; it’s an anomaly.

It also has a composable interface, whereby you can readily set up whatever combination of split views and embedded functionality you like. By all means recreate what you’re used to elsewhere. Recreate the key bindings and workflows, and the colour schemes and layouts. Nobody’s going to stop you, and somebody has already done it anyway. Or make an entirely new editor that just suits you in particular, because there’s some stuff you like from Xcode, and some from Jetbrains, and some from Visual Studio and Eclipse and whatever people are using these days. Or Scrivener and Ulysses and Writeroom and iA Writer. Or all of it at the same time, morphing as you switch between different file types or mo∫ods.

But let’s calm down for a minute.

emacs is an instrument

Things are different in emacs. There’s the modular nature of it, and the acclimatisation period for the keyboard shortcuts and how they work. But there’s more than that. Some of the terminology is different (windows are frames, and panes are windows, and loaded documents are buffers, and cut/copy/paste work a bit differently via something called the kill ring, which I think we can all agree is a wonderful name no matter what it does).

Everything is a buffer in emacs, and you can navigate and manipulate all of it, and you will be doing so all the time. Back and forth and up and down, whizzing around, looking like you’re hacking the planet. Clackety clackety clack. And, little by little, you’ll get surprisingly fast at getting things done, and getting to where you need to be. Think about it: no matter how weird and scary it looks at first, this thing has been in development for nearly fifty years, and is used by people (albeit weird people?) on every platform out there, for every kind of task. They can’t all be wrong. But they all had to learn how to use the thing, and to adapt to its very particular way of working. You’ll be no different, either in the initial confusion or in the growing comfort and wonder.

But seriously, don’t bother if you’re not into plain text, and typing keyboard shortcuts, and keeping your hands off the mouse or trackpad or whatever it is you use. I’m not kidding. You should absolutely change your filthy habits, but if you don’t intend to do so, emacs isn’t for you.

That’s not to say that emacs won’t help you, though! There’s a thing called the mode line at the bottom of every frame, giving feedback on what’s happening, and asking for input when needed, and showing useful information. You can ask emacs which commands are available, and which shortcuts, and what a given shortcut does, and what a given command does, and how to configure something, and what a particular thing means. There’s also a vast manual built into the thing, which you can also read online, and user communities in every corner of the internet. Every question you want to ask has an answer available, and has been asked and answered before. I find that quite comforting, knowing that instead of a piece of software being a blip in my life that I’ll eventually move on from, I’m actually just a blip in emacs’ life.

It took me about a week to feel comfortable with emacs, and no longer reach for BBEdit (another of the finest text editors of all time, most definitely, and my favourite macOS app) when precision and rapidity of editing were needed. Another few days, and I had the same feeling as when I’ve tweaked a mechanical keyboard layout and finally managed to internalise it; that sense that my hands knew what I wanted to do, and consciously thinking about it makes me slower rather than faster. It’s the same feeling you get when you play a musical instrument.

emacs is modal

The single greatest strength of emacs is its pervasive modality. Modal, in the context of computing, just means being in a particular state (or mode) which affects how input is interpreted. Caps Lock is a mode, because it makes the computer interpret your press of the ‘k’ key as the uppercase ‘K’ instead. The Shift key also creates a mode, whereby the number keys produce symbols instead, and so on.

Lots of people think that modal actually means doing just one thing at a time, or a type of interface that pops up and blocks what you’re doing until you’ve dealt with it. I’m using the term in its defined sense from the previous paragraph.

The way emacs works is that it has many different modes, split into either major or minor categories. Only one major mode can be active in each buffer (think of it like a document window), but you can have as many minor modes active as you like. You can even have minor modes active globally, instead of just in a given set of buffers.

You’re probably familiar with the basic idea of what emacs calls major modes. Your IDE, for example, will presumably behave a bit differently and have different commands available when you’re editing a python source file versus a markdown file, or an html document. Those are just modes; the python major mode, say, where invoking a “comment-out this line” command will insert the appropriate comment delimiters for the python language. You get the idea.

In emacs, though, lots of functionality is split out into minor modes, which can be active in whichever buffers you like, and usually regardless of which major mode is in effect. Live spell-checking is a minor mode, as is visual line-wrapping. The ability to edit and format tables with formulae is a minor mode, nominally belonging to the org major mode, but you can readily use it for Markdown files, or in your Swift source code comments, or whatever you want. This is what I mean by emacs being composable: you can put functionality together to suit your editing session, and in a sense you can embed heterogeneous features into documents to suit your needs in the moment. It’s like OpenDoc, if anyone remembers that — or OLE, or ActiveX maybe. But I digress.

This turns out to be an incredibly flexible approach. Here’s an example: you might have encountered a feature in IDEs or outliners or such where you can select a portion of your document, and temporarily make it seem like there’s nothing else there, so you can dedicate your attention to just that section; it’s sometimes called focusing or hoisting. In emacs, it’s called narrowing, and it’s not dependent on any particular major mode, or on specific file types.

Likewise, you might have encountered a feature where you can edit the same file in more than one window, and have the windows be aware of each other such that they scroll in synchronisation and trade the focus or cursor between themselves as you navigate. It’s sometimes called linked editing or such. In emacs, that’s follow mode, and it’s also a minor mode you can use whenever you like. Indeed, many major modes vend logical portions of their functionality as minor modes too, once again making me reminisce about OpenDoc.

emacs has defaults instead of opinions

Now I am exaggerating a little bit, because of course a default (or at least a well-chosen one) actually is an opinion. An important one. The distinction I’m making is just that emacs takes nothing for granted in terms of its appearance or behaviour; the user is given infinite rope with which to either elevate or entangle themselves. Everything is customisable. Everything.

Here are a few examples, just off the top of my head. Everything about how every part of the interface looks, what elements are included, how windows (frames, remember) work, what features are enabled and for which modes, which keyboard shortcuts are available and what they all do, pretty much every default action or value for everything, and dozens of nuances of behaviour for every aspect of every one of thousands of commands. And you can have as many distinct sets of all that stuff as you like, in as many combinations as you want.

Suffice to say that there’s a lot of power there, if that’s your thing. No two users’ emacs configs are the same, I daresay.

emacs says yes

As a consequence both of what I’ve already detailed and also the vast user community amassed over five decades, the defining quality of emacs is that, whether the question begins “Can it do” or “Does it integrate with” or even “Does it run on”, the answer is invariably yes. I’d even go so far as to say that any “can I” question regarding emacs should just be expressed as “how can I” instead.

There are limitations, of course. It’s a plain-text editor at its core, albeit festooned with absurd quantities of specialised functionality in every conceivable niche and permutation, so there are whole categories of work you won’t be doing there. But you might be surprised just how far you can go with it, if you really want to. People boot into emacs, you know. It can embed Chromium. It runs as a server. The limitations you see might just be your own lack of imagination or awareness.

emacs isn’t for everyone, or even for most

I think I’ve already made this quite evident, but emacs is for a particular subset of computer users, and a relatively small one in the grand scheme. While it has its own rigorous logic and an iron-clad design, I don’t think anyone would label is as intuitive in any modern sense without qualification. There’s a steep learning curve, by any measure. But what does that mean?

There are multiple factors. There’s the obstacle of learning how emacs does things — the modes and the buffers, the windows and the mode-line and the mini-buffer, the modular and extensible nature of everything, and its own jargon and mental model about the mark and the region, killing and yanking, local versus global modes, and all of it. It all makes sense, and you can just sit down with the manual (all 750+ pages of it, without any screenshots) and enjoy the journey, if that’s your thing. In fact, whether you want to read the manual is a decent litmus test of whether or not you’ll get along with emacs. Manual-readers will do well here.

Then there’s the obstacle of physically adapting to the wholly keyboard-driven interface, and also the chorded and sequential nature of command input. I think your background on computers in general will be a deciding factor regarding how surmountable this is. I drive my computers via the keyboard alone whenever possible, and I have a catalogue of keyboard shortcuts rattling around my head, and I design and implement mechanical keyboard layouts for fun. All three of the clauses in the previous sentence included the word ‘keyboard’, for god’s sake. The venn overlap here is just a single big circle. But that may not be true for you, and you should be honest with yourself about that when you’re going in, because otherwise it’s going to feel like trying to translate a foreign language you don’t know, or Flying A Commercial Airliner For Dummies.

And finally there’s the double-edged sword of boundless customisation and configuration: the buck stops with you, because unless you just install it and then leave it the hell alone (in which case, why bother?), it’s really your software, and you can break it in fascinating ways, and then you have to fix it. There’s also the infinite time-sink of eternal tweaking and finessing of its ever-expanding functionality. The rabbit hole goes deep, and you’ll fall into it virtually immediately.

If that all sounds horrible, then congratulations on being part of the sane super-majority. There are a great many polished GUI editors and IDEs to choose from, and you’ll be very happy with any of them.

If, however, what I’ve described sounds super great and incredibly exciting, then you’re weird and you have control issues, and you’re probably a chronic procrastinator, and you’re maybe in the middle of some kind of mental health issue where you need to deep-dive into something complicated as a kind of avoidance reaction, and you are exactly like me. You’re going to absolutely love it. You’ll feel so seen.

In fact, you should install emacs right now, start configuring, and you’ll see what I mean. I’m going to stop talking so you can do that. Let me know what happens. We should totally talk about it!