diff --git a/org-roam-node.el b/org-roam-node.el index 6d407ec..6543350 100644 --- a/org-roam-node.el +++ b/org-roam-node.el @@ -827,48 +827,50 @@ If region is active, then use it instead of the node at point." (nbuf (or (find-buffer-visiting file) (find-file-noselect file))) level reversed) - (if regionp + (if (equal (org-roam-node-at-point) node) + (user-error "Target is the same as current node") + (if regionp + (progn + (org-kill-new (buffer-substring region-start region-end)) + (org-save-markers-in-region region-start region-end)) (progn - (org-kill-new (buffer-substring region-start region-end)) - (org-save-markers-in-region region-start region-end)) - (progn - (if (org-before-first-heading-p) - (org-roam-demote-entire-buffer)) - (org-copy-subtree 1 nil t))) - (with-current-buffer nbuf - (org-with-wide-buffer - (goto-char (org-roam-node-point node)) - (setq level (org-get-valid-level (funcall outline-level) 1) - reversed (org-notes-order-reversed-p)) - (goto-char - (if reversed - (or (outline-next-heading) (point-max)) - (or (save-excursion (org-get-next-sibling)) - (org-end-of-subtree t t) - (point-max)))) - (unless (bolp) (newline)) - (org-paste-subtree level nil nil t) - (and org-auto-align-tags - (let ((org-loop-over-headlines-in-active-region nil)) - (org-align-tags))) - (when (fboundp 'deactivate-mark) (deactivate-mark)))) - (if regionp - (delete-region (point) (+ (point) (- region-end region-start))) - (org-preserve-local-variables - (delete-region - (and (org-back-to-heading t) (point)) - (min (1+ (buffer-size)) (org-end-of-subtree t t) (point))))) - ;; If the buffer end-up empty after the refile, kill it and delete its - ;; associated file. - (when (eq (buffer-size) 0) - (if (buffer-file-name) - (delete-file (buffer-file-name))) - (set-buffer-modified-p nil) - ;; In this was done during capture, abort the capture process. - (when (and org-capture-mode - (buffer-base-buffer (current-buffer))) - (org-capture-kill)) - (kill-buffer (current-buffer))))) + (if (org-before-first-heading-p) + (org-roam-demote-entire-buffer)) + (org-copy-subtree 1 nil t))) + (with-current-buffer nbuf + (org-with-wide-buffer + (goto-char (org-roam-node-point node)) + (setq level (org-get-valid-level (funcall outline-level) 1) + reversed (org-notes-order-reversed-p)) + (goto-char + (if reversed + (or (outline-next-heading) (point-max)) + (or (save-excursion (org-get-next-sibling)) + (org-end-of-subtree t t) + (point-max)))) + (unless (bolp) (newline)) + (org-paste-subtree level nil nil t) + (and org-auto-align-tags + (let ((org-loop-over-headlines-in-active-region nil)) + (org-align-tags))) + (when (fboundp 'deactivate-mark) (deactivate-mark)))) + (if regionp + (delete-region (point) (+ (point) (- region-end region-start))) + (org-preserve-local-variables + (delete-region + (and (org-back-to-heading t) (point)) + (min (1+ (buffer-size)) (org-end-of-subtree t t) (point))))) + ;; If the buffer end-up empty after the refile, kill it and delete its + ;; associated file. + (when (eq (buffer-size) 0) + (if (buffer-file-name) + (delete-file (buffer-file-name))) + (set-buffer-modified-p nil) + ;; In this was done during capture, abort the capture process. + (when (and org-capture-mode + (buffer-base-buffer (current-buffer))) + (org-capture-kill)) + (kill-buffer (current-buffer)))))) ;;;###autoload (defun org-roam-extract-subtree ()