Using categories to organize your Org agenda

Posted: - Modified: | emacs, org

D.C. Toedt wanted to share this tip for Org Mode agenda organization:

I've just discovered that it helps to add a :CATEGORY: property to the top-level, non-TODO heading that identifies the project.  Using your example:

* Project ABC
  :PROPERTIES:
  :CATEGORY: ABC
  :END:

** TODO A task related to Project ABC
** TODO Another task related to ABC
*** TODO Subtask
SCHEDULED: 

In my bog-standard org-mode setup, this results in “ABC” being displayed in the far-left column of the agenda instead of just “todo” (which seems to be the default). This is great — it means that, in the text of the “Subtask” todo entry itself, I don't need to include a reminder of what project the todo entry is associated with.

Here's an agenda mockup to illustrate the point, augmented with a “default” entry from my own to-do list:

  todo:       Scheduled:  Follow up on expense reimbursement request
  ABC:        Scheduled:  Subtask

This also allows filtering the agenda by the category.


Thanks for sharing, D.C.!

The category actually defaults to the first part of your filename.org, so todo.org becomes todo, organizer.org becomes organizer, etc. I keep an organizer.org, routines.org, business.org, etc. Keeping my routine tasks in routines.org allows me to filter them with a custom agenda command like:

            ("w" "Weekly review" agenda ""
             ((org-agenda-span 7)
              (org-agenda-log-mode 1)) "~/Dropbox/agenda/this-week.html")

            ("W" "Weekly review sans routines" agenda ""
             ((org-agenda-span 7)
              (org-agenda-log-mode 1)
              (org-agenda-tag-filter-preset '("-routine"))) "~/Dropbox/agenda/this-week-nonroutine.html")

so that I can see all the tasks (including routine tasks) in my regular weekly review, and just the special stuff in a separate view. You can see the whole definition of org-agenda-custom-commands in my Emacs configuration.

Update 2016-12-18: Oops! I just remembered that filtering by -routine is actually made possible by the #+FILETAGS: :routine: I have in routines.org, which has the additional benefit of allowing me to mark tasks in other files as routine by adding the :routine: tag to them. You can, however, still use categories to filter your agenda. < (org-agenda-filter-by-category) in an agenda view will filter by category, or use a match filter like CATEGORY="routines" to match on the category. Also, it turns out you can set up category icons by customizing org-agenda-category-icon-alist – hmm…

D.C.'s tip is handy if you want to keep those groups of tasks in one file, but still want that kind of visual indication in your agenda (and the ability to filter by it).

Have fun!

You can comment with Disqus or you can e-mail me at sacha@sachachua.com.