Org-mode And GTD
1 序章
Getting Things Done 中文翻译本《尽管去做:无压工作的艺术》是美国的商业顾问David Allen提倡的一种提高生产效率的系统。 利用GTD可以缓解压力,使心情平静,专心地工作,学习。(如果之前没有这么做过的话,是需要一段的时间训练才能掌握的。)
David Allen的第二部著作Ready for Anything 中文翻译本《结果第一:平衡工作和生活的52条原则》。 戴维从一个更宽泛的角度来看待工作与生活的平衡问题,不只是局限于GTD。
然而,这些我都没有看过。
如果想高效地使用GTD系统需要掌握以下的方法
- 系统 中收集你所关心的和必须要做的所有事情。这个系统包括物理的实体(或者可以表现的东西),纸,E-Mail,邮件,笔记等。
- 准备一个 收集箱 放入任何关心的内容。收集箱可以是一个文件盒,邮件客户端程序,语言邮件或者是一个笔记本等。
- 定期地将关心的事情收集整理的 工作流。通常需要每天执行。
- Next Action(下一步的工作)阶段,为了容易地执行任务,用明确的动词定义目地和行为。
- 基于具体的情境(Contexts),时间等,在合适的分类构造中组织管理提示和信息。这样的系统结构中包含日历,备忘录,文件整理系统等。
- 大概每天或者一周一次回顾,从而保证你的“委托”和“任务”保持最新状态。
- 定义并执行项目,自然而然地形成一个任务计划模型。
掌握好上面的要义,然后严格要求去执行即可。你的生活会变得“美好”。
2 最简单的方式
邮箱+日历,其实就是最简单的GTD工具。 看一下邮箱的设计,一个Inbox,就是用来放所有信息的地方,收集到的信息全部汇总到这里。 然后定期的维护这个收件箱,将关心的事情整理,组织成工作流,录入到日历中去。 接下来顺着日历的时间顺序拿出任务执行。很自然的形成Next Action。 到一定阶段,回顾之前的任务,整理消化进入下一个循环。
上面这个循环就是一个很标准的GTD循环。所以,你看,善于利用现有的工具就可以管理起来你的时间。
3 加点高级功能
在GTD的概念中还有一个概念,情景(Contexts)。那这个我们怎么来实现呢?这个可以使用Tags的方式实现,创建这些标签:
- Studio 工作室,公司等工作场景下
- Home 在家或者自己空闲的时候安成的工作。
- Tourism 外出旅游等需要做好的前期、中期、后期任务等
- Computer 需要计算机完成的任务,毕竟互联网公司
- Reading 早餐,上班路上,闲暇时候阅读书籍,杂志,网站等
- Lunchtime 中午午休时间等休息的时候完成的任务,起了一个
可愛い
的名称 - Project 为了表示我所参与的项目,项目的标题部分添加标签。
- Mail 需要特别注意的邮件
标签不要创建太多,够用就行,上面就是我所创建的标签(情景)。(貌似也是挺多的啊。哈哈哈)。 创建完成之后,在创建任务的时候加上这些标签就可以啦 :P
还有其他的高级功能就是搜索、迅速创建任务的功能(避免打断任务流)等。 搜索的话,邮箱应该都会有,看各家厂商的实力了。迅速创建任务,这个可以用记事本、便签纸、提醒事项等等软件来记录。
我觉得,如果熟练掌握上面的软件,并且理解了GTD的精髓,知道如何合理运用时间、分配、组织任务。 那,我相信你的工作将会是井井有条的,你的家人会更加的爱你,你的上司会更加的赏识你。
4 我的方案
我的方案的话还是一如既往的Emacs了。Emacs有一个强大的模式 Org-mode (本文的主角之一)。 而上面我所说的一切都是在Emacs中配置一份而已。配合emacs强大的编辑功能,让人爱不释手。
不过刚开始配置的时候,一点头绪都没有,然后看到别人“浩如烟海”的配置代码时,内心是崩溃的。 靠着不靠谱的英语和匮乏的中文资料,开始了这一趟旅程。
最后我简化了一些配置,先以最小子集来试行一段时间。
4.1 文件结构
/GTD |-- newgtd.org ;; main org file: Tasks Idea Someday/Maybe |-- newgtd.org_archive ;; archive file |-- reading.org ;; reading list |-- projects |-- A.org `-- B.org `-- remember.org ;; capture quickly
4.2 一些配置
4.2.1 主要的Tags(情景)
(setq org-tag-alist '(("STUDIO" . ?s) ;; company studio office ("PROJECT" . ?p) ;; difference task at company ("HOME" . ?h) ;; home ("MAIL" . ?m) ;; mail somebody ("LUNCHTIME" . ?l) ;; breakfast lunchtime dinner onway etc. (rest) ("TOURISM" . ?t) ;; tourism or not at home/company and any where ("COMPUTER" . ?c) ;; ("FIELD" . ?f) ("READING" . ?r))) ;; reading
4.2.2 任务的状态
(setf org-todo-keyword-faces '(("NEXT" . (:foreground "yellow" :background "red" :bold t :weight bold)) ("TODO" . (:foreground "cyan" :bold t :weight bold)) ("STARTED" . (:foreground "springgreen" :bold t :weight bold)) ("CANCELLED" . (:foreground "#DC143C" :bold t :weight bold)) ("WAITING" . (:foreground "yellow" :bold t :weight bold)) ("DEFERRED" . (:foreground "deepskyblue" :bold t :weight bold)) ("DONE" . (:foreground "gray50" :background "gray30"))))
4.2.3 常用操作
(global-set-key "\C-cl" 'org-store-link) (global-set-key "\C-ca" 'org-agenda) (global-set-key "\C-cg" 'gtd) (global-set-key "\C-cc" 'org-capture)
4.3 操作流
任务被我分成4类:重要紧急、重要不紧急、不重要不紧急、不重要但紧急。查阅相关资料( zhihu:20247508 )之后理解成这个,仅供参考:
- 重要紧急:救火
- 重要不紧急:规划
- 不重要但紧急:琐事
- 不重要不紧急:休闲
对于重要不紧急,我一般一天刚开始的时候,会 C-c a a
看一下今天需要做什么任务。
做完任务之后,我会 C-c C-x a
暂时将这个任务归档。
等到周末的时候(一般以7天为一周期进行回顾),再通过 C-c C-x C-a
一次性全部归档。
规划、项目等需要长期执行的任务,也是通过 gtd-org 来完成。
如果在工作的时候突然有什么紧急需要被打断,或者有什么新的点子,我会 C-c c
捕捉这个放到 remember.org 中去。
之后在做完任务之后去整理一下。
当然重要紧急任务的话,还是会中断当前的任务,切换过去做这个任务。这个就是去救火了。
对于琐事(交话费等)的话,我一般用Reminder这款软件来记录,就是一堆to-do list。
休闲就没有什么可以记的了,“遵从”本性。
完整配置
;;; dto-org-gtd.el --- dto's org-mode configuration for GTD ;; Copyright (C) 2007 David O'Toole ;; Author: David O'Toole(require 'org) <dto@gnu.org> ;; Modifier: Junjia Ni (creamidea@gmail.com, 2015) ;; Keywords: tools ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 3, or (at your option) ;; any later version. ;; This file 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. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. ;;; Commentary: ;; There are several articles about using GTD (GettingThingsDone) with ;; OrgMode. I'm publishing mine as an Emacs Lisp source ;; file. ;; This is a very basic example org-and-gtd setup. It's also my real ;; configuration, so you can load it yourself or just take a few ;; pieces. ;;; Code: (require 'org) (setq gtd-path "~/Documents/GTD") ;; I have a nice Wacom tablet, so I like to use the mouse. Org-mouse ;; adds various clickable menus to org-mode constructs. (require 'org-mouse) ;; I want files with the extension ".org" to open in org-mode. ;; (add-to-list 'auto-mode-alist '("\\.org$" . org-mode)) ;; I keep almost everything in one big org file. ;; I open my gtd file when I hit C-c g (defvar org-gtd-file (concat gtd-path "/newgtd.org")) (defun gtd () "Open the GTD file." (interactive) (find-file org-gtd-file)) ;; Some basic keybindings. (global-set-key "\C-cl" 'org-store-link) (global-set-key "\C-ca" 'org-agenda) ;; (global-set-key "\C-cr" 'org-remember) (global-set-key "\C-cg" 'gtd) (global-set-key "\C-cc" 'org-capture) ;; This seems like a good basic set of keywords to start out with: (setq org-use-fast-todo-selection t) ;; (setq org-todo-keywords '((type "TODO" "NEXT" "WAITING" "DONE"))) (setq org-todo-keywords (quote ((sequence "TODO(t!)" "NEXT(n)" "|" "DONE(d@/!)") (sequence "PROJECT(p)" "|" "DONE(d!/!)" "CANCELLED(c@/!)") (sequence "WAITING(w@/!)" "HOLD(h)" "|" "CANCELLED(c@/!)") (sequence "SOMEDAY(s)")))) ;; Some projects need their own org files, but I still want them to ;; show up in my agenda. (defvar org-gtd-other-files) (setf org-gtd-other-files (list (concat gtd-path "/projects/third-part-monitor.org") (concat gtd-path "/remember.org") (concat gtd-path "/reading.org"))) (setf org-agenda-files (cons org-gtd-file org-gtd-other-files)) ;; (setq org-agenda-files (list "~/Documents/GTD/project")) ;; When I'm using org to track issues in a project, I use these ;; keywords on a file-local basis: ;; #+SEQ_TODO: TODO | DONE ;; #+SEQ_TODO: REPORT BUG KNOWNCAUSE | FIXED ;; #+SEQ_TODO: | CANCELLED ;; The lisp version is: ;; (setq org-todo-keywords '((sequence "TODO" | "DONE") ;; (sequence "REPORT" "BUG" "KNOWNCAUSE" | "FIXED") ;; (sequence | "CANCELLED"))) ;; Easy basic searches. Get a quick view of nextactions, etc (setq org-agenda-custom-commands '(("w" todo "WAITING" nil) ("n" todo "NEXT" nil) ("d" "Agenda + Next Actions" ((agenda) (todo "NEXT"))))) ;; I use org's tag feature to implement contexts. (setq org-tag-alist '(("STUDIO" . ?s) ;; company studio office ("PROJECT" . ?p) ;; difference task at company ("HOME" . ?h) ;; home ("MAIL" . ?m) ;; mail somebody ("LUNCHTIME" . ?l) ;; breakfast lunchtime dinner onway etc. (rest) ("TOURISM" . ?t) ;; tourism or not at home/company and any where ("COMPUTER" . ?c) ;; ("FIELD" . ?f) ("READING" . ?r))) ;; reading ;; I like to color-code task types. (setf org-todo-keyword-faces '(("NEXT" . (:foreground "yellow" :background "red" :bold t :weight bold)) ("TODO" . (:foreground "cyan" :bold t :weight bold)) ;; ("TODO" . (:foreground "cyan" :background "steelblue" :bold t :weight bold)) ("STARTED" . (:foreground "springgreen" :bold t :weight bold)) ("CANCELLED" . (:foreground "#DC143C" :bold t :weight bold)) ("WAITING" . (:foreground "yellow" :bold t :weight bold)) ;; ("WAITING" . (:foreground "yellow" :background "magenta2" :bold t :weight bold)) ("DEFERRED" . (:foreground "deepskyblue" :bold t :weight bold)) ("DONE" . (:foreground "gray50" :background "gray30")))) ;; I put the archive in a separate file, because the gtd file will ;; probably already get pretty big just with current tasks. (setq org-archive-location "%s_archive::* Archive") ;; Remember support. This creates several files: ;; ;; ~/todo.org Where remembered TODO's are stored. ;; ~/journal.org Timestamped journal entries. ;; ~/remember.org All other notes ;; and a keybinding of "C-c r" for making quick notes from any buffer. ;; These bits of Remembered information must eventually be reviewed ;; and filed somewhere (perhaps in gtd.org, or in a project-specific ;; org file.) The out-of-sight, out-of-mind rule applies here---if I ;; don't review these auxiliary org-files, I'll probably forget what's ;; in them. ;; (add-to-list 'load-path "~/.emacs.d/package/remember-el") ;; (require 'remember) ;; move sub-tree from one file to another (setq org-refile-use-outline-path 'file) (setq org-refile-targets '((org-agenda-files :level . 1))) (setq org-reverse-note-order t) ;; note at beginning of file by default. (setq org-default-notes-file (concat gtd-path "/remember.org")) (setq org-capture-templates '(("t" "Todo" entry (file+headline (concat gtd-path "/newgtd.org") "Tasks") "* TODO %?\n %i\n %a\n") ("i" "Idea" entry (file+headline (concat gtd-path "/newgtd.org") "Idea") "** %?\n %T\n %a\n") ("j" "Journal" entry (file+datetree (concat gtd-path "/journal.org")) "* %?\nEntered on %U\n %i\n %a\n"))) ;; (setq remember-annotation-functions '(org-remember-annotation)) ;; (setq remember-handler-functions '(org-remember-handler)) ;; (add-hook 'remember-mode-hook 'org-remember-apply-template) ;; (setq org-remember-templates ;; `((?t "* TODO %?\n %i\n %a" ,(concat gtd-path "/todo.org")) ;; (?j "* %U %?\n\n %i\n %a" ,(concat gtd-path "/journal.org")) ;; (?i "* %^{Title}\n %i\n %a" ,(concat gtd-path "/remember.org") "New Ideas"))) ;; (global-set-key "\C-cr" 'org-remember) ;; (global-set-key [(f12)] 'org-remember) ;; My preferences. These are less related to GTD, and more to my ;; particular setup. They are included here for completeness, and so ;; that new org users can see a complete example org-gtd ;; configuration. (setq org-return-follows-link t) (setq org-hide-leading-stars t) (setf org-tags-column -65) (setf org-special-ctrl-a/e t) ;; (setq org-log-done t) (setq org-log-done 'time) (setq org-log-done 'note) (setq org-deadline-warning-days 14) (setq org-fontify-emphasized-text t) (setq org-fontify-done-headline t) (setq org-agenda-include-all-todo nil) (setq org-agenda-include-diary t) (setq org-agenda-use-time-grid t) (setq org-directory gtd-path) ;; org export setting(config) ;; (setq org-export-html-style "<link rel=stylesheet href=\"../e/freeshell2.css\" type=\"text/css\">") ;; (setq org-export-with-section-numbers nil) ;; (setq org-export-with-toc nil) (setq org-adapt-indentation nil) ;; widen category field a little (setq org-agenda-prefix-format " %-17:c%?-12t% s") ;; fix new keybinding that clobbers mine (add-hook 'org-mode-hook (lambda () (local-set-key [(control tab)] 'other-window))) (provide 'org-gtd) ;;; org-gtd.el ends here
5 其他工具
其实,是有“专业”的GTD工具存在的,Google搜索 Best GTD Tools 可以出现很多的结果。 为了避免被说做广告,我就不列举了。你们自己玩的开心就好 :P
关键是你要明白 你要做什么 。
6 尾声
时间管理,对于我来说就是循环执行决策原则,而我又不是太会做决策,真是搞笑呢!
在学习的过程中,突然意识到自己太注重「器」,而忽视了「道」和「术」的学习,本末倒置。但愿现在醒悟不太晚。
我目前理解的GTD核心就是这么多了。接下来就是对具体的事进行具体的分析了。 这个是要训练的,我相信通过一段时间系统的学习和训练,一定可以发挥GTD最大的功效。
如果大家还想深入了解的话,我推荐大家可以去看一下这个: Organize Your Life In Plain Text! 虽然讲的是如何用orgmode来管理任务,但是思想可以借鉴一下。
以上。