1
0
Fork 0

[oni-org] Combine ‘oni-move-subtree-*’ into ‘oni-org-move-subtree’

These two functions do essentially the same thing, but in different directions.
This can also be done with one single interactive function. This way there is
only one thing to call.
This commit is contained in:
Tom Willemse 2022-05-11 20:21:53 -07:00
parent aaa5b89d0a
commit 54e9c9c26f

View file

@ -860,24 +860,28 @@ This is an around advice for org-html--svg-image as FUN."
;;; Moving subtrees
(defun oni-move-subtree-above ()
(interactive)
(let ((target (org-refile-get-location "Move subtree above")))
(org-cut-subtree)
(goto-char (nth 3 target))
(org-paste-subtree)))
(defun oni-org-move-subtree (target placement)
"Move the subtree at point to TARGET and place it at PLACEMENT.
(defun oni-move-subtree-below ()
(interactive)
(let* ((components (org-heading-components))
(target (org-refile-get-location "Move subtree below"))
(marker (copy-marker (nth 3 target))))
(org-cut-subtree)
(goto-char marker)
(org-forward-heading-same-level 1)
(when (= (point) (marker-position marker))
(goto-char (point-max)))
(org-paste-subtree (car components))))
TARGET should be a point or a marker in the current buffer.
PLACEMENT should be a symbol. If PLACEMENT is above, it'll be
placed above TARGET. Otherwise it will be placed below it."
(interactive
(list (let ((org-refile-targets '((nil :maxlevel . 1)))
(org-refile-use-outline-path nil))
(org-refile-get-location "Move subtree to:"))
(intern (completing-read "Above / Below: " '(above below) nil t))))
(save-excursion
(let ((heading-level (car (org-heading-components)))
(marker (copy-marker (nth 3 target))))
(org-cut-subtree)
(goto-char marker)
(unless (eq placement 'above)
(org-forward-heading-same-level 1)
(when (= (point) (marker-position marker))
(goto-char (point-max))))
(org-paste-subtree heading-level))))
(provide 'oni-org)
;;; oni-org.el ends here