mirror of
https://github.com/chrisbarrett/nursery
synced 2025-09-28 16:50:58 -05:00
Fix dblock link sorting when a capture group changes link desc
This commit is contained in:
@@ -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,11 +385,12 @@ 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)
|
||||||
(string-join lines "\n")))
|
(seq-map #'org-roam-dblocks--link-to-list-item))))
|
||||||
|
(string-join lines "\n")))
|
||||||
(error (error-message-string err))))
|
(error (error-message-string err))))
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
|
Reference in New Issue
Block a user