Atomized

What Even Is Org Mode?

This is actually a difficult question to answer. It’s easy to describe a new thing in terms of familiar things, but Org isn’t like anything else. Or, rather, it’s like a lot of things in a superficial and confusing way. If you try to explain that it’s a markup editor, and todo list, and calendar, and spreadsheet, and literate programming tool, and it CHANGED MY LIFE, you sound like a maniac. It’s a floor wax and a dessert topping!

The manual falls straight into this trap:

"Org is a mode for keeping notes, maintaining TODO lists, and project planning with a fast and effective plain-text system. It also is an authoring system with unique support for literate programming and reproducible research."

There’s a fundamental confusion between what it does and what it is. Rattling off what it does is unhelpful, because there’s not an obvious organizing principle to its features. It doesn’t make any sense for your todo list manager to have a spreadsheet and literate programming tool.

Okay. So here’s my attempt at explaining what Org actually is:

Org Mode is an interpreter for a text markup language, which is understood and manipulated by both humans and machines. Markup which a human can reasonably write, like Markdown, and code can reasonably manipulate, like JSON. A syntax, and tools, for programmatically handling structured text, and an ecosystem built upon that fundamental ability. And it runs inside Emacs.

That’s Org. Once you grok that, the rest starts to make some sense.

It’s a todo list because some of the text has the TODO keyword. Code can look for items that say TODO, and put them in a list. When the text changes to DONE, they don’t show in the list, because they don’t say TODO anymore. Other code can find the TODO text and change it to DONE, so you don’t have to go edit it by hand, if you want.

It’s a calendar, because some of the text has a date (or date and time) in it. Code can look for dates in your text, and put them in a list, by day or by week.

It’s a spreadsheet because some of the text is in the form of a table, and because some of the text is in the form of a formula. Code can parse the text in the table, evaluate the formula, and put the result back into the table.

It’s a literate programming tool because some of the text says that it’s code in a particular language. That code can be extracted, sent to an interpreter, and the result of evaluating it put into the file.

All those are built on the fundamental ability to reliably, programmatically manipulate and process text written by humans.

None of the various Org imitators and alternate frontends (MobileOrg, Orgzly, vim-orgmode etc) do this. They reimplement the superficial features, not the underlying mechanism. Org only works right inside of Emacs.

I’ve glibly described Org as "Like Emacs for Emacs," but it’s awfully close to the truth. There’s a shared depth to their core ideas: Emacs isn’t so much a text editor as an interactive Lisp environment which a text editor has been built in. The process of mastering Org is similar to that of mastering Emacs. You can be productive using the superficial features, but the real power is the ability to modify and build your own.

Comments