在org-mode中选择条目,并在截止日期前

时间:2017-02-14 09:42:49

标签: emacs org-mode

由于多种原因,我有一个带有长待办事项列表的单个文件组织模式文件,其中优先级任务有截止日期,非优先级任务没有截止日期。
该文件现在太大了,减慢了我的快捷方式。我的目标是将有或没有截止日期的任务分成两个单独的文件。
我试图在日历上显示任务并复制最新的任务(组织模式显示长达14天),但是只允许我复制他们的标题,而不是任务正文。

有没有办法只选择带有截止日期的条目(标有“*”),还有其他所有内容?

2 个答案:

答案 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>}的每次调用时,系统会询问您的重新启动目的地,但我没有深入研究如何驯服它所遭受的交互。欢迎提出这方面的建议。

顺便说一下,请务必备份原始文件。