由于多种原因,我有一个带有长待办事项列表的单个文件组织模式文件,其中优先级任务有截止日期,非优先级任务没有截止日期。
该文件现在太大了,减慢了我的快捷方式。我的目标是将有或没有截止日期的任务分成两个单独的文件。
我试图在日历上显示任务并复制最新的任务(组织模式显示长达14天),但是只允许我复制他们的标题,而不是任务正文。
有没有办法只选择带有截止日期的条目(标有“*”),还有其他所有内容?
答案 0 :(得分:2)
我相信您可以按截止日期(Cc ^然后是d)轻松排序文件,然后找到最后一个标题,包括截止日期,用C-Space标记所有截止日期任务,并将这些标题剪切并粘贴到新文件中。 / p>
这有帮助吗?
答案 1 :(得分:0)
上一个答案中的排序/剪切/粘贴方法应该可以正常工作。如果您想深入了解org-mode,可能会有以下替代方法,但它需要一些lisp知识以及一些组织模式函数。
我们的想法是使用org-refile
重新填充条目。但是,这只会导入一个条目,因此我们使用org-map-entries
将其映射到所有条目。
这个想法很简单,但实施起来有点麻烦。首先,我们需要通过设置变量org-refile
来告诉org-refile-targets
重新定位的位置,但由于可能存在全局设置,我们需要使用let
在本地重新定义此变量。
其次,我们需要选择正确的条目:org-map-entries
采用可用于此的matching
参数;特别是,"DEADLINE<>\"\""
(测试条目的DEADLINE特殊属性不等于空字符串)可以用于此。然后几乎工作:
(let ((org-refile-targets '(("refiled.org" :level . 1))))
(org-map-entries #'org-refile "DEADLINE<>\"\"" 'file))
差不多但不完全:每次调用org-refile
时,它会在下一行的开头留下一个点,而org-map-entries会在尝试下一个匹配之前将其移到行尾;所以如果你有两个DEADLINE条目,一个接一个,第二个将被遗漏。解决这个问题的方法是确保将org-map-continue-from
设置为缓冲区中不会错过下一个标题的位置。将所有这些放在一起,您可以定义以下两个函数:
(defun ndk-refile ()
(org-refile)
(beginning-of-line)
(setq org-map-continue-from (point)))
(defun ndk-refile-all ()
(interactive)
(let ((org-refile-targets '(("refiled.org" :level . 1))))
(org-map-entries #'ndk-refile "DEADLINE<>\"\"" 'file)))
使用refiled.org
第一级标题创建* Tasks
文件,然后使用M-x ndk-refile-all
调用后一个函数。不幸的是,在 {/ 1>}的每次调用时,系统会询问您的重新启动目的地,但我没有深入研究如何驯服它所遭受的交互。欢迎提出这方面的建议。
顺便说一下,请务必备份原始文件。