This package tries to replicate as closely as possible the GTD workflow (see diagram below).
Image courtesy of https://xebia.com/blog/peace-of-mind-in-a-state-of-overload/gtd_chart/
This package, and this readme, assume familiarity with GTD. There are many resources out there to learn how to use the framework. If you are new to GTD, this package may be unpleasant to use.
I will assume you have used the suggested keybindings below.
GTD uses one basic axiom: everything that comes your way goes into the inbox. You do this with C-c d c
. You also have to regularly process the inbox, which you do with C-c d p
.
You have a number of possible choices for each item you process, which I will quickly go over. When you process the inbox, you will see each inbox item, one at a time, with an interface letting you decide what to do with the item (shown below with C-h
for extra information):
- Quick Action
- You’ve taken care of this action just now. Choose this to mark the item as DONΕ and archive it.
- Throw out
- This is not actionable and it’s not knowledge for later. Choose this to mark the item as CANCELED and archive it.
- Project
- This is a multi-step action. I’ll describe how to handle these below.
- Calendar
- 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.
- Delegate
- Let someone else do this. Write the name of the person doing it, and choose a time to check up on that item.
- Single action
- This is a one-off to be done when possible. You can add tags to help you.
- Reference
- This is knowledge to be stored away. I’ll describe how to handle these below.
- Incubate
- no action now, review later
When processing each item, the following will happen:
- You’ll enter an editing mode where you can refine the wording, create additional sub-headlines, add your own tags and other such metadata
- You’ll hit a keybinding of your choice (recommended:
C-c c
, see config below) to confirm your work and move on to the next item - when you move on to the next item,
org-gtd
will add keywords (NEXT, TODO, DONE, etc.) in order to handle the bookkeeping and get you set up with org-agenda and the other provided org-gtd functions.
A “project” is defined as an org heading with one set of children headings (similar to this readme’s structure).
When you choose “project” and enter the editing mode, create such a headline structure - see example, replace the -
with *
.
As indicated above, hit your chosen keybinding to exit the edit mode and move on to processing the next item.
- project name
- first task
- second task
- last task
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
).
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.
This package requires emacs 26.1 or higher.
Follow directions to get MELPA / MELPA stable as a source, then:
(use-package org-gtd
:after org
:pin melpa-stable)
(use-package org-gtd
:after org
:straight (:host github :repo "trevoke/org-gtd.el" :branch "master"))
Check out the source code for dependencies and install them.
Then, clone this repo to ~/.emacs.d/packages
Finally, add this to your config:
(add-to-list 'load-path "~/.emacs.d/packages")
(require 'org-gtd)
For your convenience, here’s a commented elisp code block, assuming you are using (use-package)
.
(use-package org-gtd
:after org
:pin melpa-stable ;; or :pin melpa as you prefer
:demand t ;; without this, the package won't be loaded, so org-agenda won't be configured
:custom
;; where org-gtd will put its files. This value is also the default one.
(org-gtd-directory "~/gtd/")
;; package: https://github.com/Malabarba/org-agenda-property
;; this is so you can see who an item was delegated to in the agenda
(org-agenda-property-list '("DELEGATED_TO"))
;; I think this makes the agenda easier to read
(org-agenda-property-position 'next-line)
;; package: https://www.nongnu.org/org-edna-el/
;; org-edna is used to make sure that when a project task gets DONE,
;; the next TODO is automatically changed to NEXT.
(org-edna-use-inheritance t)
:config
(org-edna-load)
:bind
(("C-c d c" . org-gtd-capture) ;; add item to inbox
("C-c d a" . org-agenda-list) ;; see what's on your plate today
("C-c d p" . org-gtd-process-inbox) ;; process entire inbox
("C-c d n" . org-gtd-show-all-next) ;; see all NEXT items
("C-c d s" . org-gtd-show-stuck-projects)) ;; see projects that don't have a NEXT item
:init
(bind-key "C-c c" 'org-gtd-clarify-finalize)) ;; the keybinding to hit when you're done editing an item in the processing phase
(use-package org-agenda
:ensure nil ;; this is how you tell use-package to manage a sub-package
:after org-gtd ;; because we need to add the org-gtd directory to the agenda files
;; use as-is if you don't have an existing org-agenda setup
;; otherwise push the directory to the existing list
(org-agenda-files `(,org-gtd-directory))
;; a useful view to see what can be accomplished today
(org-agenda-custom-commands '(("g" "Scheduled today and all NEXT items" ((agenda "" ((org-agenda-span 1))) (todo "NEXT"))))))
(use-package org-capture
:ensure nil
;; note that org-gtd has to be loaded before this
:after org-gtd
:config
;; use as-is if you don't have an existing set of org-capture templates
;; otherwise add to existing setup
;; you can of course change the letters, too
(setq org-capture-templates `(("i" "Inbox"
entry (file ,(org-gtd--path org-gtd-inbox-file-basename))
"* %?\n%U\n\n %i"
:kill-buffer t)
("l" "Todo with link"
entry (file ,(org-gtd--path org-gtd-inbox-file-basename))
"* %?\n%U\n\n %i\n %a"
:kill-buffer t))))