org-agenda-filesのワイルドカード


10

私は、プロジェクトベースのフォルダを持って、~/prj私は多くの個々のプロジェクトを持っているの内側、2014_prj12014_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-filesdocプロジェクトディレクトリのすべてのサブディレクトリをに追加したいと思います。dataフォルダはすべきではないの一部であるorg-agenda-files、彼らはおそらくファイルの10,000秒を含めることができるため、。

どうすればこれを達成できますか?簡単に試してみました

(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")))

ファイルのセットを動的に計算できるフックはありますか?たとえば、.orgemacsを起動した後に新しいファイルを追加した場合でも、それをの一部にしたいと思いorg-agenda-filesます。
ジョンワイズマン

1

より一般的なアプローチを作成しました。これにより、ネストを深くすることができます。たとえば、私には豊富なメモのツリーがあり、いくつかのフォルダにはtasks.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)))
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.