more org improvements

I haven’t updated my org-mode system for a while. It’s been working great and I couldn’t come up with further improvements, at least that’s what I thought. Earlier this week though, I gave the org-mode manual another read and found a few additional gems that I’ve quickly added to my workflow.

Recap: My Current System

Before I got with what I’ve added, I need to recap my current workflow.

My method of doing projects in org-mode hasn’t changed since last year. The idea is simple: a project is a parent task with sub-tasks included. To define projects, I use the keyword ACTIVE. You can see an example in the link above which has a screenshot included.

The “Zettelkasten craze” and org-roam that took the org-mode community by a storm had me take a few long, hard looks into my system, but it only reinforced it. I’ve always found bullet-points lists helpful, and org-mode excels at breaking down lists. One thing I started to do more often is refiling other TODO items (tasks) into existing projects when needed. This sounds so trivial as I write it down here that I think most of you will miss the power in this system thinking “well, duh” so let me elaborate.

At work, our weekly meeting has transformed into daily meetings. This is mostly an ineffective way of taking a written idea and converting it to a confusing verbal explanation, just so it can be converted back into a written task1. There’s often a need to jot points down quickly and to organize later. Many times such points relate to an existing project I’m already working on, to serve as a reminder. My capture template contains a very simple TODO for these. It schedules whatever I capture to the time I’m creating the capture, so they immediately show on my agenda. Later in the day I refile them into their respective projects and schedule more accordingly2.

Say, for example, we’re switching DNS servers. The boss says he wants a report of all endpoints still pointing to the old DNS by the end of the day on our daily meeting. I will type this down quickly as “report of old DNS clients,” which will become a TODO task on my agenda. Later I will refile it as a sub-task under my “ACTIVE: DNS migration” project, complete with its own scheduled time and any additional notes I may want to include3.

As I work through these subtasks, I can split them further as well. Suppose I run the above report, and as it turns out, 11 desktops out of about 50 haven’t been communicating with the server in over a month - usually a sign the user is working from home and the office is locked, with the computer offline. I then create another task, next down in the project: “TODO bring up: email to users at home?”. Later still, since this is another TODO item, I might refile the whole thing under our next meeting event (which is a different event header already on my agenda the next day) to bring up the next day to discuss. Then I recall it the next day on our meeting, and then, depending on what we’re doing, I refile it back under the project with additional notes and possibly more TODO items.

How this looks like is not so important. What is important is to take a minute to think how essential is the refile function in this workflow, continuously moving between different headers in my org-mode file of that week4. The projects usually include other important info such as the ticket number, the user ID, the computer name, and location (these are all built into the capture template) to make them easier to find in the future. When this happens, I also recall not just the specific task, but the whole context it was in.

OK, so what did I change?

One long-time feature of org-mode I haven’t implemented until I re-read the manual is custom agenda searches. Every Monday, I have a reminder to look through my projects (“ACTIVE”) and I’d type away: C-a to bring the agenda dispatcher, T to search for a specific keyword, and then type A C T I V E and hit enter. Yep. Go ahead and laugh, that’s what I get for not going through the manual more often to be reminded of how effective org-mode can be.

The custom search setting for my projects is dead simple:

(setq org-agenda-custom-commands
  '(("A" todo "ACTIVE"))

That’s it, that’s all I have. Since I’m planning on coming up with other searches soon, I included the extra parenthesis in case I want to expand. This custom search quickly shows me what projects I currently have going. I’ve also eyed stuck projects on the manual, in my case headers marked “ACTIVE” that have no “TODO” sub-headers. Such projects either need to be completed (“DONE” or “CANCELED” for me) or that I need to define the next-action item (another “TODO” task). I borrowed the term “next-action” from GTD though I don’t use this system.

Structure (code ) Templates

In org-mode, we know bits of codes go between #+begin_src and #+end_src elements. I could swear there was a shortcut to create these in the past, something involving <, but I can’t remember what it was and it never worked for me.

Since 2019, I’ve been copy-pasting or writing the phrase “#+begin_src,” then copying it again and replacing “begin” with “end”. This included not just my code bits in my org setting file for Emacs, but also in this blog, every time I wrote a quote (#+begin_quote and #+end_quote ) here. Emacs is effective enough with various shortcuts so that getting around an issue like that is easy with a custom-made macro or a similar trick, so I got by. No more.

Turns out org-mode now includes the function org-insert-structure-template. C-c C-, brings up a menu with the structure templates I need, and it’s smart enough to know to wrap a highlighted section with the begin and end wrappers automatically. As it turned out, my org-mode at home was somewhat outdated, so this was a good excuse to re-build my Emacs to the latest stable release (since I learned how to build Emacs, I always install it this way).


  1. I hate meetings with passion. As a visual person who prefers writing (and org-mode) much more than verbal communications, I find these confusing, boring, irrelevant, and overall a complete waste of time. It seems the increase of these time-suck events to be one of COVID19’s unfortunate side effects. ↩︎

  2. A quick note about how I schedule things on my agenda. I use scheduling as a form of priority so that more important items are addressed “earlier” and float toward the top of the list. Only meetings (which have a keyword MEETING) have “hard time” which can’t be changed, and these just have a timestamp without the scheduled property, which also gives them a different color on my agenda. This way I can quickly see what are my hard-time events between my tasks items. ↩︎

  3. Keeping notes with inactive timestamps (timestamps that do not show on the agenda, with square brackets) under each task (header) has become a religious practice. Usually, these are quick “status reports” of no longer than a paragraph describing what I did and what I should do next. If I want to go into details or write something more personal, writing a journal entry with a link connecting directly to the header I’m on is a quick org-capture template away. ↩︎

  4. Another foundation of my system is my weekly org files. Each week gets an org file, created automatically with a script I’ve slightly tweaked over the last two years. This keeps my org files small and manageable. The list of files also looks nice and uniformed. ↩︎