diff --git a/CHANGELOG.md b/CHANGELOG.md index 048fe14..c73c8d9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ ### Added - [#2138](https://github.com/org-roam/org-roam/pull/2138) export: add new module - [#2158](https://github.com/org-roam/org-roam/pull/2158) db: support emacsql-sqlite-builtin and emacsql-sqlite-module +- [#2160](https://github.com/org-roam/org-roam/pull/2160) core: support a list of `org-roam-file-exclude-regexp` ### Removed ### Fixed @@ -13,6 +14,7 @@ - [#2156](https://github.com/org-roam/org-roam/pull/2157) capture: templates with functions are handled correctly to avoid signaling `char-or-string-p` ### Changed +- [#2160](https://github.com/org-roam/org-roam/pull/2160) core: ignore files in `org-attach-id-dir` by default ## 2.2.1 ### Breaking diff --git a/org-roam.el b/org-roam.el index 35efd02..4832af7 100644 --- a/org-roam.el +++ b/org-roam.el @@ -83,6 +83,7 @@ (require 'emacsql-sqlite) (require 'org) +(require 'org-attach) ; To set `org-attach-id-dir' (require 'org-id) (require 'ol) (require 'org-element) @@ -136,9 +137,11 @@ responsibility to ensure that." :type '(repeat string) :group 'org-roam) -(defcustom org-roam-file-exclude-regexp nil +(defcustom org-roam-file-exclude-regexp (list org-attach-id-dir) "Files matching this regular expression are excluded from the Org-roam." :type '(choice + (repeat + (string :tag "Regular expression matching files to ignore")) (string :tag "Regular expression matching files to ignore") (const :tag "Include everything" nil)) :group 'org-roam) @@ -193,14 +196,25 @@ FILE is an Org-roam file if: (ext (when path (org-roam--file-name-extension path))) (ext (if (string= ext "gpg") (org-roam--file-name-extension (file-name-sans-extension path)) - ext))) + ext)) + (org-roam-dir-p (org-roam-descendant-of-p path org-roam-directory)) + (valid-file-ext-p (member ext org-roam-file-extensions)) + (match-exclude-regexp-p + (cond + ((not org-roam-file-exclude-regexp) nil) + ((stringp org-roam-file-exclude-regexp) + (string-match-p org-roam-file-exclude-regexp path)) + ((listp org-roam-file-exclude-regexp) + (let (is-match) + (dolist (exclude-re org-roam-file-exclude-regexp) + (setq is-match (or is-match (string-match-p exclude-re path)))) + is-match))))) (save-match-data (and path - (member ext org-roam-file-extensions) - (not (and org-roam-file-exclude-regexp - (string-match-p org-roam-file-exclude-regexp path))) - (org-roam-descendant-of-p path (expand-file-name org-roam-directory)))))) + org-roam-dir-p + valid-file-ext-p + (not match-exclude-regexp-p))))) (defun org-roam-list-files () "Return a list of all Org-roam files under `org-roam-directory'.