如何设置 org-mode 中 repeat-task 的初始状态
我的习惯是把待完成的事情分成两种状态,一个 TODO
, 一个是 NEXT
,其中 NEXT
是用来标注近期内要完成的事情,而 TODO
用来标注长期来看要做,但还没有分配计划的事情。
由于我每天都要用Anki被一下单词,因此我创建了一个 背单词
的任务并设置为 repeat-task
,但是却遇到一个问题,就是每次我将 state 改成 DONE
时,这个任务的state会变回 TODO
,而不是 NEXT
。
org-mode 的代码是公开的,为了找出是哪个地方影响了 repeat task 的初始状态,我首先查看了一下 org-todo
的代码,代码及其复杂,正当我要放弃的时候,突然一行闪亮的注释出现在我面前:
;; Do we need to trigger a repeat? (when now-done-p (when (boundp 'org-agenda-headline-snapshot-before-repeat) ;; This is for the agenda, take a snapshot of the headline. (save-match-data (setq org-agenda-headline-snapshot-before-repeat (org-get-heading)))) (org-auto-repeat-maybe org-state))
很明显,设置 repeat task 初始状态是有 org-auto-repeat-maybe
函数来实现的。再来查看 org-auto-repeat-maybe
函数的实现,很容易可以发现这么一段代码
(let ((to-state (or (org-entry-get nil "REPEAT_TO_STATE" 'selective) org-todo-repeat-to-state))) (org-todo (cond ((and to-state (member to-state org-todo-keywords-1)) to-state) ((eq interpret 'type) org-last-state) (head) (t 'none))))
通过查看 org-todo-repeat-to-state
的 doc-string,可以发现 org 默认会将 repeat task 的状态改成 TODO 序列中的第一个状态,要修改这个状态可以有三种选择:
- 修改
org-todo-repeat-to-state
的值,这会影响全局所有 repeat task 的初始状态,显然不符合我的要求 - 在文件头部通过
#+TYP_TODO
关键字(或者在定义 org-todo-keywords 时)设置 interpretation 为type
,这样 repeat task 会自动修改回之前的状态 - 是设置
:REPEAT_TO_STATE:
属性,这仅仅对该 repeat task 生效,刚好就是我要的内容。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论