Comodín en org-agenda-files

10

Tengo una carpeta de base del proyecto, ~/prjdentro de los cuales tengo muchos proyectos individuales, 2014_prj1, 2014_prj2, ..., dentro de los cuales tengo, entre otras, una doccarpeta. El diseño se ve así:

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

Ahora me gustaría agregar todos los directorios del proyecto ( 2014_prjX) org-agenda-files, así como todos los docsubdirectorios de los directorios del proyecto. Las datacarpetas no deberían formar parte org-agenda-files, ya que posiblemente pueden contener 10000s de archivos.

¿Cómo puedo conseguir esto? Probé un simple

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

pero esto me da el error

Non-existing agenda file ~/prj/*/doc
andreas-h
fuente

Respuestas:

19

Puede usar la función file-expand-wildcardspara obtener todos los archivos que coinciden con el comodín y agregarlos a la org-agenda-filesvariable. Algo como lo siguiente

(setq org-agenda-files (append '("~/doc/notes" "~/.emacs.d") (file-expand-wildcards "~/prj/*/doc")))
Iqbal Ansari
fuente
¿Hay algún enlace que permita que el conjunto de archivos se calcule dinámicamente? Por ejemplo, si agrego un nuevo .orgarchivo después de iniciar emacs, todavía me gustaría que sea parte de org-agenda-files.
John Wiseman
1

Creé un enfoque más genérico, que le permite tener un anidamiento más profundo. Por ejemplo, tengo un rico árbol de notas y algunas carpetas tienen el archivo task.org. Este código recogerá toda la mosca:

(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)))
Alexander Artemenko
fuente