From 54e9c9c26f420fca9d088c9383f2f117a7a58bdd Mon Sep 17 00:00:00 2001 From: Tom Willemse Date: Wed, 11 May 2022 20:21:53 -0700 Subject: [PATCH] =?UTF-8?q?[oni-org]=20Combine=20=E2=80=98oni-move-subtree?= =?UTF-8?q?-*=E2=80=99=20into=20=E2=80=98oni-org-move-subtree=E2=80=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- oni-org/oni-org.el | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/oni-org/oni-org.el b/oni-org/oni-org.el index 9a728be..6d69416 100644 --- a/oni-org/oni-org.el +++ b/oni-org/oni-org.el @@ -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