2017-02-14 74 views
0

由于多种原因,我有一个包含长待办事项列表的单个文件组织模式文件,其中优先级任务具有截止日期,非优先任务没有截止日期。
该文件现在太大并且减慢了我的快捷方式。我的目标是将有和没有截止日期的任务分成两个单独的文件。
我试图在日历上显示任务并复制最近的任务(组织模式显示长达14天),但这只会允许我复制标题而不是任务主体。在截止日期前选择组织模式下的条目

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

+0

这听起来像你还没有探索过'Mx org-agenda'的力量 - 我的日常工作流使用了按照四个标准对我的条目进行排序的组合 - 首先是'a',然后是'o',然后最后用'org-sort-entries'作为'org-mode'文本文件,然后当我想拉起自定义搜索时,我使用三个org-agenda函数根据需要'org-agenda-list','org-tags-view'和'org-search-view'。如果你想要一个复杂的例子在flat-text'org-mode'文件中以编程方式排序,这里是一个链接:http://stackoverflow.com/a/22232709/2112489 – lawlist

回答

2

我相信你可以很容易地按截止日期(C-c ^然后d)对你的文件进行排序,然后找到包括最后期限的最后一个标题,用C-Space标记所有期限任务,并将这些标题剪切并粘贴到一个新文件中。

这有帮助吗?

+0

谢谢,但排序部分没有工作。这是您设置的自定义快捷方式吗? –

+0

不,它只是简单的组织排序 – sanenr9

+1

在尝试排序之前,您可能必须正确定位游标 - 请参阅函数org-sort-entries的doc。 – Nick

0

上一个答案中的排序/剪切/粘贴方法应该可以正常工作。如果你想深入到组织模式,下面的替代方法可能是有意义的,但它需要一些关于lisp的知识以及一些组织模式功能。

这个想法是使用org-refile重写条目。但是,这只会记录一个条目,所以我们使用org-map-entries来映射所有条目。

这个想法很简单,但实现有点混乱。首先,我们需要通过设置变量org-refile-targets来告诉org-refile需要重写的位置,但由于可能存在全局设置,因此我们需要使用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-地图输入的开始移动到行的末尾在尝试下一场比赛之前;所以如果你有两个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。不幸的是,您会被询问有关每个致电org-refile的重新加载目的地,但我没有深入探讨如何驯服它所遭受的交互的适合。为此目的的建议值得欢迎。

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

相关问题