feat: Improve Org agenda filtering

Use ripgrip to only include files that actually have active todos in the
agenda. This vastly decreases the number of files that need to be loaded.
This commit is contained in:
Nathan McCarty 2022-10-04 21:52:51 -04:00
parent 8769246b8b
commit 3375db2ea6
Signed by: thatonelutenist
GPG Key ID: D70DA3DD4D1E9F96
1 changed files with 10 additions and 6 deletions

View File

@ -276,17 +276,21 @@ Setup org-superstar-mode, to make lists and bullets pretty
(setq org-agenda-files
(seq-filter (lambda (item)
(and
;; Only accept things that are a directory, or an org file
(or (file-directory-p item)
(string-match-p ".*org$" item))
;; Exclude the syncthing folder
(not (string-match-p ".*stfolder$" item))
;; Exclude the elfeed data folder
(not (string-match-p (concat "^" (regexp-quote org-directory) "elfeed/.*") item))))
(directory-files-recursively org-directory directory-files-no-dot-files-regexp)))))
(not (string-match-p (concat "^" (regexp-quote org-directory) "elfeed/.*") item))
;; Only accept org files
(string-match-p ".*org$" item)
;; Make sure the file actually has in-progress todo markers in it
(let ((regex "^\\*+\\s*(TODO|PROJ|LOOP|STRT|WAIT|HOLD|IDEA|\\[ \\]|\\[-\\]|\\[?\\])")
(item (expand-file-name item)))
;; Use ripgrep to test for active todos in the file
(eq 0 (call-process "rg" nil nil nil "-q" regex item)))))
(directory-files-recursively org-directory directory-files-no-dot-files-regexp))))
;; Update the timer, first canceling the old one
(when nm/org-agenda-files-timer
(cancel-timer nm/org-agenda-files-timer)
(cancel-timer nm/org-agenda-files-timer))
(setq nm/org-agenda-files-timer (run-with-timer 60 nil 'nm/update-org-agenda-files))))
(after! org