Fix dblock link sorting when a capture group changes link desc

This commit is contained in:
Chris Barrett
2022-08-25 21:07:24 +12:00
parent c97f68e9f3
commit 4bce274ed2

View File

@@ -159,6 +159,16 @@ their blocks updated automatically."
(plisty-define org-roam-dblocks-link
:required (:id :desc))
(defun org-roam-dblocks--link-to-list-item (link)
(concat "- " (org-link-make-string (concat "id:" (org-roam-dblocks-link-id link))
(org-roam-dblocks-link-desc link))))
(defalias 'org-roam-dblocks--link-sorting
(-on #'string-lessp (-compose #'downcase #'org-roam-dblocks-link-desc)))
(plisty-define org-roam-dblocks-args (plisty-define org-roam-dblocks-args
:optional (:id :match :tags :optional (:id :match :tags
:name :indentation-column :content :name :indentation-column :content
@@ -168,12 +178,11 @@ their blocks updated automatically."
(let ((regexp-parser (when-let* ((matcher (org-roam-dblocks-args-match params))) (let ((regexp-parser (when-let* ((matcher (org-roam-dblocks-args-match params)))
(org-roam-dblocks--parse-regexp-form matcher)))) (org-roam-dblocks--parse-regexp-form matcher))))
(lambda (node) (lambda (node)
(let* ((link (concat "id:" (org-roam-node-id node))) (let ((title (org-roam-node-title node)))
(title (org-roam-node-title node)) (org-roam-dblocks-link-create :id (org-roam-node-id node)
(desc (or (when regexp-parser :desc (or (when regexp-parser
(cadr (s-match regexp-parser title))) (cadr (s-match regexp-parser title)))
title))) title))))))
(concat "- " (org-link-make-string link desc))))))
(defun org-roam-dblocks--parse-regexp-form (form) (defun org-roam-dblocks--parse-regexp-form (form)
;;; Quick tests: ;;; Quick tests:
@@ -268,9 +277,6 @@ predicates.")
(not (or (seq-intersection tags forbidden-tags) (not (or (seq-intersection tags forbidden-tags)
(seq-difference required-tags tags))))) (seq-difference required-tags tags)))))
(defalias 'org-roam-dblocks--node-sorting
(-on #'string-lessp (-compose #'downcase #'org-roam-node-title)))
(defun org-roam-dblocks--compiled-predicates (params) (defun org-roam-dblocks--compiled-predicates (params)
(-let ((tags (org-tags-filter-parse (org-roam-dblocks-args-tags params))) (-let ((tags (org-tags-filter-parse (org-roam-dblocks-args-tags params)))
(match (org-roam-dblocks--parse-regexp-form (org-roam-dblocks-args-match params))) (match (org-roam-dblocks--parse-regexp-form (org-roam-dblocks-args-match params)))
@@ -346,11 +352,11 @@ and old content."
(org-roam-dblocks-args-assert params t) (org-roam-dblocks-args-assert params t)
(-let* ((id (org-roam-dblocks-args-id params)) (-let* ((id (org-roam-dblocks-args-id params))
(node (if id (org-roam-node-from-id id) (org-roam-node-at-point t))) (node (if id (org-roam-node-from-id id) (org-roam-node-at-point t)))
(backlinks (->> (lines (->> (org-roam-backlinks-get node :unique t)
(org-roam-backlinks-get node :unique t)
(-keep (-compose (org-roam-dblocks--compiled-predicates params) #'org-roam-backlink-source-node)) (-keep (-compose (org-roam-dblocks--compiled-predicates params) #'org-roam-backlink-source-node))
(seq-sort 'org-roam-dblocks--node-sorting))) (seq-map (org-roam-dblocks--make-link-formatter params))
(lines (seq-map (org-roam-dblocks--make-link-formatter params) backlinks))) (seq-sort 'org-roam-dblocks--link-sorting)
(seq-map #'org-roam-dblocks--link-to-list-item))))
(string-join lines "\n"))) (string-join lines "\n")))
(error (error-message-string err)))) (error (error-message-string err))))
@@ -379,10 +385,11 @@ and old content."
(org-roam-dblocks-args-filter params) (org-roam-dblocks-args-filter params)
(org-roam-dblocks-args-remove params)) (org-roam-dblocks-args-remove params))
t "Must provide at least one of :tags, :match, :filter or :remove") t "Must provide at least one of :tags, :match, :filter or :remove")
(-let* ((backlinks (->> (org-roam-node-list) (let ((lines (->> (org-roam-node-list)
(-keep (org-roam-dblocks--compiled-predicates params)) (-keep (org-roam-dblocks--compiled-predicates params))
(seq-sort 'org-roam-dblocks--node-sorting))) (seq-map (org-roam-dblocks--make-link-formatter params))
(lines (seq-map (org-roam-dblocks--make-link-formatter params) backlinks))) (seq-sort #'org-roam-dblocks--link-sorting)
(seq-map #'org-roam-dblocks--link-to-list-item))))
(string-join lines "\n"))) (string-join lines "\n")))
(error (error-message-string err)))) (error (error-message-string err))))