Подстановочный знак в org-повестки дня-файлы

10

У меня есть базовый проект папки ~/prj, внутри которой у меня есть много отдельных проектов, 2014_prj1, 2014_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_prjX) org-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
андреас-ч
источник

Ответы:

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

Я создал более общий подход, который позволяет вам иметь более глубокое вложение. Например, у меня есть богатое дерево заметок, и в некоторых папках есть файл tasks.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)))
Александр Артеменко
источник