From ed35d99c600b70f8698a514248cbfbfc7ef21fa3 Mon Sep 17 00:00:00 2001 From: Chris Barrett Date: Sun, 26 Mar 2023 11:24:05 +1300 Subject: [PATCH] Add some more hooks so I can trigger a git commit on node rename --- lisp/org-roam-rewrite.el | 67 ++++++++++++++++++++++++++++------------ 1 file changed, 48 insertions(+), 19 deletions(-) diff --git a/lisp/org-roam-rewrite.el b/lisp/org-roam-rewrite.el index 0723178..62b2f51 100644 --- a/lisp/org-roam-rewrite.el +++ b/lisp/org-roam-rewrite.el @@ -72,6 +72,28 @@ conforming to `org-roam-rewrite-backlink-transformer-result'." :group 'org-roam-rewrite :type 'function) +(defcustom org-roam-rewrite-backlink-modified-functions nil + "Hook function run after a backlink is modified. + +It is called with the renamed link at point, and is passed two arguments: + +1. a plist containing information about the link before and after + the rename, but before the link transformer has possibly made + modifications. It conforms to + `org-roam-rewrite-backlink-transformer-args'. + +2. a plist containing the data used to construct the new link. It + conforms to `org-roam-rewrite-backlink-transformer-result'." + :group 'org-roam-rewrite + :type 'hook) + +(defcustom org-roam-rewrite-backlinks-modified-in-file-functions nil + "Hook run after processing backlinks in a file caused modifications. + +It is called with a single argument: the file name that was modified." + :group 'org-roam-rewrite + :type 'hook) + (defcustom org-roam-rewrite-node-extracted-hook nil "Hook run after a node has been extracted successfully to a new file. @@ -176,29 +198,36 @@ It is called with the renamed node as the current buffer." (org-roam-backlinks-get prev-node)))) (pcase-dolist (`(,file . ,backlinks) backlinks-by-file) (with-temp-buffer - (insert-file-contents file) - (dolist (backlink (seq-sort-by #'org-roam-backlink-point #'> backlinks)) - (goto-char (org-roam-backlink-point backlink)) - (-when-let* (((&plist :beg :end :id prev-id :desc prev-desc) - (org-roam-rewrite--parse-link-at-point)) + (let ((modified-p)) - (transformed - (org-roam-rewrite-backlink-transformer-result-assert - (funcall org-roam-rewrite-backlink-transformer - (org-roam-rewrite-backlink-transformer-args-create - :prev-node prev-node - :new-node new-node - :prev-id prev-id - :prev-desc prev-desc - :new-id (org-roam-node-id new-node) - :new-desc new-desc)))) + (insert-file-contents file) + (dolist (backlink (seq-sort-by #'org-roam-backlink-point #'> backlinks)) + (goto-char (org-roam-backlink-point backlink)) + (-when-let* (((&plist :beg :end :id prev-id :desc prev-desc) + (org-roam-rewrite--parse-link-at-point)) - ((&plist :desc new-desc :id new-id) transformed)) + (transformer-args + (org-roam-rewrite-backlink-transformer-args-create + :prev-node prev-node + :new-node new-node + :prev-id prev-id + :prev-desc prev-desc + :new-id (org-roam-node-id new-node) + :new-desc new-desc)) + (transformed + (org-roam-rewrite-backlink-transformer-result-assert + (funcall org-roam-rewrite-backlink-transformer transformer-args))) - (replace-region-contents beg end (lambda () - (org-link-make-string (concat "id:" new-id) new-desc))))) + ((&plist :desc new-desc :id new-id) transformed)) - (write-region (point-min) (point-max) file))) + (replace-region-contents beg end (lambda () + (org-link-make-string (concat "id:" new-id) new-desc))) + (setq modified-p t) + (run-hook-with-args 'org-roam-rewrite-backlink-modified-functions transformer-args transformed))) + + (write-region (point-min) (point-max) file) + (when modified-p + (run-hook-with-args 'org-roam-rewrite-backlinks-modified-in-file-functions file))))) (pcase-dolist (`(,file . ,_) backlinks-by-file) (when-let* ((buf (find-buffer-visiting file)))