org-modeをGTDに使う方法 #1


上図は2009年12月24日のスクリーンショットC-c a h コマンド結果の表示。

概要

実践方法

気になることを全て書出す(収集)
  • remember-mode を呼び出す (C-c r または F8)
  • Todo(GTD)か notes(日々のメモ)かを選ぶ。
    • 以下は週次レビューで行っても良い。
    • コンテクストタグを選ぶ(OFFICE, HOME, Web, CALL)
    • Todo の状態を選ぶ (TODO, STARTED, APPT, etc...)
    • 締切日を登録する。(C-c C-d
    • スケジュールを開始する。(Next Action に対応)(C-c C-s)
  • タスクを保存する。(C-c C-c)
日々の操作
  • タスクを確認する。以下のどの方法で良い。
    • 今日するべきことを確認する。 (C-c a d)
    • コンテクストでタスクを確認する。(C-c a h)
    • タイムライン上でタスクを確認する。(C-c a L)
  • タスクの TODO 状態を DONE などに変更する (C-c C-t)
  • 新しいスケジュールがあれば remember-mode (F8)で追加する。この場合TODOタグを APPT とする(C-c C-t)。
週次レビュー
  • org ファイルを開く。 (C-c g または [F7]
  • INBOX にたまったタスクを精査する。
  • フローチャートにしたがって行動する。
  • 適宜プロジェクトに分類する。(C-c C-w)
  • 適宜締切日を登録する。(C-c C-d
  • 適宜スケジュールを開始する日を登録する(Next Action に対応)(C-c C-s)

org-mode の設定

org-modeの設定は、(1).emacs における設定と (2)orgファイルの指示行による設定の2種類である。

ここでは、文献*1をベースに、改造をした。現在用いている設定を末尾に掲載する。日々のGTDの実践のなかで、使い易いように書き換えてゆけば良いと思う。

母艦以外のマシンからシームレスにアクセスする方法

Emacsにはtrampという素晴らしいプログラムが標準で用意されている。古株のEmacsユーザには周知だろうが、trampはあの愛すべきコードange-ftpsshなどの複数のメソッドに拡張したものである。trampを用いると、シームレスにリモートのファイルにアクセスすることができる。わざわざリモートマシンのHDDをマウントするほどではないが、シームレスにアクセスしたい場合に大変有効である。

org-mode において、trampを用いる方法はとても簡単である。母艦のorg-modeに関するemacs-lispの設定で、次のように設定してる箇所がある場合、

"~/org/foo.org"

上記を次のように機械的に置換すれば良い。

"/bokan.domain.jp/org/foo.org"

WindowsNTEmacsでは

"/plink:bokan.domain.jp/org/foo.org"

とするほうが良いかもしれない。これはNTEmacssshを直接呼べないために、plinkを用いてsshを話すための方法である。

org-mode の設定(詳細)

設定するべきファイルは次の通り

  • ~/.emacs
  • ~/elisp/org-mode.el
  • ~/org/gtd.org
  • ~/org/notes.grg
  • ~/org/someday.org
  • ~/org/birthday.org
Emacs-Lispによる設定( ~/.emacs

.emacs にはつぎのコードを書き、emacs 起動時に org-mode.el を読み込む。

(load "org-mode")
Emacs-Lispによる設定(~/elisp/org-mode.el)

org-mode.el の内容は次の通りである。文献で紹介されたいた .emacsを元にしている。

(custom-set-variables
  ;; custom-set-variables was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.
  ;; Your init file should contain only one such instance.
  ;; If there is more than one, they won't work right.
 '(auto-raise-tool-bar-buttons t t)
 '(auto-resize-tool-bars t t)
 '(calendar-week-start-day 1)
 '(case-fold-search t)
 '(org-agenda-files (quote ("~/org/birthday.org" "~/org/gtd.org")))
 '(org-agenda-ndays 7)
 '(org-agenda-repeating-timestamp-show-all nil)
 '(org-agenda-restore-windows-after-quit t)
 '(org-agenda-show-all-dates t)
 '(org-agenda-skip-deadline-if-done t)
 '(org-agenda-skip-scheduled-if-done t)
 '(org-agenda-sorting-strategy (quote ((agenda time-up priority-down tag-up) (todo tag-up))))
 '(org-agenda-start-on-weekday nil)
;;  '(org-agenda-todo-ignore-deadlines t)
;;  '(org-agenda-todo-ignore-scheduled t)
;;  '(org-agenda-todo-ignore-with-date t)
 '(org-agenda-window-setup (quote other-window))
 '(org-deadline-warning-days 7)
 '(org-export-html-style "<link rel=\"stylesheet\" type=\"text/css\" href=\"mystyles.css\">")
 '(org-fast-tag-selection-single-key nil)
 '(org-log-done (quote (done)))
 '(org-refile-targets (quote (("gtd.org" :maxlevel . 1) ("someday.org" :level . 1))))
 '(org-reverse-note-order nil)
 '(org-tags-column -78)
 '(org-tags-match-list-sublevels nil)
 '(org-time-stamp-rounding-minutes 5)
 '(org-use-fast-todo-selection t)
 '(org-use-tag-inheritance nil)
 '(unify-8859-on-encoding-mode t nil (ucs-tables)))

;; These lines only if org-mode is not part of the X/Emacs distribution.
(autoload 'org-mode "org" "Org mode" t)
(autoload 'org-diary "org" "Diary entries from Org mode")
(autoload 'org-agenda "org" "Multi-file agenda from Org mode" t)
(autoload 'org-store-link "org" "Store a link to the current location" t)
(autoload 'orgtbl-mode "org" "Org tables as a minor mode" t)
(autoload 'turn-on-orgtbl "org" "Org tables as a minor mode")

(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 nil)
(setq org-log-done t)
(setq org-agenda-include-diary nil)
(setq org-deadline-warning-days 7)
(setq org-timeline-show-empty-dates t)
(setq org-insert-mode-line-in-empty-file t)

(require 'org-install)

(autoload 'remember "remember" nil t)
(autoload 'remember-region "remember" nil t)

(setq org-directory "~/org/")
(setq org-default-notes-file "~/org/notes.org")
(setq remember-annotation-functions '(org-remember-annotation))
(setq remember-handler-functions '(org-remember-handler))
(add-hook 'remember-mode-hook 'org-remember-apply-template)
(define-key global-map "\C-cr" 'org-remember)

(setq org-remember-templates
     '(
      ("Todo" ?t "* TODO %^{やること} %^g\n%?\nAdded: %U" "~/org/gtd.org" "INBOX")
      ("Note" ?n "\n* %U %^{トピックス} %^g \n%i%?\n %a" "~/org/notes.org")
      ))

(define-key global-map [f7] 'gtd)
(define-key global-map [f8] 'remember)
(define-key global-map [f9] 'remember-region)

(setq org-agenda-exporter-settings
      '((ps-number-of-columns 1)
        (ps-landscape-mode t)
        (htmlize-output-type 'css)))

(setq org-agenda-custom-commands
'(
  ("p" "Projects"
   ((tags "PROJECT")))
  ("h" "Office and Home Lists"
   ((agenda)
    (tags-todo "OFFICE")
    (tags-todo "HOME")
    (tags-todo "WEB")
    (tags-todo "CALL")
    ))

  ("d" "Daily Action List"
   (
    (agenda "" ((org-agenda-ndays 1)
		(org-agenda-sorting-strategy
		 (quote ((agenda time-up priority-down tag-up) )))
		(org-deadline-warning-days 0)
		))))))

(setq org-todo-keywords '((sequence "TODO" "APPT" "STARTED" "DONE")))
(defun gtd ()
    (interactive)
    (find-file "~/org/gtd.org"))
(global-set-key (kbd "C-c g") 'gtd)

(add-hook 'org-agenda-mode-hook 'hl-line-mode)
orgファイルの設定(~/org/gtd.rog)

~/org/gtd.org は次のような感じである。文献で紹介されたorgファイルをベースにしている。ファイルの最後に org-modeの設定を書くための見出しを立てて、設定を不可視にしている。設定はファイルの先頭でなくても良い。

* INBOX
#+CATEGORY: INBOX

* Research
#+CATEGORY: Research

* Project A
#+CATEGORY: Project A

* Private
#+CATEGORY: Private

* Archive
#+CATEGORY: Archive

* org-mode configuration
#+STARTUP: overview
#+STARTUP: hidestars
#+STARTUP: logdone
#+PROPERTY: Effort_ALL  0:10 0:20 0:30 1:00 2:00 4:00 6:00 8:00
#+COLUMNS: %38ITEM(Details) %TAGS(Context) %7TODO(To Do) %5Effort(Time){:} %6CLOCKSUM{Total}
#+PROPERTY: Effort_ALL 0 0:10 0:20 0:30 1:00 2:00 3:00 4:00 8:00
#+TAGS: { OFFICE(o) HOME(h) WEB(w) DOWNTOWN(d) CALL(c) }
#+TAGS: PROJECT(p) READING(r)
#+TODO: TODO(t) STARTED(s) WAITING(w) APPT(a) | DONE(d) CANCELLED(c) DEFERRED(f)

スクリーンショットはこんな感じ。

orgファイルの設定(~/org/notes.org)
#+STARTUP: overview
#+STARTUP: hidestars
#+TAGS: OFFICE(o) RESEARCH(r) DIARY(d) BOOK(b) FILMS(f) IDEA(i) WEB(w) COMPUTER(c) 

* 記録とメモ
** [2009-04-23 木 18:53] ほげほげの メモ                                    :OFFICE:
orgファイルの設定(~/org/someday.org )

いつかやることを記すファイル。とくに設定はない。

* Someday
** 大金持ちになりたい。
** 富士山に登頂したい。
orgファイルの設定( ~/org/birthday.org)

予め決まっている日程を書くファイル。誕生日や祝日を記す。現在はとくに使っていない。

次回

次回のエントリーでは、org-modeをGoogleカレンダーにエクスポートする方法を紹介したい。Googleカレンダーの仕様が変則的なため、多少工夫が必要である。