aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--oni-org/oni-org.el38
1 files 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