Curinga em arquivos de agenda organizacional


10

Eu tenho uma pasta base do projeto, ~/prj, dentro do qual eu tenho muitos projectos individuais, 2014_prj1, 2014_prj2, ..., dentro do qual eu tenho, entre outros, uma docpasta. O layout fica assim:

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

Agora eu gostaria de adicionar todos os diretórios do projeto ( 2014_prjX) org-agenda-filese todos os docsubdiretórios dos diretórios do projeto. As datapastas não devem fazer parte org-agenda-files, porque elas podem conter 10000s de arquivos.

Como posso conseguir isso? Eu tentei um simples

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

mas isso me dá o erro

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

Respostas:


19

Você pode usar a função file-expand-wildcardspara obter todos os arquivos correspondentes ao curinga e adicioná-los à org-agenda-filesvariável. Algo como o seguinte

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

Existe um gancho que permita que o conjunto de arquivos seja computado dinamicamente? Por exemplo, se eu adicionar um novo .orgarquivo após iniciar o emacs, ainda gostaria que ele fizesse parte dele org-agenda-files.
John Wiseman

1

Criei uma abordagem mais genérica, que permite um aninhamento mais profundo. Por exemplo, eu tenho uma rica árvore de notas e algumas pastas têm o arquivo tasks.org. Este código coletará todas as informações instantâneas:

(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)))
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.