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))))))