为归档已完成的任务,我正在使用
C-c C-x a
命令。缺点是我必须手动逐一移动完成的任务,然后将其存档。
如何使用单个命令归档所有已完成的任务。
为归档已完成的任务,我正在使用
C-c C-x a
命令。缺点是我必须手动逐一移动完成的任务,然后将其存档。
如何使用单个命令归档所有已完成的任务。
C-c a < t
N r
其中N对应于您的“完成”状态的快捷方式(默认状态下为2)
然后,您只需要标记所有所需的标题并批量归档即可
m (mark for bulk action)
B a (or B $ for arch->sibling)
m
键。 - Sven KoschnickeB $
表示存档,B A
表示存档->同级。 - Sven KoschnickeN r
(其中 N 是要列出的状态)时,它将拉取已完成的状态,因此它们将不再被忽略,并将被列出。 - Jonathan Leech-Pepin这是 madalu 代码片段的纠正版本。注意,此版本也仅对当前子树进行操作(将 'tree 更改为 'file 可以在整个文件上运行)。
(defun org-archive-done-tasks ()
(interactive)
(org-map-entries
(lambda ()
(org-archive-subtree)
(setq org-map-continue-from (org-element-property :begin (org-element-at-point))))
"/DONE" 'tree))
'agenda
范围而不是 'file
,那么它将应用于所有已注册的日程文件。完美! - Daniel Dinnyes'tree
更改为 'agenda
。但是,如果我将任务标记为完成,什么也不会发生。即使调用函数也无法归档它。您知道这可能是为什么吗? - mathorg-archive-location
。 - undefined你可以使用org-map-entries函数编写一个函数:
(defun my-org-archive-done-tasks ()
(interactive)
(org-map-entries 'org-archive-subtree "/DONE" 'file))
另外还有来自http://orgmode.org/manual/Moving-subtrees.html#Moving-subtrees
C-u C-c C-x C-s
检查当前标题的任何直接子项是否可以移动到归档位置。为此,将检查每个子树以查找打开的TODO条目。如果没有找到,则该命令会提供将其移动到归档位置的选项。如果光标不在标题上时调用此命令,则将检查级别1的树。
C-x h
来选择所有文本,然后我还要做 C-u C-c C-x C-s
。 - agent18org-archive-all-done
的命令,并且它被构建在 org-archive.el
中。基于罗伯特的回答
(require 'org)
(require 'org-archive)
(add-hook 'org-mode-hook (lambda () (add-hook 'after-save-hook 'org-archive-all-done nil t)))
;; Some commands act upon headlines in the active region.
(setq org-loop-over-headlines-in-active-region 'start-level)
我发现在一些嵌套更多、多层级TODO的情况下,直接使用“org-map-entries”方法有点“脆弱”。
这种方法——生成一个列表,然后反向归档(以避免位置变化)——似乎涵盖了我所遇到的每种用例。在此分享给其他遇到问题的人。
请注意,最后一行上的“TODO”字符串匹配需要与您的TODO定义完全匹配(例如,在普通情况下,匹配可能是:"TODO=\"DONE\""
)。
(defun org-archive-done-tasks ()
"Archive all tasks marked DONE in the file."
(interactive)
(mapc (lambda(entry)
(goto-char entry)
(org-archive-subtree))
(reverse (org-map-entries (lambda () (point)) "TODO=\"★ DONE\"" 'file))))
M-x org-archive-subtree C-x-z
(一直按 z)接近于一个命令解决方案。不确定是否对任何人有所帮助 :) - bgs