在 org-agenda-files 的顶级目录中递归添加 .org 文件需要很长时间

wdk*_*nls 5 emacs elisp org-mode

我试图找到一种方法来快速递归搜索组织文件的每个子目录。我找到了几个解决方案(Elisp Cookbookgithub上的几个解决方案),但它们不能处理我的实际使用情况(数百个目录(和子目录)和数百个组织文件)。它们似乎在我的系统上永远运行(Windows 7,max-lisp-eval-depth = 10000)。我的解决方法是将每个目录手动添加到我的 org-agenda-list 中,但这很烦人,我知道我可能忘记了一些。任何建议,将不胜感激。

Min*_*ang 6

没有看到其他人发过这个,所以我会这样做。您是否尝试过加载“find-list”库并使用其“find-lisp-find-files”功能?我在我的组织配置中添加了这些行并且它可以工作,但它可能不符合您的性能要求:

(load-library "find-lisp") (setq org-agenda-files (find-lisp-find-files "FOLDERNAME" "\.org$"))

来源:http : //emacs-orgmode.gnu.narkive.com/n5bQRs5t/o-multiple-recursive-directories-with-org-agenda-files


ffe*_*tte 2

当您知道目录结构已更改并且您有一些时间时,如何将 org-agenda 目录列表存储在您(自动)每隔一段时间更新的文件中。

例如,你可以使用这样的东西:

;; From http://www.emacswiki.org/emacs/ElispCookbook#toc58
(defun directory-dirs (dir)
  "Find all directories in DIR."
  (unless (file-directory-p dir)
    (error "Not a directory `%s'" dir))
  (let ((dir (directory-file-name dir))
        (dirs '())
        (files (directory-files dir nil nil t)))
    (dolist (file files)
      (unless (member file '("." ".."))
        (let ((file (concat dir "/" file)))
          (when (file-directory-p file)
            (setq dirs (append (cons file
                                     (directory-dirs file))
                               dirs))))))
    dirs))


(setq my-org-agenda-root "~/org")
(setq my-org-agenda-files-list "~/.emacs.d/org-agenda-list.el")

(defun my-update-org-agenda-files ()
  "Create or update the `my-org-agenda-files-list' file.

This file contains elisp code to set `org-agenda-files' to a
recursive list of all children under `my-org-agenda-root'. "
  (interactive)
  (with-temp-buffer
    (insert
     ";; Warning: this file has been automatically generated\n"
     ";; by `my-update-org-agenda-files'\n")
    (let ((dir-list (directory-dirs my-org-agenda-root))
          (print-level nil)
          (print-length nil))
      (cl-prettyprint `(setq org-agenda-files (quote ,dir-list))))
    (write-file my-org-agenda-files-list)))

(load my-org-agenda-files-list)
Run Code Online (Sandbox Code Playgroud)

每隔一段时间,运行M-xmy-update-org-agenda-files更新列表。