Function: org-move-subtree-down
org-move-subtree-down is an interactive and byte-compiled function
defined in org.el.gz.
Signature
(org-move-subtree-down &optional ARG)
Documentation
Move the current subtree down past ARG headlines of the same level.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/org/org.el.gz
(defun org-move-subtree-down (&optional arg)
"Move the current subtree down past ARG headlines of the same level."
(interactive "p")
(setq arg (prefix-numeric-value arg))
(org-preserve-local-variables
(let ((movfunc (if (> arg 0) 'org-get-next-sibling
'org-get-previous-sibling))
(ins-point (make-marker))
(cnt (abs arg))
(col (current-column))
beg end txt folded)
;; Select the tree
(org-back-to-heading)
(setq beg (point))
(save-match-data
(save-excursion (outline-end-of-heading)
(setq folded (org-invisible-p)))
(progn (org-end-of-subtree nil t)
(unless (eobp) (backward-char))))
(outline-next-heading)
(setq end (point))
(goto-char beg)
;; Find insertion point, with error handling
(while (> cnt 0)
(unless (and (funcall movfunc) (looking-at org-outline-regexp))
(goto-char beg)
(user-error "Cannot move past superior level or buffer limit"))
(setq cnt (1- cnt)))
(when (> arg 0)
;; Moving forward - still need to move over subtree
(org-end-of-subtree t t)
(save-excursion
(org-back-over-empty-lines)
(or (bolp) (newline))))
(move-marker ins-point (point))
(setq txt (buffer-substring beg end))
(org-save-markers-in-region beg end)
(delete-region beg end)
(when (eq org-fold-core-style 'overlays) (org-remove-empty-overlays-at beg))
(unless (= beg (point-min)) (org-fold-region (1- beg) beg nil 'outline))
(unless (bobp) (org-fold-region (1- (point)) (point) nil 'outline))
(and (not (bolp)) (looking-at "\n") (forward-char 1))
(let ((bbb (point)))
(insert-before-markers txt)
(org-reinstall-markers-in-region bbb)
(move-marker ins-point bbb))
(or (bolp) (insert "\n"))
(goto-char ins-point)
(org-skip-whitespace)
(move-marker ins-point nil)
(if folded
(org-fold-subtree t)
(org-fold-show-entry 'hide-drawers)
(org-fold-show-children))
(org-clean-visibility-after-subtree-move)
;; move back to the initial column we were at
(move-to-column col))))