本文翻译自 http://doc.norang.ca/org-mode.html ,原文作者为Bernt Hansen 。由于原文较长,因此会分多篇文章来发布。转载请标记出处。
本节主要介绍org归档功能,以及作者的归档流程,他山之石可以攻玉。
1 归档
1.1 归档子树
我更新了原来的归档流程。曾经我会将整个子树移动到该项目使用的,另外一个归档文件中。在agenda视图中,可以通过快捷键通过 a y
将 FILE.org
任务子树归档到 FILE.org_archive
文件中。
我还是会像以前一样将任务归档到原来那个归档文件中,现在我只会对那些已经完成并且非常老的任务才会做归档。我会在agenda视图最后部分列出需要归档的任务,这些任务意味着我已经花了很多时间在上面。归档历史任务可以让我的任务树变得更整洁,并且能够移除我已经不感兴趣的任务。在归档过程中,会在任务上添加额外的属性数据,表示该数据从何处归档而来,有助于在复原时候方便回退到原处。
我的归档文件比较大,但是到现在为止,我没有发现需要根据年份来将归档文件分割成多个文件的必要。
在上节的agenda视图中在新的月份开始时,我们可以看到一些需要归档的任务。那些已经完成的并且没有任何本月或者上月时间戳的任务(例如已经超过30天的任务)就可以归档。时间戳包含完成日期,便签,计时数据等-任何活跃以及不活跃的时间戳。
归档很简单,只要通过 m
标记所有要归档的项,然后通过 B $
将他们归档到合适的位置, 每月只需要花5分钟就可以完成归档了。
1.2 归档设置
我现在不用 ARCHIVE
属性来标记需要归档任务。能够归档任务到归档文件中 Archived Tasks
大纲下即表示已经归档完成。
下列设置保证任务在归档后就不会显示在agenda中。这给归档未在完成状态的任务提供 了可能。默认情况下,任务被归档到归档文件 * Archived Tasks
中。
归档功能没法保证项目树完整。对于在done状态的比较老的任务,当对其归档后,它就会从主的org文件中移除了。当然也可以从归档文件中,根据任务属性,将原来任务复原回来,但是我从来不这么做。归档的属性还是非常有用的,每年我都会从归档数据中查看些任务, 除了这种情况外,归档的任务就只是用来做备份用。
#+header: :tangle yes
#+begin_src emacs-lisp
(setq org-archive-mark-done nil)
(setq org-archive-location "%s_archive::* Archived Tasks")
#+end_src
#+header: :tangle yes
#+begin_src emacs-lisp
(defun bh/skip-non-archivable-tasks ()
"Skip trees that are not available for archiving"
(save-restriction
(widen)
;; Consider only tasks with done todo headings as archivable candidates
(let ((next-headline (save-excursion (or (outline-next-heading) (point-max))))
(subtree-end (save-excursion (org-end-of-subtree t))))
(if (member (org-get-todo-state) org-todo-keywords-1)
(if (member (org-get-todo-state) org-done-keywords)
(let* ((daynr (string-to-int (format-time-string "%d" (current-time))))
(a-month-ago (* 60 60 24 (+ daynr 1)))
(last-month (format-time-string "%Y-%m-" (time-subtract (current-time) (seconds-to-time a-month-ago))))
(this-month (format-time-string "%Y-%m-" (current-time)))
(subtree-is-current (save-excursion
(forward-line 1)
(and (< (point) subtree-end)
(re-search-forward (concat last-month "\\|" this-month) subtree-end t)))))
(if subtree-is-current
subtree-end ; Has a date in this month or last month, skip it
nil)) ; available to archive
(or subtree-end (point-max)))
next-headline))))
#+end_src
1.3 归档标签 - 隐藏信息
我只有在一种情况下,才会对归档任务打上ARCHIVE标签,那就是这个任务非常大,里边包含非常多信息,这样的任务,我通常不想打开任务细节(以防止自己陷入浩如烟海的信息中)。当然,我可以通过 C-TAB打开它,如果我不介意自己陷入这种境地(比如说任务下有一个巨大的数据表)。通常情况下,我不希望显示这些信息(因此我会为它打上ARCHIVE标签)。
1.4 什么时候归档
每月归档一次对我来说已经足够了。我会将完成的任务保留30天。这能够保留最近30天计时信息,同样,能保证我的agenda视图时间上连续(这个月,上个月,以及没完成的任务)(方便随时查看历史任务完成信息)。因为我很少访问归档任务(因此把要归档的先保留下来,待查看). 这样可以使得 我减少从归档文件恢复任务的可能。
归档让我的记录任务的工作文件非常干净整洁。如果我真的需要去找归档的任务,我知道它一定就在归档文件中某个位置。