Org-mode,最强的任务管理利器,没有之一
程序员对于“TODO”这个词一定不陌生。一个TODO意味着有一件事情需要去做。更深入一步来说,TODO是一个未完成的任务。
Org-mode能够完美解决任务管理的各种问题,包括任务/子任务的划分,关键时间的设定,任务状态变化的跟踪,以及任务的检索和查询。 再配合Org-mode的强大编辑功能, 能够实现很多功能,比如时间管理(GTD),项目计划和管理,工作日志等。
本文介绍Org-mode强大的任务管理功能。
Table of Contents
1 定义任务和子任务
Org-mode认为,每一个任务通常会需要附带一些文字说明。所以Org-mode将标题作为任务的载体。通过在标题上增加状态标记,来定义任务。 由于大纲是分级的,所以将标题定义为任务天然支持了子任务:可以在子标题上标记子任务。
使用C-c C-t或者S-LEFT/RIGTH 可以为标题增加或改变任务标记。
2 定义任务状态
Org-mode内置的任务状态只有两种:TODO和DONE。如果需要更多的状态,需要自己定义。
可以在文件内部定义任务状态: 关键字应该各不相同,这样对于一个选项 Org 才知道该用哪个状态序列(集合)。例子中也给出了快速使用一个关键字的方法,就是在关键字后面括号中给出快捷字母——当用 C-c C-t时,会询问,让你输入一个字母。
要自定义任务状态,可以使用文档元数据“#+SEQTODO:”,可以在文档的任何地方定义,但是建议统一定义在文档头部:
#+SEQ_TODO: REPORT(r) BUG(b) KNOWNCAUSE(k) | FIXED(f) #+SEQ_TODO: TODO(T!) | DONE(D@)3 CANCELED(C@/!)
将光标放在这些内容上,输入 C-c C-c 可以直接生效。此时再用C-c C-t设定任务时,会打开一个新的缓冲区:
对照前面的定义不难发现:
- 可以定义多组状态序列,每个“#+SEQTODO”行定义一组
- 状态之间用空格分隔
- 可以在()中定义附加选项,包括:
- 字符:该状态的快捷键
- !:切换到该状态时会自动增加时间戳
- @ :切换到该状态时要求输入文字说明
- 如果同时设定@和!,使用“@/!”
- 用“|”分隔未完成状态和已完成状态。未完成状态在查询待办事项时会列出。
使用C-c C-t 或者 S-LEFT/RIGTH 切换一些状态后,任务会变成这个样子:
会自动生成时间戳,提示填写说明。从而留下完整的记录。
上面的任务状态设置只适用于当前文档。如果希望设定所有.org文档的默认任务状态,需要在.emacs配置文件中定义。 上面的任务状态在配置文件中的等效设置为:
(setq org-todo-keywords '((sequence "REPORT(r)" "BUG(b)" "KNOWNCAUSE(k)" "|" "FIXED(f)") (sequence "TODO(T!)" "|" "DONE(D@)3" "CANCELED(C@/!)") ))
除了状态序列外,还可以定义type,来标记任务的分类。可以参考这里 。
3 设置任务优先级
在Org-mode中,还针对任务设定了A,B,C三种优先级,在安排日程的时候可以按照优先级进行排序。为任务设定优先级是通过 快捷键 S-UP/DOWN
4 跟踪子任务完成情况
对于有多个子任务的上级任务,很常见的一个需求是