Function: org-drag-element-forward
org-drag-element-forward is an interactive and byte-compiled function
defined in org.el.gz.
Signature
(org-drag-element-forward)
Documentation
Move forward element at point.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/org/org.el.gz
(defun org-drag-element-forward ()
"Move forward element at point."
(interactive)
(let* ((pos (point))
(elem (or (org-element-at-point)
(user-error "No element at point"))))
(when (= (point-max) (org-element-end elem))
(user-error "Cannot drag element forward"))
(goto-char (org-element-end elem))
(let ((next-elem (org-element-at-point)))
(when (or (org-element-nested-p elem next-elem)
(and (org-element-type-p next-elem 'headline)
(not (org-element-type-p elem 'headline))))
(goto-char pos)
(user-error "Cannot drag element forward"))
;; Compute new position of point: it's shifted by NEXT-ELEM
;; body's length (without final blanks) and by the length of
;; blanks between ELEM and NEXT-ELEM.
(let ((size-next (- (save-excursion
(goto-char (org-element-end next-elem))
(skip-chars-backward " \r\t\n")
(forward-line)
;; Small correction if buffer doesn't end
;; with a newline character.
(if (and (eolp) (not (bolp))) (1+ (point)) (point)))
(org-element-begin next-elem)))
(size-blank (- (org-element-end elem)
(save-excursion
(goto-char (org-element-end elem))
(skip-chars-backward " \r\t\n")
(forward-line)
(point)))))
(org-element-swap-A-B elem next-elem)
(goto-char (+ pos size-next size-blank))))))