组织模式存档中的重复树结构

时间:2015-07-28 01:46:55

标签: emacs archive org-mode

在Emacs下的Orgmode中,是否已经有一种方法可以在存档中自动复制上面的 正在存档的项目?

我在文件中的新组织模式结构如下所示:

* CONFIGURE
** Operating Systems
*** Debian Unstable
*** Demodyne

** Machines
(...)
** Software
(...)

归档“Demodyne”条目后,我希望归档包含以下内容:

* CONFIGURE
** Operating Systems
*** Demodyne

当我多年前开始使用org-mode时,我以为我已经在org-mode的文档中看到了它,但是在http://orgmode.org/manual/的最新版本的文档中没有找到这样的内容。归档http://orgmode.org/manual/Archiving.html#Archiving相当简洁。我觉得我可以编程,但我不愿意,如果它已经完成...

1 个答案:

答案 0 :(得分:0)

https://gist.github.com/edgimar/072d99d8650abe81a9fe7c8687c0c993上有部分解决方案。

这可能是一个非常不错的解决方案,但是,它仅在执行单个DONE任务时对我有用。如果我尝试使用DONE将其扩展到子树中的所有org-map-entries任务,如下所示,它将在每次运行时创建一个新的顶级* ARCHIVED标题。有办法避免这种不良行为吗?

org-map-entries无关的行为的示例

定义函数以对当前子树中的所有DONE任务进行操作:

(defun org-archive-done-tasks ()
  (interactive)
  (org-map-entries 'org-archive-subtree-hierarchical "/DONE" 'tree))

注意:在上面的链接中找到org-archive-subtree-hierarchical

现在,如果我使用以下缓冲区

* Project 1
** TODO Task 1
** TODO Task 2
** TODO Task 3

并标记任务1 DONE,在项目1上运行org-archive-done-tasks,然后对任务2进行相同的操作,缓冲区结果为

* ARCHIVED
** Project 1
*** DONE Task 1

* ARCHIVED
** Project 1
*** DONE Task 2

* Project 1
** TODO Task 3

这是期望的结果,如果org-archive-subtree-hierarchical直接在** DONE Task 1上运行,然后在** DONE Task 2(作为* Project 1的子代上运行),将会发生这种情况

* ARCHIVED
** Project 1
*** DONE Task 1
*** DONE Task 2

* Project 1
** TODO Task 3

使用org-map-entries是否可能实现所需的行为?是否有更好的方法可以对子树中的所有org-archive-subtree-hierarchical任务多次执行DONE,而又不重复归档目标标题?