Підстановка в 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

Я створив більш загальний підхід, який дозволяє глибше вкладатись. Наприклад, у мене багате дерево приміток, а деякі папки містять у ньому файл 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)))
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.