Emacs Version: 30.1
Org Version: 9.7.11
此篇要求对 Emacs 有基本的了解。
Emacs Org TODO 的使用规则
基本功能
TODO 以星号开头加一个空格,星号在这里也表示层级关系。例如:下面的示例表示一个未
标记的 TODO,且是在第三级。
*** TODO 做一份西红柿炒鸡蛋
TODO 中重要的处理条目的命令:C-c C-t (org-todo);如果没有设置其它快速访问待办状态,
会一直在标记之前、 TODO 和 DONE 之间切换。
S-RIGHT S-LEFT
在 TODO 的各个状态之间切换。
C-c / t (org-show-todo-tree)
折叠整个缓冲区,但显示所有 TODO 及 TODO 所在的层的标题
M-x org-agenda t(org-todo-list)
此命令在后绪章节介绍
S-M-RET (org-insert-todo-heading)
在当前行或下一行插入一个新的 TODO 项
keywords 的扩展使用
此节的keywords,表示 TODO 的状态,如:WAIT、DONE等
一般情况下,TODO 只有两种状态:“TODO” 和 “DONE”。但 org-mode 允许更复杂的对 TODO 进行分类(状态存储在org-todo-keywords变量中)。
keywords 在TODO的工作流状态
用 keywords 表示处理项目时的不同状态。此处有中文,只是演示,真实的文档中不能有中文状态 keywords ,例如:
(setq org-todo-keywords
'((sequence "买菜" "洗菜" "切菜" "炒菜" "|" "完成" "取消")))
- 用 C-c C-t 可顺序切换
- 用 C-数字 C-c C-t 可直接更改/选择状态
keywords 的分类(类型)
TODO “keywords” 不只表示状态,还可以:
- 可表示项目中的状态
- 可表示项目的分类
- 可表示项目中的人
- ……
一个文件中的多个keyword
org-todo-keywords变量,可以有多个 sequence
(setq org-todo-keywords
'((sequence "TODO" "|" "DONE")
(sequence "AXXX" "BXXX" "CXXX" "|" "DXXX"
(sequence "|" "EXXX")))
C-S-RIGHT
C-S-LEFT
在各 sequence 列表切换
快速访问TODO状态
(setq org-todo-keywords
'((sequence "TODO(t)" "|" "DONE(d)")
(sequence "AXXX(a)" "BXXX(b)" "CXXX(c)" "|" "DXXX(D)"
(sequence "|" "EXXX(e)")))
设置完成后,再按/C-c C-t/试试。
为单个文件设置keywords
在单个.org文件的任意一行输入(单个 sequence):
#+TODO: TODO CODING DEBUG | DONE CANCELED
在单个.org文件的任意一行输入(并行的 sequence):
#+TODO: TODO(t) | DONE(d)
#+TODO: AXXX(a) BXXX(b) CXXX(c) | DXXX(D)
#+TODO: | EXXX(e)
用于TODO keywords的样式设置
状态关键字若多于两个,用 org-todo-keywords-faces 变量设置关键字的样式,如:
(setq org-todo-keyword-faces
'(("TODO" . org-warning) ("BXXX" . "yellow")
("EXXX" . (:background "blue" :weight bold))))
父子级(多任务)TODO的依赖
- 简单的依赖关系
* [1/2][50%] Total Task
** DONE Task one
** TODO Task two
- 较复杂的依赖关系
* Totla Task [2/4]
- [-] Task one [1/2]
- [X] Subtask one ## 试试万能的 /C-c C-c/
- [ ] Subtask two ## 在上行末尾试试 /M-S-RET/
- [ ] Task two
- [X] Task three [3/3]
- [X] Subtask one
- [X] Subtask two
- [X] Subtask three
- [X] Task four
进度记录(记录状态变化)
,** DONE 记录项目进度 ## 试试 /C-u C-c C-t/
- State "DONE" from "DXXX" [2025-07-17 周四 15:34] DONE
- State "DXXX" from "BXXX" [2025-07-17 周四 15:33] DXXX
- State "BXXX" from "TODO" [2025-07-17 周四 15:30] BXXX
结束事项(每个 sequence 的最后一项视为结束)
在 Emacs 配置文件里面加上
(setq org-log-done 'time) ## 只记录时间
设置完成并且让生效后,试试 /C-c C-t/ ,在最初状态和结束状态切换,看看有什么结果。
(setq org-log-done 'note) ## 记录时间且记录状态变化的简单描述(交互式),得自己写。
跟踪 TODO 状态变化
给个例子自己体会一下:
#+TODO: AXXX(a) BXXX(b@/!) | DONE(d!) CANCELED(c@) ##测试之前记得加上这行
,*** CANCELED ## 跟踪(记录)状态变化
CLOSED: [2025-07-17 周四 17:56]
- State "CANCELED" from "DONE" [2025-07-17 周四 17:56] canceled
- State "DONE" from "BXXX" [2025-07-17 周四 17:56]
- State "BXXX" from "AXXX" [2025-07-17 周四 17:55] BXXX
/“!”/ 只记录时间戳,/“@”/ 有时间戳也有简单描述,两个一起用得用 / 隔开。
记录你的习惯
后面章节会讲到
优先事项
- 三个优先级别:A、B、C
- 默认优先级别:B
- 最高优先级:A
- 优先级只在议程中有效
- 可以设置数字表示的优先级
*** TODO [#A] 给儿子做饭 ## /C-c ,/ 设置当前标题的优先级
*** TODO [#B] 收拾家务
#+PRIORITIES: A C B ## 可以更改默认优先级顺序
复选框
- 类似 TODO,比 TODO 轻量
- 不包含在全局的 TODO 列表中
- 适合任务拆分为多个简单任务
- 两种进度显示方式[0/0] [0%]
- [-] 生日晚会 [3/4]
- [X] 打电话给朋友 [3/3]
- [X] 张三
- [X] 李四
- [X] 王五
- [X] 选地点
- [ ] 过程中的活动
- [X] 聊天,道别