Dr. Neckbeard, or how I learned to stop worrying and love Emacs

So, you might know that I’m a text editor junkie.

At a job in the 1990s, I used a great Windows-only editor called HomeSite for web development. When I moved to the Mac in 2001, I wrote to Allaire, the developers, and asked if there was a Mac version in the works. They wrote back and explained they’d written it in Delphi, a Windows-only development environment, so probably not. But, they added, had I tried BBEdit?

So I tried it, and loved it—and got the “always something more” itch.

I moved from BBEdit to TextMate when the latter hit version 1.5 and stopped sucking. After giving up waiting for the TextMate version 2 unicorn, I tried Sublime Text, which was fine, but never really grabbed me.

From there, I’ve been all over the map. Back to BBEdit. In an on-again, off-again affair with Panic Nova. Trying and failing to love Visual Studio Code, despite a certain level of grudging admiration. On the creative writing side, I’ve been through Markdown-specific editors from iA Writer to MultiMarkdown Composer, finally settling on Ulysses for fiction where I’ve mostly stayed despite continuing to play around with Obsidian.

And then, there’s the editor I kept trying every so often and giving up on: Emacs.

If you don’t know Emacs, it’s a legendary text editor, dating back to the 1970s. What makes it legendary, other than being five decades old and still in active development? A lot of editors have some level of extensibility: BBEdit can be scripted in AppleScript, Code and Nova in JavaScript, and all of them can run shell scripts. But Emacs isn’t just scriptable—it’s an application platform, one specifically built around textual data. It’s not a pretty program, but install Markdown Mode and Emacs becomes a better Markdown editor than whatever you’re using now. (Unless you’re using Emacs.) Magit makes it as good a Git client as the $99 Sublime Merge. And there’s whatever the hell Org Mode is, sort of an outliner that’s also a GTD-like system and a literate programming environment and possibly a floor wax and dessert topping.

The problem, though, isn’t just that Emacs is spiritually opposed to being a Mac-assed Mac app (it’s actively insufferable about it), it’s that it has a terrible “out of the box” experience. It’s not just the alien keyboard shortcuts, or the eclectic terminology. (A window is not a window, it is a frame, while a split pane is a window; you do not cut, copy and paste, you kill, save, and yank; etc.) The real issue is that it’s a monumental exercise to merely match, let alone surpass, what you get after ten minutes of extension browsing in VS Code or Nova.

Even so, I tried to make the switch, every so often. I wanted to like Emacs. But it always defeated me. My experience always ended with some variant of “it’s been three days and I still can’t figure out basic code folding or word wrap the way every other editor does it and don’t tell me I need to learn Lisp to solve this, motherfucker, I have WORK to do.” A few years ago, “starter kits” became more popular, configurations that you install along with Emacs to have it set up right out of the box. They didn’t help. They might have made things worse. I’ll come back to that.

So why keep trying? I have tools that work, right? Multiple things, no less. Why try to get into an infamously difficult editor whose past is inextricably tied to an infamous creep?

There are a few reasons. The first is the most straightforward: functionality. As much as I love BBEdit, there are things I do fairly routinely—like edit templates in my static website—it’s not as good for as other editors are, and its extension system isn’t powerful enough to let third parties add new ones. Worse, even out of the box, Emacs clobbers BBEdit in terms of its package management UX. That’s worth repeating: Emacs has a better user experience than BBEdit, a native Mac app, when it comes to package management. Nova has great package management UX, and that’s a major reason its extension ecosystem is far bigger than BBEdit’s even though it’s only been around five years. Yet Nova feels like a bit of an also-ran at this point. Visible development has slowed; many of its third-party extensions, including critical ones like JavaScript/TypeScript, have been effectively abandoned.

What about Visual Studio Code? At first, it felt like what Emacs might have been like if it had started thirty years later. But the more you dig into it, the more it’s clear it’s open source the way Google products are: more, you know, open-ish. If you’re not using the official build you don’t get access to everything, critical extensions are closed source, and there’s an increasing sense its real purpose is to lock you into an ecosystem.

And that leads into a second reason. I don’t think of myself as particularly anti-commercial—hell, I sell books, I have an idea for software that I would, in fact, like to sell—but there is a definite advantage when something you like, even rely on, is developed by a worldwide community of nerds rather than a corporation. Big companies enshittify; small companies go out of business, or close because the owner wants to retire (see Script Debugger, and even my favorite line of shampoo and shaving products, Nancy Boy), or (ahem) become much more successful as a game publisher than a Mac tool developer.

The third reason, though, is more abstract. By approaching it with the right mindset, building up Emacs is—mostly—fun. And Emacs itself is “always something more.” The nerdy itch stops being “do I like this new program that does something cool I haven’t seen before” and starts being “can I do this cool thing I haven’t seen before in Emacs.” The truly annoying thing about Emacs, you see, that it really is as powerful as its proselytizers tell you it is.

I couldn’t help but notice that Emacs got a fire lit under its neckbeard a few years back. It has modern features like language server and Tree-sitter support, and—sorry to harp on this, BBEdit—actual package management. Now it includes some popular third-party packages like Org Mode, too. So a couple of months ago, I decided to give Emacs one more try. First I tried a very minimal starter kit, Crafted Emacs. For reasons I don’t remember now, this ran aground yet again. But rather than give up, I restarted from a blank slate, working through the book Mastering Emacs (a purchase I made a few years back in a previous failed attempt to migrate) and building a configuration file up one step at a time, not adding any package or setting without understanding what it was there for. I borrowed some bits from Crafted Emacs, tweaking when I wanted to. Improve the completions and search. Turn on the language server. Add a few languages I regularly use. Bring in TextMate-style snippets.

And…this time, it’s kind of working.

Almost every time I’d reach for Nova—which mostly relates to blog stuff these days, but also some PHP coding—I reach for Emacs instead. There are some things it already does better, and a few things that are a little clunkier (if there’s an Emacs equivalent to Nova’s beautiful task system, I haven’t found it yet), but not much I miss.

For BBEdit, it’s harder to say; there are some ways in which it’s the farthest behind the other editors, but other ways in which it’s neck-and-neck with Emacs as a Swiss army knife for text with a better UX. I have years of little tweaks built up, too, that I use on a regular basis. They’re duplicable in Emacs, but it’d take a while. YASnippet is probably best in breed, though, and Emacs’s keyboard macros might let me build up equivalents to BBEdit’s text factories. I’m using Emacs for technical writing now, too, because my current contract job requires me to use a Windows laptop. In a way, I’ve come full circle.

I doubt I’ll ever be all Emacs, all the time, even if this sticks (we’ll check back in a year). Ulysses has lovely ways for organizing and exporting long-form text that I’d be hard-pressed to hack up equivalents to, and of course it works on the iPad—a major feature when I go out on day trips with just the iPad in tow. And while I’m starting to use Org Mode for my work tasks, Things will stay with me as my personal task manager for the same go-everywhere reason.

I have a few unorganized thoughts to wrap up.

First and foremost, I’ve come to believe that starter kits are a bad idea for new users, which is a problem to the extent they’re presented as just what somebody needs when they’re migrating from a more turnkey editor. As a newbie, I have no idea what the hundred or more packages being pulled onto my system do, I don’t know whether a given error being thrown up is important or not, and when something goes wrong—which becomes ever more likely the more dependencies there are—I don’t know how to fix it. And it’s quite possible that even if I find an apparent solution online, it’s a solution that won’t work with that starter kit. I suspect starter kits are more useful for people who’ve gotten their Emacs sea legs under them already, but I’m already not sure whether I’d want to bother switching.

Second, while there’s a lot of great Emacs tutorials out there, there’s surprisingly little that steps you through building a modern setup from scratch, particularly if you’re looking for explanations of why you want to embark your corfu with vertico. I’m emphasizing “modern” because the closest I’ve found, the aptly named “Emacs from Scratch,” hasn’t been fully updated since 2020, and a fair number of convenience packages—things that make Emacs feel more modern—now can be replaced by built-in functionality, or newer, slimmer packages that take advantage of new features. Also, Emacs from Scratch is a video tutorial, which is fine, but rarely my thing. I don’t know if I’m the guy to write an “Emacs Configuration for the Moderately Patient” tutorial, but if I actually stick with it, we’ll see.

Lastly, I don’t think Emacs will ever be particularly approachable to folks who aren’t willing to hack around with their editors in a more involved way. And that’s okay. I admire the work being put into modernizing it, but the very idea of an extensible, scriptable text editor is, well, pretty nerdy. Either you’re going to get really into the notion, or you’re just, well, not. And even in that realm, Emacs is unabashedly uber-nerdy. MacStories’ Federico Viticci, famed for championing scriptable editors like Obsidian and Editorial, would be all over Emacs if it wasn’t, well, Emacs. I get it.

But the thing is, I think I also get Emacs. And once you get Emacs, there’s probably no going back.

Back to Articles


To support my writing, throw me a tip on Ko-fi.com!