ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Org-mode, 用文本文件管理日常(二)

2022-02-05 20:01:19  阅读:288  来源: 互联网

标签:状态 任务 WAITING mode 文本文件 CANCELLED Org HOLD TODO


任务和状态

我使用一组TODO关键字来管理所有我的org文件。org-mode也可以为每个文件都定义一组 TODO关键字,但是我觉得定制一套全局的TODO关键字已经非常方便了,这样我就可以在不同文件中 用相同的设置。

但是本文是个特例:) 因为我不希望 org-mode 隐藏 TODO 关键字当它出现在标题中时。 我在文本开头处设置一个假的 #+SEQ_TODO: FIXME_FIXED 项,来保证在这个文档中 TODO 关键字不要隐藏。

1.1 TODO 关键字

我在emacs中使用的是亮色模式。因为亮色模式在阳光下更容易阅读。

下面是我的 TODO 状态关键字以及颜色设置elisp脚本:

(setq org-todo-keywords
      (quote ((sequence "TODO(t)" "NEXT(n)" "|" "DONE(d)")
              (sequence "WAITING(w@/!)" "HOLD(h@/!)" "|" "CANCELLED(c@/!)" "PHONE" "MEETING"))))

(setq org-todo-keyword-faces
      (quote (("TODO" :foreground "red" :weight bold)
              ("NEXT" :foreground "blue" :weight bold)
              ("DONE" :foreground "forest green" :weight bold)
              ("WAITING" :foreground "orange" :weight bold)
              ("HOLD" :foreground "magenta" :weight bold)
              ("CANCELLED" :foreground "forest green" :weight bold)
              ("MEETING" :foreground "forest green" :weight bold)
              ("PHONE" :foreground "forest green" :weight bold))))

1.1.1 任务状态转换

任务状态开始于 TODO 结束于 DONE.

下图显示了可能的状态转换关系:

#+begin_src plantuml :file normal_task_states.png :cache yes
title Task States
[*] -> TODO
TODO -> NEXT
TODO -> DONE
NEXT -> DONE
DONE -> [*]
TODO --> WAITING
WAITING --> TODO
NEXT --> WAITING
WAITING --> NEXT
HOLD --> CANCELLED
WAITING --> CANCELLED
CANCELLED --> [*]
TODO --> HOLD
HOLD --> TODO
TODO --> CANCELLED
TODO: t
NEXT: n
DONE: d
WAITING:w
note right of WAITING: Note records\nwhat it is waiting for
HOLD:h
note right of CANCELLED: Note records\nwhy it was cancelled
CANCELLED:c
WAITING --> DONE
#+end_src

 

1.1.2 项目任务状态

我的项目任务状态定义非常简单。我不想人为的明确的定义'这是一个项目' 以及 '这不是个项目'. 我对项目定义就是如果任务下有TODO关键字定义的子任务,那么它就是个项目。

项目可以定义在任何层级-只要定义一个带有TODO关键字的任务并且在下面定义一个带TODO关键字的子 任务那么这个任务就可以视为项目。项目和任务使用同一套关键字。如果一个子任务被标记 NEXT 那么这个项目就不会出现在阻塞任务列表中。

1.1.3 回电

回电比较特别。回电任务在capture中创建时状态时为DONE状态。回电计时当任务创建时开始计时。如果我 需要看一些其他详细资料,需要关闭刚刚捕获的任务,直接使用快捷键 C-c C-c 先关闭捕获的任务 (停止计时) 然后通过 f9 SPC 重新恢复之前计时。

#+begin_src plantuml :file phone_states.png :cache yes

title Phone Call Task State
[*] -> PHONE
PHONE -> [*]
#+end_src

1.1.4 会议

会议也是特殊的一个任务流程。会议事件在capture中创建时初始状态为done。当我需要中 断手上工作去提个问题或者需要开个会讨论问题,我会创建会议任务。会议任务处理和回电 任务非常相似,我会记录下我花了多少时间在开会上,并且会记录下讨论内容 (无论会议中还是会议后),长度以及复杂度。

会议计时从capture中创建该会议任务开始,如果需要转向查看其他任务,想提前关闭这个捕获 任务。我会先通过快捷键 C-c C-c 完成捕获,先关闭并保存这个捕获的任务(停止计时) 之后,通过 f9 SPC 来恢复会议计时。

#+begin_src plantuml :file meeting_states.png :cache yes
title Meeting Task State
[*] -> MEETING
MEETING -> [*]
#+end_src

1.2 快速TODO状态选择

快速TODO状态选择允许将任务TODO状态直接切换到其他状态通过按键菜单选择相应的快捷键。 这是个很棒的功能。

(setq org-use-fast-todo-selection t)

通过快捷键 C-c C-t KEY 来快速切换任务状态。

其中的 KEY 是定义在 org-todo-keywords 中的快速状态选择键。

如下设置:

(setq org-treat-S-cursor-todo-selection-as-state-change nil)

允许通过 S-left 以及 S-right 跳过一些常规操作,而直接循环切换任务状态而不会设置时间戳,当需要调整 任务状态时候,这个功能特别好用。

1.3 TODO 状态触发

我定义了一些触发器,当一个任务状态切换时候,就会自动为该任务添加一个tag。举个例子, 当一个任务被设置到 CANCELLED 状态,那么触发器就会为该任务添加一个 CANCELLED 标签, 当又将该任务设置回 TODO=状态,相应的 =CANCELLED 标签也会自动移除。为任务自动添加标签, 会对后续在agenda视图中过滤任务有帮助,后续我也会详细介绍。

这些触发器可以分为如下几条规则:

  • 将一个任务设置 CANCELLED 状态,会自动添加 CANCELLED 标签
  • 将一个任务设置 WAITING 状态,会自动添加 WAITING 标签
  • 将一个任务设置 HOLD 状态,会自动添加 WAITING 和 HOLD 标签
  • 当任务设置为完成状态,将会移除 WAITING 以及 HOLD 标签
  • 将一个任务设置 TODO 状态,会自动删除 WAITING , CANCELLED 以及 HOLD 标签
  • 将一个任务设置 NEXT 状态,会自动删除 WAITING , CANCELLED 以及 HOLD 标签
  • 将一个任务设置 DONE 状态,会自动删除 WAITING , CANCELLED 以及 HOLD 标签

这些自动生成的标签将对在agenda中过滤任务带来极大便利。

(setq org-todo-state-tags-triggers
      (quote (("CANCELLED" ("CANCELLED" . t))
              ("WAITING" ("WAITING" . t))
              ("HOLD" ("WAITING" .t) ("HOLD" . t))
              (done ("WAITING") ("HOLD"))
              ("TODO" ("WAITING") ("CANCELLED") ("HOLD"))
              ("NEXT" ("WAITING") ("CANCELLED") ("HOLD"))
              ("DONE" ("WAITING") ("CANCELLED") ("HOLD")))))

标签:状态,任务,WAITING,mode,文本文件,CANCELLED,Org,HOLD,TODO
来源: https://blog.csdn.net/xxpyb/article/details/122792567

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有