在更改为DONE后,如何让TODO将自身重新调整到给定位置?

时间:2013-03-28 04:32:57

标签: emacs org-mode

我怎样才能在Emacs org-mode中实现这一目标?我需要写一些elisp代码吗?我想将我的DONE任务重新编译为同一组织文件上的Anti-todo标题。事情是想轻松了解我在白天所取得的成就。如果我存档然后在运动中我忘记了我在白天所做的事情。例如:

* Projects
** TODO Task 1
* Anti-todo
** DONE DId some stuff
** DONE Did some other stuff

当我将任务1切换为DONE时,我希望将其自身重新编译为Anti-todo

1 个答案:

答案 0 :(得分:3)

org-mode有一个执行此操作的功能,它被称为org-sort-entries。该命令会提示输入排序类型,在您的情况下为“o”。

要让它执行以上操作,请自动将其添加到配置文件中:

(defun xmonk/org-sort-todo-list ()
  "Sort buffer in todo order."
  (interactive)
  (save-excursion
    (mark-whole-buffer)
    (org-sort-entries nil ?o))
  (org-overview))


(add-hook 'org-after-todo-state-change-hook 'xmonk/org-sort-todo-list)

将状态从Todo更改为Done时的自动重新启动有点棘手并导致错误,但执行此操作的代码将是这样的:

(setq org-refile-use-outline-path "Anti-todo")

(defun xmonk/org-refile-done()
  (interactive)
  (beginning-of-buffer)
  (re-search-forward "DONE")
  (if (match-beginning 0)
    (let ((org-refile-targets '((nil :maxlevel . 5))))
      (org-refile nil (current-buffer)))))

然后你就可以从上面的钩子中调用它:

(add-hook 'org-after-todo-state-change-hook 'xmonk/org-refile-done)

它仍然会要求您确认是否要在Anti-todo标题下重新发送。

相关问题