Run a hook when we remove a node

This commit is contained in:
Chris Barrett
2022-09-22 23:13:17 +12:00
parent 0e3fca4634
commit 29cbc44c48

View File

@@ -64,6 +64,14 @@ It is called with the new node as the current buffer."
:group 'org-roam-rewrite :group 'org-roam-rewrite
:type 'hook) :type 'hook)
(defcustom org-roam-rewrite-node-removed-functions nil
"Hook functions run after a node has been removed.
It is called with a plist, containing the following attributes
from the original node: :title, :level, :file, :id"
:group 'org-roam-rewrite
:type 'hook)
(defun org-roam-rewrite--set-title-keyword (text) (defun org-roam-rewrite--set-title-keyword (text)
@@ -141,25 +149,30 @@ It is called with the new node as the current buffer."
(save-buffer)) (save-buffer))
(defun org-roam-rewrite--delete-node-kill-buffer (node) (defun org-roam-rewrite--delete-node-kill-buffer (node)
(cond (let ((level (org-roam-node-level node))
((zerop (org-roam-node-level node)) (file (org-roam-node-file node))
(when-let* ((buf (find-buffer-visiting (org-roam-node-file node)))) (id (org-roam-node-id node)))
(kill-buffer buf)) (cond
(delete-file (org-roam-node-file node))) ((zerop level)
(t (when-let* ((buf (find-buffer-visiting file)))
(let ((buffer-visiting-p (find-buffer-visiting (org-roam-node-file node)))) (kill-buffer buf))
(org-with-point-at (org-roam-node-marker node) (delete-file file))
(goto-char (point-min)) (t
(when (search-forward-regexp (rx-to-string `(and (let ((buffer-visiting-p (find-buffer-visiting file)))
bol (org-with-point-at (org-roam-node-marker node)
(* space) ":ID:" (goto-char (point-min))
(* space) (when (search-forward-regexp (rx-to-string `(and
,(org-roam-node-id node)))) bol
(let ((message-log-max)) (* space) ":ID:"
(org-cut-subtree))) (* space)
(save-buffer) ,id)))
(unless buffer-visiting-p (let ((message-log-max))
(kill-buffer))))))) (org-cut-subtree)))
(save-buffer)
(unless buffer-visiting-p
(kill-buffer))))))
(run-hook-with-args 'org-roam-rewrite-node-removed-functions
(list :title (org-roam-node-title node) :id id :file file :level level))))
;;;###autoload ;;;###autoload
(defun org-roam-rewrite-rename (node new-title) (defun org-roam-rewrite-rename (node new-title)