Function: org-drag-element-backward

org-drag-element-backward is an interactive and byte-compiled function defined in org.el.gz.

Signature

(org-drag-element-backward)

Documentation

Move backward element at point.

Key Bindings

Source Code

;; Defined in /usr/src/emacs/lisp/org/org.el.gz
(defun org-drag-element-backward ()
  "Move backward element at point."
  (interactive)
  (let ((elem (or (org-element-at-point)
		  (user-error "No element at point"))))
    (if (org-element-type-p elem 'headline)
	;; Preserve point when moving a whole tree, even if point was
	;; on blank lines below the headline.
	(let ((offset (skip-chars-backward " \t\n")))
	  (unwind-protect (org-move-subtree-up)
	    (forward-char (- offset))))
      (let ((prev-elem
	     (save-excursion
	       (goto-char (org-element-begin elem))
	       (skip-chars-backward " \r\t\n")
	       (unless (bobp)
		 (let* ((beg (org-element-begin elem))
			(prev (org-element-at-point))
			(up prev))
		   (while (and (setq up (org-element-parent up))
			       (<= (org-element-end up) beg))
		     (setq prev up))
		   prev)))))
	;; Error out if no previous element or previous element is
	;; a parent of the current one.
	(if (or (not prev-elem) (org-element-nested-p elem prev-elem))
	    (user-error "Cannot drag element backward")
	  (let ((pos (point)))
	    (org-element-swap-A-B prev-elem elem)
	    (goto-char (+ (org-element-begin prev-elem)
			  (- pos (org-element-begin elem))))))))))