将链接的组织文件添加到org-agenda-files

时间:2016-06-27 19:29:12

标签: emacs org-mode

在.emacs我有

(org-agenda-files (quote ("d:/GTD/a.org" "d:/GTD/b.org" "d:/GTD/c.org")))

在这三个文件中,我可以链接到其他组织文件。是否可以(使用当前缓冲区)扫描a.org,b.org,c.org并添加指向org-agenda-files的链接?

更新1。

有一种可能性。链接的文件位于几个明确定义的文件夹中。在How to add .org files under org-directory to agenda上有关于如何添加所有文件的说明。有没有办法只在or.org,b.org,c.org中添加链接到org-agenda文件?

更新2。

我不知道为什么,但在添加(交互式)后,功能在emacs中变得可见。该功能的完整代码:

    (defun add-links-to-org-agenda-files ()
       (interactive)
       (org-element-map  
           (org-element-parse-buffer)
           'link
           (lambda (x) 
             (if (equal (org-element-property :type x) "file")
                (add-to-list 'org-agenda-files (org-element-property :path x))))))

此致

Krzysiek

1 个答案:

答案 0 :(得分:3)

在org AFAIK中没有这样的内容。但是,您应该能够编写执行此操作的lisp函数。最低限度看起来像这样:

    (org-element-map
        (org-element-parse-buffer)
        'link
        (lambda (x) (message (org-element-property :path x))))

从当前缓冲区的解析树中选择所有链接元素,并将函数应用于每个元素。该函数选择每个链接的path属性并将其打印在echo区域中。您只想添加代码以选择“文件”类型的链接,并且您希望该函数将它们添加到org-agenda-list,如果它们不存在的话。这是一个可以做到这一点的函数 - 请注意,您必须将此函数应用于org-agenda-files列表的每个文件,这是一个练习:

    (defun add-links-to-org-agenda-files ()
       (org-element-map  
           (org-element-parse-buffer)
           'link
           (lambda (x) 
             (if (equal (org-element-property :type x) "file")
                (add-to-list 'org-agenda-files (org-element-property :path x))))))

有关详细信息,请参阅org-element API page