Org GTD is an attempt to implement the GTD flow described in the GTD book as faithfully as possible.
This manual is for Org GtD version 2.0.
Copyright (C) 2018-{{{year}}} Aldric Giacomoni <[email protected]>You can redistribute this document and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This document is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
This package tries to replicate as closely as possible the GTD workflow (see diagram below).This package, and this documentation, assume familiarity with the flow of GTD as described in the book.
This package provides a system that allows you to capture incoming things into an inbox, then process the inbox and categorize each item based on the GTD categories. It leverages org-agenda to show today’s items as well as the NEXT items. It also has a simple project management system, which currently assumes all tasks in a project are sequential.
┌───────┐ │"STUFF"│ └──┬────┘ │ ┌──▼────┐ │IN BOX │ └──┬────┘ │ Eliminate ┌─────────┐ │ ┌────────────►│ Trash │ ┌───▼───────┐ │ └─────────┘ │What is it?│ │ └───┬───────┘ │ ┌─────────┐ │ │ Incubate │ Someday/│ │ ├────────────►│ Maybe │ ┌──────────┐ YES (Multi-Step) ┌────▼────────┐ NO │ └─────────┘ │ Projects │◄─────────────────────┤ Is it ├────┤ └─┬────▲───┤ │ Actionable? │ │ File ┌─────────┐ │ │ └────────────────────┐ └──────┬──────┘ └────────────►│Reference│ │ │ Review for Actions│ │ └─────────┘ ┌─▼────┴───┐ │ │YES │ Planning │ └───────►│ └──────────┘ │ ┌──────▼─────┐ Less than Delegate │ What's the │ 2 minutes ┌────────┐ ┌────────────┤Next Action?├──────────────────►│ DO IT │ │ └───────┬────┘ └────────┘ │ │ │ │ FOR ME │ │ Specific Date or Time │ ├────────────────────────────┐ │ ASAP │ │ ┌────▼─────┐ ┌──▼───────┐ ┌─────▼────┐ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └──────────┘ └──────────┘ └──────────┘ Waiting For Next Actions Calendar
- rename CANCELED to CNCL
This package is on MELPA and MELPA stable under the name org-gtd
.
Just make sure this is loaded after org-mode
like so.
(use-package org-gtd :after org)
Check out the source code for dependencies and install them.
Then, clone this repo to a directory of your choice, e.g. ~/.emacs.d/packages
.
Finally, add this to your config:
(add-to-list 'load-path "~/.emacs.d/packages")
(require 'org-gtd)
Just turn on org-gtd-mode
(M-x org-gtd-mode
). This will set up emacs, Org mode, and Org GTD’s dependencies. Turn off org-gtd-mode
to restore emacs to pre-org-gtd settings.
Note, you should still head over to the *Recommended key bindings section.
package: https://www.nongnu.org/org-edna-el/
This is one of the dependencies. This setting change is REQUIRED. It automatically changes the next TODO heading to NEXT in a project when you’ve finished the current task.
You do not need to make this change if you choose to toggle org-gtd-mode
.
(setq org-edna-use-inheritance t)
(org-edna-mode 1)
The most direct way to find out about the configuration options for org-gtd is to see the customize group: M-x customize-group RET org-gtd
. They are all optional because they all come with default values.
The only one you may want to change before starting to use Org GTD is org-gtd-directory
, which is the directory that Org GTD
will look to for everything it needs to do.
The configuration options will also be mentioned in the relevant subsections of *Using Org GTD.
There’s an important keymap you’ll want to make the flow of processing the inbox smoother. To limit impact on your emacs configuration, there is a specific keymap you can use. The function you’ll want to bind is org-gtd-choose
. I suggest C-c c
, as in the following example.
(define-key org-gtd-process-map (kbd "C-c c") #'org-gtd-choose)
The GTD flow can be roughly split into a top-level steps. I suggest using "C-c d"
as a key chord for these in the global keymap.
First, capture into the inbox. :
- org-gtd-agenda-cancel-project
- org-gtd-agenda-delegate
- org-gtd-agenda-projectify
- org-gtd-cancel-project
- org-gtd-delegate
- org-gtd-agenda-daily
- org-gtd-show-all-next
- org-gtd-show-stuck-projects
(("C-c d c" . org-gtd-capture)
("C-c d a" . org-agenda-list)
("C-c d p" . org-gtd-process-inbox)
("C-c d n" . org-gtd-show-all-next)
("C-c d s" . org-gtd-show-stuck-projects))
;; this is used in a very specific minor mode, so you can have a pretty common keybinding.
:bind (:map org-gtd-process-map
("C-c c" . org-gtd-clarify-finalize))
Here are the categories of actions from GTD that we have to be able to handle:
- adding things to the inbox
- processing the inbox
- accessing NEXT and scheduled actions
- cleaning up / archiving completed work
Other elements of GTD, such as reviews, are currently unimplemented: as the user, you can simply open the files to review things for now.
The inbox is a file called inbox.org
in the directory stored in the variable org-gtd-directory
. By default this variable is ~~/gtd~.
Org GTD provides one function to capture items: M-x org-gtd-capture
. In my setup I have this booked globally as such:
(global-set-key "C-c d c" #'org-gtd-capture)
This function overrides org-capture
and uses the variable org-gtd-capture-templates
to define org-gtd-specific capture templates. By default it comes with two templates, one to just capture a new item, and one to capture an item with a link to the file where you were when you started the capture.
Processing the inbox means taking everything in the inbox, one at a time, and refining/categorizing them so they are instantly useful when you are looking at available next / scheduled actions.
You can start processing the inbox with org-gtd-process-inbox
. This will select the inbox buffer and hide everything but the first item in the inbox, then give you control to refine it.
When you are done refining it, call M-x org-gtd-choose
(or hit your keybinding for it, see *Recommended key bindings). This will open a transient menu to let you choose how Org GTD should categorize this item.
You have a number of possible choices for each item you process. Subsections will explain how Org GTD handles each one.
- [Q]uick Action
- Quick action. Do it now, then choose this to mark the item as DONΕ and archive it.
- [T]rash
- This is not actionable and it’s not knowledge for later. Choose this to mark the item as CNCL and archive it.
- [P]roject
- This is a multi-step action. I’ll describe how to handle these below.
- [C]alendar
- This is a single item to be done at a given date or time. You’ll be presented with org-mode’s date picker, then it’ll refile the item. You’ll find this in the agenda later.
- [D]elegate
- Let someone else do this. Write the name of the person doing it, and choose a time to check up on that item.
- [S]ingle action
- This is a one-off to be done when possible.
- [A]rchive
- This is knowledge to be stored away.
- [I]ncubate
- no action now, review later
In addition you have [X] for “exit early”, which you can use to stop processing the inbox and restore emacs to its non-inbox-processing state.
After the item-type-specific behavior, you will have the option to add custom decorations to each item, based on how you prefer to think about (filter, find, etc.) the items when you do GTD.
The decorations are tracked in org-gtd-process-item-hooks
, a list of functions. By default there is one element in the list, to add tags to the item.
This process will continue, item after item, until you hit x to exit early or until you run out of items to process.
A “project” is defined as a top-level org heading with a set of second-level org headings. When you choose “project” and enter the editing mode, create such a headline structure, like in the following example.
As indicated above, when you are finished creating your headline structure, hit your chosen keybinding to exit the edit mode (in the above screenshot, C-c c
) and move on to processing the next item.
A project is defined as “completed” when all its tasks are marked as DONE. A project is defined as “canceled” when its last task is marked as CNCL.
You can cancel a project by calling org-gtd-agenda-cancel-project
from the agenda view, when the point is on the next task of the project.
DO NOTE: it is surprisingly difficult to add a custom note when canceling, so if you want to add a note explaining why you canceled the project, you will have to do so manually.
You can archive (move to the archive file, using the org-mode feature) completed and canceled projects by using org-gtd-archive-completed-items
.
Here’s what the agenda may look like when you’ve processed the inbox a bit.
One of the ways to see what’s next for you to do is to see all the next actions ( C-c d n
).
Doing this without user intervention is tricky, as it makes undoing actions more complicated. As such, Org GTD provides a function that will go through the org-gtd-directory
files, find the headings that belong to Org GTD (see *Multiple files / refile targets), and archive the finished items.
The variable org-gtd-archive-location
hosts a function that returns a string matching the org-archive-location
definition. It is a function in order to make the filename entirely dynamic.
The function to archive everything is M-x org-gtd-archive-completed-items
.
If you would like to add new refile targets, it’s simple. Add a top-level heading and make sure it has the following properties drawer.
:PROPERTIES:
:TRIGGER: next-sibling todo!(NEXT)
:ORG_GTD: Projects
:END:
Sometimes things break. Use C-c d s
to find all projects that don’t have a NEXT item, which is to say, all projects that the package will not surface and help you finish.