将Emacs Org mode用于GTD任务管理

上一篇日志中,我简要介绍了如何围绕Emacs Org mode构建个人任务管理系统的基本思路与方法。因为Org mode体系庞大、功能繁杂,本文仅以提纲契领的方式介绍不同环节在Org mode中的操作与实现。更为具体与精密的功能机制和实施细节以查阅Org mode参考手册为宜。

定义任务状态关键词

变量org-todo-keywords用于指定可给任务赋予的状态关键词。该变量的值为一组序列(sequence)构成的列表。每一个序列以符号typesequence开头,其后则是一组用于定义任务状态关键词的字符串。若这一组字符串中的某一个为竖线|,则在竖线前的所有字符串代表任务未结束的状态,之后的则代表任务结束的状态。若没有竖线,则仅最后一个字符串代表任务结束的状态,其之前所有的字符串都代表任务未结束的状态。这样的typesequence序列可以定义多个。但是对于一般的任务管理来说,只定义一个就足够了。

此外,用户可以在typesequence序列中的每个关键词字符串末尾写上一对括号,令其中包含一个字母。该字母便是对应关键词的快捷方式。当用户将光标置于某个任务条目上时,按下C-c C-t后并输入快捷方式,可将任务直接设为指定的状态。

我所使用的任务状态关键词设置如下:

 (setq org-todo-keywords  ‘((sequence "TODO(t)" "ONGOING(o)" "MAYBE(m)" "WAIT(w)" "DELEGATED(d)" "|"      "DONE(f)" "CANCELLED(c)" "STUCK(s)")))

任务组标签

在Org mode中,当光标处于某个任务条目上时,按下快捷键C-c C-c,即可为该任务设置标签。对于任务组,我会为其加上标签TG予以识别。默认情况下,某一层级条目的标签会被其所包含的所有子条目继承。这样一来,当想要通过搜索标签TG来查看所有任务组时,具体的细节任务也会一并列出,干扰视线。为此,需要设置变量org-tags-exclude-from-inheritance,对TG标签禁用继承。

 (setq org-tags-exclude-from-inheritance ‘("TG"))

自定义日程视图

自定义日程视图简介

Org mode中的日程视图(Agenda view)具有强大的模式匹配与搜索能力。通过过滤用户指定的任务状态关键词、标签、时间戳以及自定义条件,可以生成几乎可以满足用户任何需求的视图。以数学的方式来讲,这就相当于将整个复杂的任务体系投影到我们所关注的不同空间中,对任务进行多角度地审视与把握,从而使我们在做任务管理的时候达到理清思路、聚集重点、不放过任何细节的良好效果。

日程视图的定义需要通过设置变量org-agenda-custom-commands来完成。该变量是一个列表,其中的每一项对应一个视图设置。这个视图设置的基本格式为:

 (key desc type match settings files)

各部分的含义如下:

  • key:当用户执行org-agenda命令时,会弹出*Agenda Commands*缓冲区,其中包含了系统默认和用户自定义的日程视图。每个日程视图均对应一个快捷字母。当用户按下这个字母时,则可以进入到相应的视图中查看。这里的key则代表快捷字母。
  • desc:日程视图的说明。
  • type:日程视图的类型,即用于定义将哪些类型的任务条目收录到该视图中。通常用到的类型有:
    • agenda:基于日或周的日程。
    • todo:包含有特定状态关键词的任务条目。
    • alltodo:所有处于未结束状态的任务条目,即,状态关键词为org-todo-keywords设置中竖线之前的。
    • tags:包含指定标签的条目。
  • match:用于指定与之前type对应的匹配条件。例如,当typetodo时,match若为"DONE",则匹配状态关键词为DONE的任务条目。如果没有匹配条件需要定义,则这一项为空字符串。
  • settings:用于指定匹配时应满足的一系列选项设置。settings的格式类似用于定义局部变量的let形式,即,
     ((option1 value1) (option2 value2) ...)

    常用的选项有:

    • org-agenda-skip-function:用于设定忽略条件的函数对象。
    • org-agenda-overriding-header:用于设定日程视图的台头提示信息。
    • org-agenda-files:这个变量的值是一个字符串列表,用于指定从哪些Org文件中提取信息。默认情况是从所有的Org文件中提取信息。
  • files:用于指定当执行了org-store-agenda-views命令后需要将日程视图自动导出的文件。可以是HTML格式,也可以是纯文本格式。这个功能非常方便:当用户将所有的视图都定义好后,可以定期地直接将其全部导出。既可以放在HTTP服务器上统一浏览,也可以在审阅后存档,形成历史记录。

随着日积月累,当用户定义的日程视图比较多时,管理起来就会较为混乱,同时可供绑定的字母快捷键也开始不够用。为此,可以将功能、类别相似的视图归为一组。这个组视图在org-agenda-custom-commands中的定义方式为:

 (Group-key . desc)

其中的Group-key为一个字母,指定了组的快捷键。

当组定义好了之后,随后便可以定义组内的各个日程视图。每个日程视图的定义与前面所述相同,

 (Group-KeyView-Key desc type match settings files)

只是其key为两个字母,第一个字母为Group-key,第二个字母View-key为日程视图自己的快捷捷。当用户执行org-agenda时,按下Group-key先进入组视图,再按下View-key则进入到指定的日程视图中。

有了以上对于Org mode中日程视图的基本了解,下面便介绍一下我定义的几种视图及其配置。

截止日期日程视图

该视图列出所有加了DEADLINE时间戳的任务。为此,需要事先定义一个函数tjh/org-agenda-skip-not-deadline-entries,用于忽略不包含DEADLINE时间戳的条目。

 ;; Skip entries which are not deadlines. (defun tjh/org-agenda-skip-not-deadline-entries ()   (org-agenda-skip-entry-if ‘notdeadline))

然后,定义总的截止日期视图与各个项目自己的截止日期视图。

 (setq org-agenda-custom-commands       ‘(         ......         ;; Display all tasks with deadline.         ("D" . "Agenda view for deadlines")         ("Da" "Agenda view for all deadlines"          agenda ""          ((org-agenda-skip-function ‘tjh/org-agenda-skip-not-deadline-entries)           (org-agenda-overriding-header "All deadlines: "))          "/agenda/docs/orgs/org-html-exports/Deadline-All.html")         ("Dc" "Study"          agenda ""          ((org-agenda-skip-function ‘tjh/org-agenda-skip-not-deadline-entries)           (org-agenda-overriding-header "Deadlines for study: ")           (org-agenda-files ‘("/agenda/docs/orgs/Math.org"                       "/agenda/docs/orgs/Computer.org")))          "/agenda/docs/orgs/org-html-exports/Deadline-Study.html")         ("Dd" "Personal"          agenda ""          ((org-agenda-skip-function ‘tjh/org-agenda-skip-not-deadline-entries)           (org-agenda-overriding-header "Deadlines for personal affairs: ")           (org-agenda-files ‘("/agenda/docs/orgs/Personal.org")))          "/agenda/docs/orgs/org-html-exports/Deadline-Personal.html")         ("Dy" "Official"          agenda ""          ((org-agenda-skip-function ‘tjh/org-agenda-skip-not-deadline-entries)           (org-agenda-overriding-header "Deadlines for official affairs: ")           (org-agenda-files ‘("/agenda/docs/orgs/Official.org")))          "/agenda/docs/orgs/org-html-exports/Deadline-Official.html")         ......         ))

已完成任务日程视图

该视图列出总的和各个项目的已完成任务视图。为此,需要定义函数tjh/org-agenda-skip-unfinished-entries,用于忽略所有不包含DONE状态关键词的任务条目。

 ;; Skip entries which are not finished. (defun tjh/org-agenda-skip-unfinished-entries ()   (org-agenda-skip-entry-if ‘nottodo ‘("DONE")))

变量org-agenda-custom-commands中的对应设置如下:

 (setq org-agenda-custom-commands       ‘(         ......         ;; Display all finished tasks.         ("F" . "Agenda view for finished tasks")         ("Fa" "Agenda view for all finished tasks"          agenda ""          ((org-agenda-skip-function ‘tjh/org-agenda-skip-unfinished-entries)           (org-agenda-overriding-header "All finished tasks: "))          "/agenda/docs/orgs/org-html-exports/Done-All.html")         ("Fc" "Study"          agenda ""          ((org-agenda-skip-function ‘tjh/org-agenda-skip-unfinished-entries)           (org-agenda-overriding-header "Finished tasks for study: ")           (org-agenda-files ‘("/agenda/docs/orgs/Math.org"                       "/agenda/docs/orgs/Computer.org")))          "/agenda/docs/orgs/org-html-exports/Done-Study.html")         ("Fd" "Personal"          agenda ""          ((org-agenda-skip-function ‘tjh/org-agenda-skip-unfinished-entries)           (org-agenda-overriding-header "Finished tasks for personal affairs: ")           (org-agenda-files ‘("/agenda/docs/orgs/Personal.org")))          "/agenda/docs/orgs/org-html-exports/Done-Personal.html")         ("Fy" "Official"          agenda ""          ((org-agenda-skip-function ‘tjh/org-agenda-skip-unfinished-entries)           (org-agenda-overriding-header "Finished tasks for official affairs: ")           (org-agenda-files ‘("/agenda/docs/orgs/Official.org")))          "/agenda/docs/orgs/org-html-exports/Done-Official.html")         ......         ))

GTD流程

收集箱

通过列出所有尚未计划的任务条目,则可以构成GTD流程中的收集箱。为此,需要定义函数tjh/org-agenda-skip-scheduled-entries,用于忽略所有已经加了时间戳、状态关键词为ONGOINGWAITDELEGATED的任务条目。同时,包含了TG标签的任务也被排除在外。这是因为任务组只是具体任务的容器,故不参与到实际任务的安排中。

 ;; Skip unscheduled entries. (defun tjh/org-agenda-skip-scheduled-entries ()   (org-agenda-skip-entry-if ‘timestamp                 ‘todo ‘("ONGOING" "WAIT" "DELEGATED")                 ‘regexp ":TG:"))

以下配置实现了总的与各个项目的收集箱。

 (setq org-agenda-custom-commands       ‘(         ......         ;; Inbox for displaying unscheduled tasks.         ("I" . "Inbox")         ("Ia" "Inbox for all unfinished TODOs"          alltodo ""          ((org-agenda-skip-function ‘tjh/org-agenda-skip-scheduled-entries)           (org-agenda-overriding-header "Inbox items: "))          "/agenda/docs/orgs/org-html-exports/Inbox-All.html")         ("Ic" "Study"          alltodo ""          ((org-agenda-skip-function ‘tjh/org-agenda-skip-scheduled-entries)           (org-agenda-overriding-header "Inbox items for study: ")           (org-agenda-files ‘("/agenda/docs/orgs/Math.org"                       "/agenda/docs/orgs/Computer.org")))          "/agenda/docs/orgs/org-html-exports/Inbox-Study.html")         ("Id" "Personal"          alltodo ""          ((org-agenda-skip-function ‘tjh/org-agenda-skip-scheduled-entries)           (org-agenda-overriding-header "Inbox items for personal affairs: ")           (org-agenda-files ‘("/agenda/docs/orgs/Personal.org")))          "/agenda/docs/orgs/org-html-exports/Inbox-Personal.html")         ("Iy" "Official"          alltodo ""          ((org-agenda-skip-function ‘tjh/org-agenda-skip-scheduled-entries)           (org-agenda-overriding-header "Inbox items for official affairs: ")           (org-agenda-files ‘("/agenda/docs/orgs/Official.org")))          "/agenda/docs/orgs/org-html-exports/Inbox-Official.html")         ......         ))

规划

Refile

使用org-refile命令(C-c C-w)可以将当前光标所在处的标题及其子树移动到另一个更高一级的标题下。默认情况下,子树会添加到这个新标题下的末尾。当然,也可以添加到最开始。这一点由变量org-reverse-note-order来控制。若执行C-u C-c C-w,则仅令光标跳转到指定的更高一级标题处而不移动子树。

设定时间戳

  • 使用C-c C-s为任务设置SCHEDULED时间,即,开始着手处理任务的那一天,但对于任务执行具体需要多少时间并不作明确要求。这一点也是符合GTD的基本思想的。
  • 使用C-c C-d为任务设置DEADLINE时间。

执行

估计执行任务所需时间

对于一个任务组及其包含的所有具体任务进行整体上的时间规划时,可以借助Org mode提供的列视图功能。在任务组标题下定义属性COLUMNS,用于指定列视图中各列的内容、标题与宽度。例如,

 * TODO A big task to be handled.                    :TG:   :PROPERTIES:   :COLUMNS:  %75ITEM(Task) %8PRIORITY(Priority) %9TODO(Status) %8EFFORT(Effort){:} %16SCHEDULED %16DEADLINE   :END:

其中,Effort列后的{:}用于指定对各行子任务的Effort进行求和。

然后,在任务组下定义各个具体任务。

 * TODO A big task to be handled.                    :TG:   :PROPERTIES:   :COLUMNS:  %75ITEM(Task) %8PRIORITY(Priority) %9TODO(Status) %8EFFORT(Effort){:} %16SCHEDULED %16DEADLINE   :END: ** TODO [#A] Task 1 ** TODO [#C] Task 2 ** TODO [#B] Task 3

之后,按C-c C-x C-c进入列视图模式进行规划,如图1所示。

图1 在列视图模式下估计任务的执行时间。

统计实际任务执行时间

在开始某项任务时,将光标放到该任务条目上,按快捷键C-c C-x C-i执行org-clock-in命令,即可对该任务进行计时。停止工作时,再按C-c C-x C-o执行org-clock-out命令,结束对该任务的计时。为了汇总显示执行各任务所花费的时间,按C-c C-x C-r执行org-clock-report命令,可对光标当前所在处的任务子树或者整个Org文件生成时间统计报告。

结语

本文概要地介绍了我在Emacs Org mode中进行GTD任务管理的具体操作与基本配置。然而这只是一个起点,还需要在实际的学习与研究中将这一套方法和流程反复使用、长期练习,才能够发挥其应有的效力。同时,也需要不断地积累关于任务管理和Org mode的相关知识,从而能够对这套方法和流程持续地改进、更新。最后,需要始终牢记的一点是,任务管理的关键不在于工具与技术,甚至都不在于管理方法和思想,而在于有效执行和有实质性的产出。这也正是任务管理的最终目的。

原文地址:https://www.cnblogs.com/quantumman/p/10808374.html

时间: 2024-08-02 17:33:40

将Emacs Org mode用于GTD任务管理的相关文章

Linux下的经典软件-史上最全

前言 从2012年接触Linux系统以来就被Linux系统所吸引,2个月后便完全抛弃了Windows.在这2年的时间里,我尝试了很多Linux发行版: Gentoo, Fedora, Ubuntu, Debian等.在这些系统中又尝试了很多种软件,这里根据自己的使用经验并结合网上的一些资料,对Linux下常用的软件进行整理,供大家参考,希望能帮助到大家.每款软件都有它的优缺点,适合自己的才是最好的.在这篇文章中我是按自己的喜好推荐给大家或者进行排序的,并不是说它们就是最好的,其它的就不行.建议大

为什么国外程序员爱用 Mac?

from http://www.vpsee.com/2009/06/why-programmers-love-mac/ Mac 在国外很受欢迎,尤其是在 设计/web开发/IT 人员圈子里.普通用户喜欢 Mac 可以理解,毕竟 Mac 设计美观,简单好用,没有病毒.那么为什么专业人士也对 Mac 情有独钟呢?从个人使用经验来看我想有下面几个原因: 1.Mac OS X 是基于 Unix 的.这一点太重要了,尤其是对开发人员,至少对于我来说很重要,这意味着Unix 下一堆好用的工具都可以随手捡到.

Mylyn

Mylyn(旧称Mylar)是eclipse的一个插件,用于将任务管理和上下文管理无缝集成到Eclipse中.1. 安装 下载相应的Mylyn zip包,解压缩开就是两个文件夹:features和plugins,以及一个XML文件:site.xml.将这两个文件夹拷入或者以配置方式导入合适版本的Eclipse中就可以了.2. 使用重启Eclipse,Window的preference配置窗口里就多了一个Task的菜单,用于对Mylyn的配置.点击Window>show view> other(

软件项目研发流程该怎么规范

在软件项目研发管理过程中,是否经常出现这样的场景:开发人员不知道什么时候转测:项目经理拿个Excel文档群里一发,某任务前天就应该完成的,怎么现在还没开始搞:前端问这部分UI是谁在做,什么时候能做完:测试说线上这个bug又是谁改出来的,这次没转测这模块……等等.整个协作感觉一团乱麻,团队内部充满了甩锅与抱怨的氛围.软件项目的研发流程该怎么规范,让团队成员都能目标明确,步调一致,让产品迭代充满节奏感.本文基于笔者项目研发管理经验整理,希望起到抛砖引玉的作用,探讨高效团队的协作流程模式. 1. 协作

我的效率工具分享

我的效率工具 这个系列的最后一文,介绍一下我电脑上的其他效率工具. 重度健忘症患者的福音-滴答清单 滴答清单严格上来说并不算一个特别优秀的GTD类的软件. 所谓GTD(Get Things Done)也是所谓的城市精英们提出的一个时间管理的概念.有兴趣的可以自行搜索了解一下.可能有人会把此类软件用的出神入化,但是对于我来说,这玩意儿就是个好用的备忘录... 这里是官网地址:https://dida365.com/ 为什么是滴答清单而不是其他的软件? 滴答清单的优点: 体量小,无论手机APP还是P

如何利用Emacs进行个人时间管理(GTD)

1. 简介 1.1 什么是GTD Get Things Done(GTD),是一套时间管理方法,面对生活中如下情况: 有很多事情要做 每件事情有主次之分 个人精力有限 我们需要随时很方便的了解我们下一步要做什么,合理的安排我们有限的时间,集中精力完成更重要的事情. "GTD通过帮助你更好的跟踪和管理你的思绪.需要做的和想做的事,从而使你能在合适的情境中静下心,集中精神完成最重要的任务." "GTD不是一蹴而就的.GTD是一套持续的系统,需要不断地实践才能让你更好的掌握,从而成

emacs第一天

emacsbinw64.sourceforge.net  windows的emacs下载地方(绿色软件) 学习快速入门 C-h t 快速入门的帮助文档 光标移动快捷键: C-f 前进一格C-b 后退一格C-n 向下一行C-p 向上一行C-a 行开头C-e 行结尾C-k 删除当前位置到行尾查阅一下win上修改快捷键   这些快捷键在mac里面是全局的快捷键 注意修改:caps Lock 到ctrl C-g 中断命令(不想继续这个指令) s 代表 super键 S 代表 shift键 M-x lin

一年成为Emacs高手(像神一样使用编辑器)

作者: 陈斌(redguardtoo) 版本号: 20160125 更新时间: <2016-01-25 Mon> 原创时间: <2012-01-31 Tue> 版权: 本文采用以下协议进行授权,自由转载 - 非商用 - 非衍生 - 保持署名 | Creative Commons BY-NC-ND 3.0,转载请注明作者及出处. 简介 成为高手很容易.当初我在Vi阵营,偶尔用Emacs还忘记"退出"的快捷键,一年后我跨入高手行列. 很多文章强调Emacs有多牛,但

Emacs 从入门到精通

1 前言 不想再说废话了,既然你会阅读这篇文档,说明你多少对Emacs有 些兴趣,或者已 经非常熟悉Emacs的基础操作了,并且希望有所提高.因此我不需要再把"编辑器 之神,还是神的编辑器"之类的恶俗话语放出来,来吸引你的好奇心.下面的内容, 从最基础的快捷键操作开始,一直到让你生活在Emacs中.这中间没有跳跃,你只 需要跟着我做,就可以了. 注意 该文档就是用Org生成的,我会把.org源码和html文档一块打包.关于 什么是Org,怎么生成,且看后面的讲解 2 Emacs 基础操