Emacs Org-mode:快速将TODO标记为DONE

时间:2014-09-19 08:57:50

标签: emacs org-mode

我希望有一条快捷方式可以将TODO的状态直接更改为DONE(并返回)CLOSED时间标记折叠起来,当我' m在线上的任何位置(不像速度键需要在第一个星号之前)。

目前我有两个选择:

  1. Cc Ct d TAB org-use-fast-todo-selection设置为t d 是我的{ {1}}状态快捷方式和 TAB 隐藏子树),

  2. S-right TAB (使用DONEorg-shiftrightDONE之后的第一个州。< / p>

  3. 请你帮我把它绑定到像 C-c C-d 这样的单一快捷方式。请注意,我的状态多于TODOTODO,但此快捷方式也应在这些状态之间切换。

    奖励积分:此附加命令也会在与上一个任务相同级别的下一行开始新的DONE项目。

    非常感谢!

2 个答案:

答案 0 :(得分:4)

不确定&#34;时间标记&#34;的含义,但根据您列出的工作流程,以下命令应该可以执行您想要的操作:

(defun org-toggle-todo-and-fold ()
  (interactive)
  (save-excursion
    (org-back-to-heading t) ;; Make sure command works even if point is
                            ;; below target heading
    (cond ((looking-at "\*+ TODO")
           (org-todo "DONE")
           (hide-subtree))
          ((looking-at "\*+ DONE")
           (org-todo "TODO")
           (hide-subtree))
          (t (message "Can only toggle between TODO and DONE.")))))

(define-key org-mode-map (kbd "C-c C-d") 'org-toggle-todo-and-fold)

至于在与当前任务相同的级别上插入新的TODO项,org-mode具有内置命令。你可以通过

来阅读它们
  • C-h f org-insert-todo-heading RET
  • C-h f org-insert-todo-heading-respect-content RET

答案 1 :(得分:4)

简单的切换命令可能如下所示

(defun my-org-todo-toggle ()
  (interactive)
  (let ((state (org-get-todo-state))
        post-command-hook)
    (if (string= state "TODO")
        (org-todo "DONE")
      (org-todo "TODO"))
    (run-hooks 'post-command-hook)
    (org-flag-subtree t)))

(define-key org-mode-map (kbd "C-c C-d") 'my-org-todo-toggle)

post-command-hook有点棘手,但是是必需的,否则在命令之后添加(和显示)注释,这会使时间日志部分展开。

要开始新的TODO项目,您可以查看现有的org-insert-todo-heading(绑定到<M-S-return>