Notes, tasks, and planning with Org mode

Published: April 18, 2021   |   Read time:


Org mode, literally, is a package for Emacs that combines note taking, to do lists, and organization. Org mode, conceptually, is a way of organizing your tasks, notes, schedules, and almost everything else in your life, in plain text. You can do this so that your writing can be manipulated, connected, and organized effectively.

Previously, I have written about the Emacs text editor and its ethos of using macros to run functions on text. Org mode applies this same ethos to organization and has many utilities to accomplish this. In their own words:

Org mode is for keeping notes, maintaining TODO lists, planning projects, and authoring documents with a fast and effective plain-text system.

When a piece of software is around for almost twenty years, lots gets written about it that doesn’t need repeating, here. But there are some great things about it and its design philosophy that I think are worth highlighting.

The Org markup language

Org mode uses its own markup language to better interact with it. It’s similar to Markdown, but has its own syntax. For example, Org mode tables can have multiple lines in a cell and links are written as [[link][text]] instead of [text](link). But its unique markup gives it a unique structure. And with that structure, hundreds of functions in the Org mode package can operate.

For lists items, paragraphs, and more, metadata can easily be added between :PROPERTIES: and :END: tags. This key-value metadata gives you the power to query it from anywhere, as well as be filtered, sorted, and more. The implicit hierarchy that this structure provides also allows the metadata to be easily folded away, tucked out of sight. It’s a great way to add important information without overloading the reader.

Tasks & note-taking from anywhere

The structure of Org files are part of a bigger axiom of note-taking itself: notes and tasks are indistinguishable from one another. Tasks require information and context which notes provide. Notes collect thoughts and raise questions that should be acted upon, which tasks help make explicit. Having quick access to both of these things, from anywhere, is what gives Org mode its ability as an excellent note-taking and task scheduling tool.

Org mode then builds tooling to make creating, scheduling, and organizing tasks as powerful as possible. While a bit unwieldly at first, all of the capabilities built around tasks, such as the repeaters, captures, and agendas, form a powerful toolset to work with.

There are many task management tools out there today, like Todoist, Microsoft To-Do (formerly Wunderlist), and Notion. These tools are great in many respects, but they impose a structure on what you can write. Org mode is designed to give you the freedom to write what you want, how you want, with a minimal syntax. And because everything is in plain text, you’re not locked into a proprietary solution.

Despite only being maintained by a few individuals, there are some great features that these other tools have yet to match. A feature that I have found especially interesting is clocking.


Let’s say you want to track how much time you spending doing a certain task. Lots of people need to clock hours for certain jobs, or maybe you’re just curious at how much time you actually spend working each day.

In Org mode you can do this with the org-clock-in and org-clock-out commands. This works just like a punch in/out card. For a headline that’s highlighted when M-x org-clock-in is run, a :LOGBOOK: property is added to it and it adds the current time.

For example, this

* TODO Test out org-mode's clocking features

becomes this

* TODO Test out org-mode's clocking features
  CLOCK: [2020-09-08 Mon 21:00]

This also adds a note to Emacs’ modeline, to remind you what you should be focusing on and how much time you’ve currently spent on it.

Org mode adds text to the modeline -100%

Clocking out works the same way. If we clock out 20 minutes after we started, our headline now looks like this:

* TODO Test out org-mode's clocking features
  CLOCK: [2020-09-08 Mon 21:00]--[2020-09-08 Mon 21:20] => 0:20

You can see the total time spent on the right-hand side. If you don’t finish a task, that’s fine. You can clock in and out again, and you’ll get a new line in the LOGBOOK.

* TODO Test out org-mode's clocking features
  CLOCK: [2020-09-07 Mon 21:30]--[2020-09-07 Mon 22:00] => 0:30
  CLOCK: [2020-09-07 Mon 21:00]--[2020-09-07 Mon 21:20] => 0:20

Estimating efforts

I have found it useful to estimate ahead of time how long it will take me to complete a task; if only to realize how long things actually take. Org mode lets you do this easily with a property called Effort.

M-x org-set-effort gets you to enter the estimated time for a task. Then, when you’ve clocked in for that task, the modeline shows you how much time you’ve spent in total.

Effort estimates for a currently clocked-in task -100%

It also shows you when you’ve gone over your estimate.

Time over the effort estimate for a currently clocked-in task -100%

Making reports from clocked time

You can then use your clocked times and headlines to create summarized reports of all the work you’ve done.

For example, let’s say that every Friday you need to give a brief description of what you’ve in the week.

You can insert this into an org file

#+BEGIN: clocktable :scope agenda :block thisweek :step day :fileskip0 t

then run M-x org-clock-report to create a table to see what you’ve done. You can specify what is shown in the table by editing the options in the #+BEGIN: ... line. The line above does the following:

  • :scope agenda looks through all your agenda files (i.e. org-agenda-files)
  • :block thisweek queries everything clocked this week
  • :step day creates tables for each day in the week
  • fileskip0 t don’t create table rows for files that don’t have any time clocked for them

This type of dynamic content generation in any Org file really demonstrates how powerful Org mode can be. My agenda and tasks can be accessed from any file, and I can link to notes and important context from anywhere else. This ethos of using powerful text-processing tools to create powerful methods to link and generate text is everywhere in Org mode.

Pioneering ideas

Org mode has had literate programming capabilities, been able to export to other document formats, and benefitted from open source package contributions for a long time. This is, probably, in part because of its strong ties to Emacs’ own ethos of free software and flexibility. But these ideas can be seen in many related tools today, and Org mode has been spurring this innovation for years.

It is one of the few tools I have used that allows me to use it the way I want to without getting in my way. Yes, its complexity means time spent setting up your desired captures and agenda layouts. But tools like Org mode are a workshop for creating things and good workshops let you make the space yours.

More for you to explore

There are hundreds of Emacs packages that build on Org mode. And many pieces written about how to make use of Org mode for whatever your purpose might be. To end this post, I think it’s best to link some good resources that might be of interest to others.


Org mode involves a style of thinking about the way you organize your life. Like Emacs, Org mode allows you to develop a system that works for you without burdening you with configuring everything up front. When you begin to think about your working style and wonder “I would love to be able to do X, can I do that with Org mode?” the answer is almost always yes.

Org mode comes with a file format that makes sense with the things it tries to do. It has a set of commands to accomplish them in whatever way you want. It has a set of sensible macros and shortcuts to write, make tasks, and transfer information in useful ways that make sense.

Org mode is a Swiss Army knife of organization that grows with you. And because of that, I’ve become a big fan of it, and use it extensively.