mirror of
https://github.com/org-roam/org-roam
synced 2025-09-16 15:56:48 -05:00
(feat): upgrade org-roam-graph-exclude-matcher
to accept a list (#296)
Closes #295
This commit is contained in:
@@ -8,6 +8,7 @@
|
||||
* [#284][gh-284], [#289][gh-289] Configurable `org-roam-completion-system` with options `'default`, `'ido`, `'ivy` and `'helm`.
|
||||
* [#289][gh-289] Add customizable `org-roam-fuzzy-match` to allow fuzzy-matching of candidates
|
||||
* [#290][gh-290] Add `org-roam-date-title-format` and `org-roam-date-filename-format` for customizing Org-roam's date files
|
||||
* [#296][gh-296] Allow multiple exclusion matchers in `org-roam-graph-exclude-matcher`
|
||||
|
||||
## Bugfixes
|
||||
* [#293][gh-293] Fix capture templates not working as expected for `org-roam-find-file`
|
||||
@@ -141,6 +142,7 @@ Mostly a documentation/cleanup release.
|
||||
[gh-289]: https://github.com/jethrokuan/org-roam/pull/289
|
||||
[gh-290]: https://github.com/jethrokuan/org-roam/pull/290
|
||||
[gh-293]: https://github.com/jethrokuan/org-roam/pull/293
|
||||
[gh-296]: https://github.com/jethrokuan/org-roam/pull/296
|
||||
|
||||
# Local Variables:
|
||||
# eval: (auto-fill-mode -1)
|
||||
|
@@ -115,15 +115,28 @@ SVG, you may choose to set it to any compatible program:
|
||||
(setq org-roam-graph-viewer "/path/to/image-viewer")
|
||||
```
|
||||
|
||||
### Excluding Nodes and Edges
|
||||
One may want to exclude certain files to declutter the graph. You can do so by setting `org-roam-graph-exclude-matcher`.
|
||||
|
||||
```
|
||||
(setq org-roam-graph-exclude-matcher '("private" "dailies"))
|
||||
```
|
||||
|
||||
This setting excludes all files whose path contain "private" or "dailies".
|
||||
|
||||
## Org-roam Completion System
|
||||
|
||||
Org-roam offers completion when choosing note titles etc.
|
||||
The completion system is configurable. The default setting,
|
||||
|
||||
```
|
||||
(setq org-roam-completion-system 'default)
|
||||
```
|
||||
|
||||
uses Emacs' standard `completing-read`. If you prefer [Helm](https://emacs-helm.github.io/helm/), use
|
||||
|
||||
```
|
||||
(setq org-roam-completion-system 'helm)
|
||||
```
|
||||
|
||||
Other options included `'ido`, and `'ivy'`.
|
||||
|
63
org-roam.el
63
org-roam.el
@@ -1222,10 +1222,17 @@ Example:
|
||||
:group 'org-roam)
|
||||
|
||||
(defcustom org-roam-graph-exclude-matcher nil
|
||||
"String for excluding nodes from the generated graph.
|
||||
"Matcher for excluding nodes from the generated graph.
|
||||
Any nodes and links for file paths matching this string is
|
||||
excluded from the graph."
|
||||
:type 'string
|
||||
excluded from the graph.
|
||||
|
||||
If value is a string, the string is the only matcher.
|
||||
|
||||
If value is a list, all file paths matching any of the strings
|
||||
are excluded."
|
||||
:type '(choice
|
||||
(string :tag "Matcher")
|
||||
(list :tag "Matchers"))
|
||||
:group 'org-roam)
|
||||
|
||||
(defcustom org-roam-graph-node-shape "ellipse"
|
||||
@@ -1234,6 +1241,34 @@ excluded from the graph."
|
||||
:group 'org-roam)
|
||||
|
||||
;;;; Functions
|
||||
(defmacro org-roam--graph-expand-matcher (col &optional negate where)
|
||||
"Return the exclusion regexp from `org-roam-graph-exclude-matcher'.
|
||||
COL is the symbol to be matched against. if NEGATE, add :not to sql query.
|
||||
set WHERE to true if WHERE query already exists."
|
||||
(declare (indent 0) (debug t))
|
||||
(let ((matchers (cond ((null org-roam-graph-exclude-matcher)
|
||||
nil)
|
||||
((stringp org-roam-graph-exclude-matcher)
|
||||
(cons (concat "%" org-roam-graph-exclude-matcher "%") nil))
|
||||
((listp org-roam-graph-exclude-matcher)
|
||||
(mapcar (lambda (m)
|
||||
(concat "%" m "%"))
|
||||
org-roam-graph-exclude-matcher))
|
||||
(t
|
||||
(error "Invalid org-roam-graph-exclude-matcher"))))
|
||||
res)
|
||||
(dolist (match matchers)
|
||||
(if where
|
||||
(push :and res)
|
||||
(push :where res)
|
||||
(setq where t))
|
||||
(push col res)
|
||||
(when negate
|
||||
(push :not res))
|
||||
(push :like res)
|
||||
(push match res))
|
||||
(cons 'list (nreverse res))))
|
||||
|
||||
(defun org-roam--build-graph ()
|
||||
"Build the Graphviz string.
|
||||
The Org-roam database titles table is read, to obtain the list of titles.
|
||||
@@ -1241,22 +1276,16 @@ The file-links table is then read to obtain all directed links, and formatted
|
||||
into a digraph."
|
||||
(org-roam--db-ensure-built)
|
||||
(org-roam--with-temp-buffer
|
||||
(let* ((matcher (concat "%" org-roam-graph-exclude-matcher "%"))
|
||||
(nodes (if org-roam-graph-exclude-matcher
|
||||
(org-roam-sql [:select [file titles]
|
||||
(let* ((re (org-roam--graph-get-exclude-regexp))
|
||||
(node-query `[:select [file titles]
|
||||
:from titles
|
||||
:where file :not :like $s1]
|
||||
matcher)
|
||||
(org-roam-sql [:select [file titles]
|
||||
:from titles])))
|
||||
(edges (if org-roam-graph-exclude-matcher
|
||||
(org-roam-sql [:select :distinct [file-to file-from]
|
||||
,@(org-roam--graph-expand-matcher 'file t)])
|
||||
(nodes (org-roam-sql node-query))
|
||||
(edges-query `[:select :distinct [file-to file-from]
|
||||
:from file-links
|
||||
:where file-to :not :like $s1
|
||||
:and file-from :not :like $s1]
|
||||
matcher)
|
||||
(org-roam-sql [:select :distinct [file-to file-from]
|
||||
:from file-links]))))
|
||||
,@(org-roam--graph-expand-matcher 'file-to t)
|
||||
,@(org-roam--graph-expand-matcher 'file-from t t)])
|
||||
(edges (org-roam-sql edges-query)))
|
||||
(insert "digraph \"org-roam\" {\n")
|
||||
(dolist (option org-roam-graphviz-extra-options)
|
||||
(insert (concat (car option)
|
||||
|
Reference in New Issue
Block a user