Emacs, the Eternal Editor
(Approx. 5 min read)
Why Emacs is truly the Editor of a Lifetime.
GNU Emacs is, in my opinion, the best text editor in existence1, and will likely remain so potentially for as long as text editors are still being used. I don’t think it’s particularly useful to try and argue that everyone should use Emacs; not everyone should use Emacs (especially those new to programming). What I do want to do is dispel some common rumors about Emacs that I hear a lot in real life, because sometimes people dismiss Emacs based on entirely pre- or ill-conceived notions of what Emacs is capable of and designed for.
Emacs is a Text Editor (That’s It)
Most programs are, philosophically speaking, the exact opposite of Emacs. In normal software, there’s a predefined limited number of operations you can do/extend. You might be able to compose them, but every extension language has fundamental limits to how much it can overhaul (you can’t, say, make Excel into a music player using just Visual Basic2). Emacs, instead, implements as much of itself as possible in Lisp so that you can overhaul and compose just about anything in it (and the C core that you can’t edit can still be extended with dynamic compiled modules). The environment is very introspective at its core; it’s Lisp all the way down.
Many people interpret this as Emacs effectively being a type of operating system3. While this is true in a sense that it abstracts hardware, this comparison is silly, because many of Emacs’ primitives are about text editing. It is a text editor with a text-based interface with Lisp and C primitives that are primarily useful for text editing.
Emacs is Compositional
Because Emacs is all about text, improving the editing experience of any one of its core components pays off when using the rest of the editor since it’s all fundamentally just text interfaces, whereas in other programs those interfaces are separate.
Consider a package like orderless, which implements a better search ordering for Emacs. It overrides the base-function called completing-read, which means that you feel its benefits in nearly every single search interface within Emacs. Another favorite of mine is binky: you can create register-based bookmarks to cycle through buffers, and since everything in Emacs is a buffer, the more you do in it, the more binky pays off. I can jump from coding to files locally, viewing remote directories with tramp and dired, to writing my commit with magit and it’s all seamlessly handled through this same interface, without having to modify any of those packages.
All of Emacs feels like this and it’s really nice to see the Emacs team keeps adding better and better primitives for this. tree-sitter is a recent & huge one: nowadays Emacs knows semantically where you are in the syntax tree of code, so it’s easy to have editing that works on the shape of code in the tree and is language-agnostic (see combobulate for a really cool package that does this). The best part? Often the community moves way faster than Emacs core, so if there’s a cool new feature in another editor, it will be in Emacs very soon, like LLM-coding with gptel or language-serve debugging with dape.
Emacs is Boring
One of the nice things about Emacs is that you can really make it exactly how you want, and no two people will end up with the exact same configuration file (you can find my config on GitHub). I find this to be quite nice because while Emacs does have an interface that’s initially very hard to get used to, you can adjust just about any part of it until it’s just to your liking, at which point it will remain that way until you change it.
Mainline Emacs updates, in my experience, almost never break anything (if it happens to you, you can always roll back your version alongside your packages with something like straight.el or elpaca) and are usually skippable if you’re in a hurry. They usually only add features, which you’re never forced to use. As a result, I feel like Emacs is the only major piece of software where I’m excited to see updates, rather than dreading them. Emacs is very boring, and that’s great!
Editor of a Lifetime
From time to time someone tells me about some supposedly “superior” editor. I’m always willing to try them out, but nothing ever works quite like Emacs does. Because of its intelligent, compositionally-focused design, I can rely on Emacs to always be able to extend itself to handle whatever my workflow demands, and its excellent community means that the work I have to do is usually as short as one use-package call away.
It’s a really great tool and one that I would recommend if you spend substantial amounts of time doing text-based work!
Unless they ever release a multithreaded rewrite into a more modern Lisp, in which case I might reconsider. Clojure or Common Lisp flavored Emacs would be amazing. ↩︎
You probably could do this in Excel actually, and since Office 2024 you can even do it quite ergonomically, but let’s pretend Microsoft didn’t allow such horrors. ↩︎
Emacs can’t be an OS since it’s not a kernel but with some effort you can get pretty close. ↩︎