议程文件中的通配符


10

我有一个项目的基础文件夹,~/prj,这里面我有很多个人项目,2014_prj12014_prj2,...,这里面我有,除其他外,一个doc文件夹。布局如下所示:

~/prj
~/prj/2014_prj1
~/prj/2014_prj1/README.org
~/prj/2014_prj1/data
~/prj/2014_prj1/doc
~/prj/2014_prj2
~/prj/2014_prj2/README.org
~/prj/2014_prj2/data
~/prj/2014_prj2/doc

现在,我想将所有项目目录(2014_prjXorg-agenda-files以及doc项目目录的所有子目录添加到。该data文件夹应该不会成为其中的一部分org-agenda-files,因为它们很可能包含的文件10000S。

我该如何实现?我尝试了一个简单的

(setq org-agenda-files (quote ("~/doc/notes"
                               "~/.emacs.d"
                               "~/prj/*/doc"
                               )
                        )

但这给了我错误

Non-existing agenda file ~/prj/*/doc

Answers:


19

您可以使用该函数file-expand-wildcards获取所有与通配符匹配的文件,并将它们添加到org-agenda-files变量中。类似于以下内容

(setq org-agenda-files (append '("~/doc/notes" "~/.emacs.d") (file-expand-wildcards "~/prj/*/doc")))

是否有一个钩子可以动态计算文件集?例如,如果我.org在启动emacs之后添加新文件,我仍然希望它成为的一部分org-agenda-files
约翰·怀斯曼

1

我创建了一种更通用的方法,它使您可以进行更深入的嵌套。例如,我的笔记树很丰富,有些文件夹中包含task.org文件。此代码将收集所有动态信息:

(defun set-org-agenda-files ()
  (require 'f)
  (require 's)

  (setq org-agenda-files
    (f-entries org-directory
               (lambda (filename)
                 (s-ends-with-p "/tasks.org" filename))
               t)))
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.