Carattere jolly in file agenda-org


10

Ho una cartella di base del progetto, ~/prjall'interno del quale ho molti progetti individuali, 2014_prj1, 2014_prj2, ..., all'interno del quale ho, tra gli altri, una doccartella. Il layout è simile al seguente:

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

Ora vorrei aggiungere tutte le directory di progetto ( 2014_prjX) a org-agenda-files, così come tutte le docsottodirectory delle directory di progetto. Le datacartelle non dovrebbero far parte di org-agenda-filesesse, poiché possono contenere 10000 file.

Come posso raggiungere questo obiettivo? Ho provato un semplice

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

ma questo mi dà l'errore

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

Risposte:


19

È possibile utilizzare la funzione file-expand-wildcardsper ottenere tutti i file corrispondenti al carattere jolly e aggiungerli alla org-agenda-filesvariabile. Qualcosa di simile al seguente

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

Esiste un hook che consentirebbe di calcolare dinamicamente l'insieme di file? Ad esempio, se aggiungo un nuovo .orgfile dopo l'avvio di emacs, vorrei comunque farne parte org-agenda-files.
John Wiseman,

1

Ho creato un approccio più generico, che ti consente di avere un annidamento più profondo. Ad esempio, ho un ricco albero di note e alcune cartelle contengono il file task.org. Questo codice raccoglierà tutto al volo:

(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)))
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.