Symbol wieloznaczny w plikach org-agenda


10

Mam folder bazowy projekt ~/prj, wewnątrz którego mam wiele indywidualnych projektów, 2014_prj1, 2014_prj2, ..., wewnątrz którego mam, między innymi, docfolderu. Układ wygląda następująco:

~/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

Teraz chciałbym dodać wszystkie katalogi projektu ( 2014_prjX) org-agenda-files, a także wszystkie docpodkatalogi katalogów projektu. Te datafoldery powinny nie być częścią org-agenda-files, ponieważ mogą ewentualnie zawierać 10000S plików.

Jak mogę to osiągnąć? Próbowałem prosty

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

ale to daje mi błąd

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

Odpowiedzi:


19

Możesz użyć tej funkcji, file-expand-wildcardsaby wszystkie pliki pasujące do znaku wieloznacznego dodały je do org-agenda-fileszmiennej. Coś jak poniżej

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

Czy istnieje haczyk, który pozwalałby na dynamiczne obliczanie zestawu plików? Np. Jeśli dodam nowy .orgplik po uruchomieniu emacsa, nadal chciałbym, aby był częścią org-agenda-files.
John Wiseman,

1

Stworzyłem bardziej ogólne podejście, które pozwala na głębsze zagnieżdżanie. Na przykład mam bogate drzewo notatek, a niektóre foldery zawierają plik tasks.org. Ten kod zbierze wszystkie elementy:

(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)))
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.