Using Org Mode with GTD

Both Org Mode and Planner Mode are really neat ways to maintain a schedule, and almost sufficient reason to use Emacs in and of themselves. I’ve tried them both, and have found that Org Mode integrates easier with the way that I prefer to work.

Make sure you see the Org Tutorial and the excellent GTD with Org Mode site. What follows are just some quick notes for a particular configuration that worked for me.

First of all, be sure to set up your .emacs as recommended in the aforementioned Org tutorial:

(add-to-list 'load-path "~/emacs/org")
(require 'org)
(add-to-list 'auto-mode-alist '("\\.org$" . org-mode))
(define-key global-map "\C-cl" 'org-store-link)
(define-key global-map "\C-ca" 'org-agenda)
(setq org-log-done t)

I prefer to have my personal and work stuff in separate files, with a master file that points to all of them. This makes it easier for me to concentrate on only work when I’m at work, so…

(setq org-agenda-files 
      (list "~/org/gtd.org" "~/org/work.org" "~/org/personal.org"))
Each .org file has the following header:
#+TAGS: WORK (or whatever)
#+TYP_TODO: TODO MAYBE WAITING NEXT DONE
#+STARTUP: showall
#+STARTUP: hidestars
Finally, some configuration tweaks that work for me:
; I prefer return to activate a link
(setq org-return-follows-link t)
 
(setq org-agenda-custom-commands 
    '(("w" todo "WAITING" nil) 
    ("n" todo "NEXT" nil)
    ("d" "Agenda + Next Actions" ((agenda) (todo "NEXT"))))
)
 
(defun gtd ()
   (interactive)
   (find-file "~/org/gtd.org")
)

Daily

Now, to see the day’s agenda, you can do C-c a for an overall agenda. While at work, I have the work.org file in a buffer window; to see what I’m working on, I go to the work.org file and do a C-c a 1 followed by C-a d. This a) narrows the task list to those in work.org, and b) shows me all scheduled tasks and all tasks that are marked as “NEXT.”

Weekly

At the end of every week I go through the different files and use the Org Mode archive stuff. Sometimes I move it into an archive file, sometimes I don’t; it kind of depends how many other things are going on with that particular project.

Miscellaneous

I keep all my organization stuff on a USB drive, and for convenience also have links to encrypted files that I might need to refer to from time to time. I keep bcrypt on the USB drive, and added the following Elisp hack:

(defun open-encrypted-file (fname)
  (interactive "FFind file: \n")  
  (let ((buf (create-file-buffer fname)))
    (shell-command 
     (concat "echo " (read-passwd "Decrypt password: ") " | bcrypt -o " fname)
     buf)
    (set-buffer buf)
    (kill-line)(kill-line)
    (toggle-read-only)
    (not-modified))
  )
And, with an Elisp link in my gtd.org, I can easily see my passwords:
[[elisp:(open-encrypted-file "~/org/passwords.txt.bfe")][Passwords]]

18 thoughts on “Using Org Mode with GTD

  1. Pingback: links for 2007-03-31 « tkablog

  2. Pingback: FZ Blogs » Zaman Yönetimi: Getting Things Done ve Do It Tomorrow - Az, Öz ve Hedefe Yönelik

  3. Gour

    Hi!

    I’m starting with GTD & Emacs and like your approach to have two separate files for specific area.

    Added some specific TAGS to my headers, but I wonder how do you use gtd.org as master, i.e. gtd() function invokes gtd.org so I’d like to know if you can enlighten me a bit with your usage of gtd.org master file?

    Sincerely,
    Gour

    Reply
  4. tim Post author

    @Gour: Sure. My gtd.org just refers to the other files — it gives me a simple way of categorizing the different things. For example, my gtd.org is:

    #+STARTUP: showall
    #+STARTUP: hidestars

    [[file:work.org][Work]]
    [[file:personal.org][Personal]]

    [[file:notes.org][Notes]]

    [[elisp:(open-encrypted-file "~/org/contacts.txt.bfe")][Contacts]]
    [[elisp:(open-encrypted-file "~/org/notes.txt.bfe")][Notes]]
    [[elisp:(open-encrypted-file "~/org/passwords.txt.bfe")][Passwords]]

    Reply
  5. joost

    Hi, I see that you use orgmode and an iPhone. How do you integrate the use of an iPhone with orgmode? I’d be happy to see an Emacs port to iphone, but maybe a lightweight interface wich generates orgmode transactions is a better idea.
    regards,
    Joost

    Reply
  6. Dawson

    Love the idea for the encrypted files. Got it running just find but I did have to make a minor modification. In the line:
    (concat “echo ” (read-passwd “Decrypt password: “) ” | bcrypt -o ” fname)

    I had to remove the space before the pipe as that space was getting sent to bcrypt and I was getting a message that I had supplied the wrong key. I did this on XP with gnu emacs 22.1.1. Maybe when I try it on the linux box later that won’t come up.

    Thanks for the tip.

    Reply
  7. Georg Greve

    Very nice setup, thanks a lot.

    The encrypted files is a neat hack.

    Here is my “super lazy” setup, which people might find informative:

    I use my Fellowship crypto card (see http://fellowship.fsfe.org/card) which is an OpenPGP compliant card and hooks into GnuPG (also available here: http://www.g10code.de/p-card.html). My files are encrypted with GnuPG and with the help of a properly configured GnuPG agent in the background there is no need for passwords anymore.

    As long as the smart card is inserted and the GPG agent knows the PIN, the standard Emacs “find-file” command will transparently decrypt and open the file with no intervention on my side.

    Once I take out the card, there is no way to read the file.

    (Naturally I also use the card for email signing & decryption, as well as SSH authentication.)

    Reply
  8. Viona

    Hi, thank you for these tips.

    I am trying to install personal reference system.
    The one thing that irritates me, it’s when I make a link to elisp like [elisp:(dired "~/prog/cc")] it works just fine BUT
    aquamacs always prompts me if I want to execute elisp.

    If you had the same issue, do you have an idea how to get rid of it?

    Thank you!

    Reply
  9. Viona

    upd: it seems it suffices to add this to .emacs (or Preferences file in Aquamacs)

    (setf org-confirm-elisp-link-function nil)

    But thanks anyway for some ideas!

    Reply
  10. Ben Alexander

    It looks like your ‘default setup has a bug’

    Shouldn’t

    (define-key global-map “C-cl” ‘org-store-link)
    (define-key global-map “C-ca” ‘org-agenda)

    be

    (define-key global-map “\C-cl” ‘org-store-link)
    (define-key global-map “\C-ca” ‘org-agenda)

    with a backslash in front of the C-c?

    (Of course, I’ve no idea if the backslash will show up in this comment, so I’m going to look dumb if it’s missing!)

    Reply
  11. Pingback: Recent Links Tagged With "bcrypt" - JabberTags

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">