28 February 2018

记录一下使用org mode来做任务管理的一些配置和方法

capture: 用最快的速度记下脑中的想法

org-capture 用来快速地记下心中一闪而过的某个想法,为了使得速度最快,需要在emacs中任何地方可以唤起这个函数,同时在捕获时减少不必要的输入。 首先定义一个全局快捷键来唤起这个函数

(global-set-key (kbd "C-c c")   'org-capture)

同时在 org-capture-templates 中定义自定义模板和快捷键

(setq org-capture-templates
      `(("t" "task" entry (file "~/Personal/gtd/inbox.org")
         "* TODO %?\nCaptured %<%Y-%m-%d %H:%M>") 
        ("n" "note" entry (file "~/Personal/gtd/notes.org")
         "* Note %<%Y-%m-%d %H:%M>\n%?")))

这里达到了3个目的:

  1. 使用快捷键 tn 分别建立一条 task 或者 note
  2. 分别存放到 inbox.orgnotes.org
  3. 在模板中自动加入时间戳

当然在捕获的时候可以同时设置优先级或者截止时间等属性。

refile: 将任务快速的归类和整理

所谓 refile 就是将org文件中的一个subtree移动到另一个tree或者文件下,可以在capture的时候就进行refile,也可以稍后进行。 由于我们所有捕获的任务一开始都在 inbox.org 中,我们给这个文件的所有条目加上全局的 REFILE 标签,以方便在后续的 agenda view中过滤出所有需要refile的任务。只要在org文件的开头加上一行全局tag

#+FILETAGS: REFILE

agenda: 任务查看和操作面板

默认的agenda视图只是列出接下来一周的所有已经scheduled的条目,需要做一些小修改来使得更加好用一些。 首先我们把todo和notes分开

(setq org-agenda-custom-commands
      (quote (("c" "Simple agenda view"
               ((agenda "")))
              ("N" "Notes" tags "NOTE"
               ((org-agenda-overriding-header "Notes")
                (org-tags-match-list-sublevels t)
                )))))

在todo的视图内,希望增加一个段落列出所有最高优先级的项目,另一个段落列出所有等待 refile 的条目,最后一个条目列出所有还没有规划日期的条目。

(setq org-agenda-custom-commands
      (quote (("c" "Simple agenda view"
         ((tags "PRIORITY=\"A\""
                ((org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done))
                 (org-agenda-overriding-header "High-priority unfinished tasks:")))
          (agenda "")
          (tags "REFILE"
                ((org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done))
                 (org-agenda-overriding-header "Tasks to Refile")
                       (org-tags-match-list-sublevels nil)))
          (alltodo ""
                   ((org-agenda-skip-function
                     '(org-agenda-skip-entry-if 'scheduled))
                    (org-agenda-overriding-header "Global list of Un-scheduled tasks:")
                    ))))

          ("N" "Notes" tags "NOTE"
           ((org-agenda-overriding-header "Notes")
            (org-tags-match-list-sublevels t)))
          )))

通过 (tags "TAG") 可以筛选出所有带有TAG标签的条目,再配合 org-agenda-skip-function 过滤掉更多的属性,例如

(org-agenda-skip-function
                     '(org-agenda-skip-entry-if 'scheduled))

会过滤掉所有已经schedule时间的条目。 为了让每个新的段落更清楚,可以用以下方法修改每个段落的标题

(org-agenda-overriding-header "Global list of Un-scheduled tasks:")

在agenda视图除了可以对某条条目进行常规的设置schedule/deadline,修改tag/property等操作外,还可以进行批量操作。在需要批量处理的条目上用 m 进行mark,然后 B 对所有marked的条目进行后续操作(例如refile或者修改tag等)。

archive: 归档已完成的任务

随着任务越来越多,几个.org文件会变得越来越大,需要定期将已经完成的任务进行归档。我倾向与手动批量归档,可以用以下函数实现

(defun org-archive-done-tasks ()
  (interactive)
  (org-map-entries
   (lambda ()
     (org-archive-subtree)
     (setq org-map-continue-from (outline-previous-heading)))
   "/DONE" 'agenda))

每隔一段时间运行一次就行了,会将*.org中的已完成的条目移动到*.orgarchive中。



blog comments powered by Disqus