作为著名的 「操作系统」,Emacs 当然可以用来做 GTD 软件 (使用 org-mode)。

平心而论,这个方案还是可行的。首先,data 放到 Onedrive 文件夹里就可以实现云备份与多机同步;此外,用户还可以使用它进行自定义的多维度的数据统计,社区甚至还提供了专门的 org-pomodoro 插件,这么一来番茄工作法也可以施行,在完成一个番茄钟时还可以让电脑发出 「叮」 的声音,对一个纯文本编辑器来说,这些实在是有点过于强大了。

此篇介绍一下如何使用 Emacs 做 GTD 软件,里面有一些微小的经验与细节,讲实话这种方案上手难度还是蛮大的,只推荐给极客范儿、爱折腾、有些闲暇时间的同学或者已被安利 org-mode 而尚未掌握的同学尝试。

原材料

我使用的 Emacs 是 25.3 版本,在装 Spacemacs 过程或者 org-pomodoro 插件过程中可能会碰到一些问题,如何成功安装这些原材料并不在本篇准备讲述的范围之内,请参考各自文档,应该都是比较容易解决掉的。Spacemacs 与 org-pomodoro 非必选,仅使用原生的 Emacs 经过简单的配置即可作为 GTD 使用,使用配置文件会使编辑器颜值更高,体验更好,但上手难度相对来说更大了一些,而 pomodoro 仅用来提供番茄工作法的支持,若不需要的话亦可不选择。

若这些问题没有耐心去解决或觉浪费时间,那么说明本方案不适合你,还是及早收手为好。

:没想到少数派竟然不会自动转存图片到自己的服务器,写本篇时使用 Github 做的图床,请在流畅浏览 Github 的网络环境下收看本文。

设置 data 目录

使用 GTD 软件肯定是要产生一定的用户数据的 (之后称用户数据为 data),那么它需要被放在某个地方,为了云存储、多机同步的目的,可以选择在 Onedrive 文件夹下建立 org 目录来存放 data。

由于配置不是三两行就能写完的,故专门建立一个文件夹做 GTD 的配置,编辑配置文件~/.emacs,使 Emacs 自动加载它时载入 GTD 的配置文件:

(load-file "~/my-agenda.el")

在配置文件中,指定 data 的存放目录,并绑定进入 agenda 的快捷键,这里配置为 Ctrl-C a 来触发:

(setq org-agenda-files '("~/OneDrive/org"))
(global-set-key (kbd "C-c a") 'org-agenda)

经过这几行配置,已经初有效果了:

通过 Ctrl-C a 进入 agenda view

进入 agenda-view 后,可以看到一些操作提示,通过一个按键可以快速查看一天、一周、所有、关键字搜索、标签搜索等任务。

新增任务

配置好 data 目录后,再配置具体要将信息写于哪个文件,可以配置多个文件,出于简化,这里将所有的 agenda todo 写入~/OneDrive/org/todo.org 文件下。

(setq org-default-notes-file "~/onedrive/org/todo.org")
(global-set-key (kbd "C-c r") 'org-capture)

上面设置的快捷键 C-c r,Emacs 会提示根据 todo template 来创建一个任务。

新建一个任务

创建任务之后,可以在 agenda-view 的 list all TODO entries 里看到刚刚添加的任务。

all todo entries

但是这是在日任务、周任务里是看不到的,需要为它添加起始、结束时间,操作分别为 C-c C-s,C-c C-d。

为任务添加起始、结束时间并在 week 中查看

配置任务 Template

见上面新建一个任务时的图,新建任务是基于 Template 的,我们利用比如大写的 TODO 字样是 Emacs 自带的 Template。同时,org-agenda 支持用户配置自己的 template。

在配置中加入如下代码,可以增加时间管理中充当 收集篮 角色的 template:

;; capture;
(setq org-capture-templates
      '(("t" "Todo" entry (file+headline org-default-notes-file " 待办事项 ")
         "* TODO %?\n  %i\n  %a")
        ("s" " 收集篮 " entry (file+headline org-default-notes-file "Quick notes")
         "* Quick notes %?\n %i\n %a")
        ))

 

利用这个机制,可以编写自己的 template,对自己的使用情景进行分类,可以使操作更加多样化,满足更大的想象力。

周期性任务

有些任务是周期性、经常没有结束的,比如我使用 RSS 看各种资讯,每 3 天看一次,时间在当天中午吃过饭 13:00 到 14:00 一个小时,那么可以在设置任务起始时间时,加入周期性的标记即可(在指定的时间后面加上:+3d),效果在 week-view 中很明显,会周期性地出现。

按 Tag 进行分组与搜索

使用 Tag 进行将事物进行分组是一种常见的管理模式,在 org-agenda 中,新建一个任务时可以为它加 Tag,方法为在任务描述后面加上 :tag1:tag2: 这样的标记。

在上图中可以看到,将 学 agenda 归为 学习 工具 标签下,这样,就可以通过标签搜索的功能将该 Tag 下所有的任务搜出来。

分别按不同的标签搜索

同时,agenda-view 还提供各种搜索的方式,可以根据关键字,是否完成等条件搜索。 各个搜索入口在 agenda-view 描述得很清楚:

agenda-view 按键说明

任务优先级

根据四象限工作法,各任务是有优先级的,org-agenda 当然提供了为任务设计不同优先级的功能,为 A,B,C 三个不同的级别,操作为将光标放到任务的一行上,按 Shift-上、下键,即可调整该任务优先级。

切换任务优先级

如果觉得自带的 ABC 不够用的话,还可以自己定义优先级,配置如下:

(setq org-highest-priority ?A)
(setq org-lowest-priority  ?D)
(setq org-default-priority ?D)
(setq org-priority-faces
      '((?A . (:background "red" :foreground "white" :weight bold))
        (?B . (:background "DarkOrange" :foreground "white" :weight bold))
        (?C . (:background "yellow" :foreground "DarkGreen" :weight bold))
        (?D . (:background "DodgerBlue" :foreground "black" :weight bold))
        ))

上述配置定义了最低优先级为 D,且为默认优先级,同时设置了颜色,使得各优先级区分度更高,配置过后效果图如下:

有底色与自定义优先级的展示

获取 Chrome 链接

有一种常见的场景为在浏览网页时看到一篇文章一时看不完,要把它记下来之后再看,这个时候需要复制链接,再粘贴到 Emacs 中,这个过程比较烦人,牛人子龙山人为此提供了如下的配置,通过 AppleScript,再增加一个相应的 Template,可以使新增该 Template 的任务时自动去 Chrome 抓取 url 并粘贴在 Emacs 中,可以说是非常神奇了。

(defun my/insert-chrome-current-tab-url()
  "Get the URL of the active tab of the first window"
  (interactive)
  (insert (my/retrieve-chrome-current-tab-url)))

(defun my/retrieve-chrome-current-tab-url()
  "Get the URL of the active tab of the first window"
  (interactive)
  (let ((result (do-applescript
                 (concat
                  "set frontmostApplication to path to frontmost application\n"
                  "tell application \"Google Chrome\"\n"
                  "    set theUrl to get URL of active tab of first window\n"
                  "    set theResult to (get theUrl) \n"
                  "end tell\n"
                  "activate application (frontmostApplication as text)\n"
                  "set links to {}\n"
                  "copy theResult to the end of links\n"
                  "return links as string\n"))))
    (format "%s" result)))

;; capture;
(setq org-capture-templates
      '(("t" "Todo" entry (file+headline org-default-notes-file " 待办事项 ")
         "* TODO %?\n  %i\n  %a")
        ("s" " 收集篮 " entry (file+headline org-default-notes-file "Quick notes")
         "* TODO %?\n  %i\n %U"
         :empty-lines 1)
        ("c" "Chrome" entry (file+headline org-default-notes-file "Quick notes")
         "* Later see: %?\n %(my/retrieve-chrome-current-tab-url)\n %i\n %U"
         :empty-lines 1)
        ))

效果如下:

自动抓取 Chrome url 创建任务

统计

使用 Emacs 可以对任务完成情况及时间使用情况进行统计。 对各 Tag、各种类型的任务的耗时进行统计,统计出来的结果可能是一个人意想不到的(比如竟然在重要的事情上花的时间不及不重要却相对简单的事情的时间的一半),这种统计对之后的时间安排有导向性,在时间管理中还蛮重要的。

开始一个任务时的操作被称为 clock in,结束计时被称为 clock out,操作分别为 C-c C-x C-i 与 C-c C-x C-o,在一个任务上可多次计时,最终 Emacs 会自动处理总的时间。

在 todo.org 文件下,C-c C-x C-r 可以生成一个动态的报表,之所以称为动态,意思是它生成一次,就呆在那里,下次来看,可以会根据之间的变化进行统计值的更新,手动刷新操作为 C-c C-c。

C-c C-x C-r 命令会生成一个 org 中的代码块,可针对各种关心的维度,比如各 tag,各优先级等,进行统计项的筛选,每个相同的统计表保留一份即可。

由于我已经好久没有用这个东西统计了,没有数据,这里盗 一个网上的图 ,来说明这个功能的强大。

统计图示例

上面 clocktable 后面的:maxlevel :scope 等均为筛选项,具体参数及用法见 文档 ,可以构造自己关心的统计表格,并且随时更新哟!

org-pomodoro

番茄工作法是一个著名的专注高效的 GTD 实践,org-pomodoro 插件可以提供一个 25 分钟(可自定义)的倒计时器,到时间会提醒你休息一下,然后再吃下一个番茄。

安装好插件后,要为一个 task 开启一个番茄钟,只需要在 task 上 M-x: org-pomodoro 就开始了:

tab 栏上的倒计时钟

一声 「叮」 响之后,这个番茄钟就结束了,会进入 break 阶段:

break5 分钟

如果要关掉一个误打开的番茄钟,使用 S-M: (org-pomodoro-kill)。

做项目管理

有篇很棒的使用 org 做项目管理的文章,我觉得已经算是很好的实践了,在此处分享一下。Behind the code: project planning

总结

以上是所有功能的展示,充分说明了 Emacs 有能力作为一个 GTD 软件,并且在某些方面还要做得比其他好。

但缺点也较明显:有些点过于原始,上手难度太大,要记的快捷键太多,一切都要自己调配;要熟练应用还需要一段不小的时间适应与折腾。另一个比较关键的是在移动端虽可以打开同步过来的 todo.org 纯文本文件,却尚无较好的相应编辑软件。

对 org-mode 的采纳与否读者需要在长处和缺点之间综合考虑,但不妨立即上手尝试一下。