summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Guerry <bzg@altern.org>2012-08-08 11:57:37 +0200
committerBastien Guerry <bzg@altern.org>2012-08-08 11:57:37 +0200
commitf485b0a8890c5c8d220c28796785082c940abaaa (patch)
tree29f9a4c5c1744b5f4eb1ef88edad4bb69947bc11
parent06c8457f0c4d8d603395fc8d71330c0de57677d6 (diff)
downloadorg-mode-f485b0a8890c5c8d220c28796785082c940abaaa.tar.gz
Move org-element commands to org.el and rename them.
* org.el (org-forward-element): Rename from `org-element-forward'. (org-backward-element): Rename from `org-element-backward'. (org-up-element): Rename from `org-element-up'. (org-down-element): Rename from `org-element-down'. (org-drag-element-backward): Rename from `org-element-drag-backward'. (org-drag-element-forward): Rename from `org-element-drag-forward'. (org-mark-element): Rename from `org-element-mark-element'. (org-transpose-element): Rename from `org-element-transpose'. (org-unindent-buffer): Rename from `org-element-unindent-buffer'. (org-mode-map): Update the names of a commands. Remove useless declarations. * org-element.el (org-element-forward, org-element-backward) (org-element-up, org-element-down) (org-element-drag-backward, org-element-drag-forward) (org-element-mark-element, org-narrow-to-element) (org-element-transpose, org-element-unindent-buffer): Move to org.el.
-rw-r--r--lisp/org-element.el201
-rw-r--r--lisp/org.el221
2 files changed, 208 insertions, 214 deletions
diff --git a/lisp/org-element.el b/lisp/org-element.el
index 121a615..f50098a 100644
--- a/lisp/org-element.el
+++ b/lisp/org-element.el
@@ -4288,206 +4288,5 @@ end of ELEM-A."
(cdr overlays))
(goto-char (org-element-property :end elem-B)))))
-;;;###autoload
-(defun org-element-forward ()
- "Move forward by one element.
-Move to the next element at the same level, when possible."
- (interactive)
- (cond ((eobp) (error "Cannot move further down"))
- ((org-with-limited-levels (org-at-heading-p))
- (let ((origin (point)))
- (org-forward-same-level 1)
- (unless (org-with-limited-levels (org-at-heading-p))
- (goto-char origin)
- (error "Cannot move further down"))))
- (t
- (let* ((elem (org-element-at-point))
- (end (org-element-property :end elem))
- (parent (org-element-property :parent elem)))
- (if (and parent (= (org-element-property :contents-end parent) end))
- (goto-char (org-element-property :end parent))
- (goto-char end))))))
-
-;;;###autoload
-(defun org-element-backward ()
- "Move backward by one element.
-Move to the previous element at the same level, when possible."
- (interactive)
- (if (org-with-limited-levels (org-at-heading-p))
- ;; At an headline, move to the previous one, if any, or stay
- ;; here.
- (let ((origin (point)))
- (org-backward-same-level 1)
- (unless (org-with-limited-levels (org-at-heading-p))
- (goto-char origin)
- (error "Cannot move further up")))
- (let* ((trail (org-element-at-point 'keep-trail))
- (elem (car trail))
- (prev-elem (nth 1 trail))
- (beg (org-element-property :begin elem)))
- (cond
- ;; Move to beginning of current element if point isn't there
- ;; already.
- ((/= (point) beg) (goto-char beg))
- ((not prev-elem) (error "Cannot move further up"))
- (t (goto-char (org-element-property :begin prev-elem)))))))
-
-;;;###autoload
-(defun org-element-up ()
- "Move to upper element."
- (interactive)
- (if (org-with-limited-levels (org-at-heading-p))
- (unless (org-up-heading-safe) (error "No surrounding element"))
- (let* ((elem (org-element-at-point))
- (parent (org-element-property :parent elem)))
- (if parent (goto-char (org-element-property :begin parent))
- (if (org-with-limited-levels (org-before-first-heading-p))
- (error "No surrounding element")
- (org-with-limited-levels (org-back-to-heading)))))))
-
-;;;###autoload
-(defun org-element-down ()
- "Move to inner element."
- (interactive)
- (let ((element (org-element-at-point)))
- (cond
- ((memq (org-element-type element) '(plain-list table))
- (goto-char (org-element-property :contents-begin element))
- (forward-char))
- ((memq (org-element-type element) org-element-greater-elements)
- ;; If contents are hidden, first disclose them.
- (when (org-element-property :hiddenp element) (org-cycle))
- (goto-char (or (org-element-property :contents-begin element)
- (error "No content for this element"))))
- (t (error "No inner element")))))
-
-;;;###autoload
-(defun org-element-drag-backward ()
- "Move backward element at point."
- (interactive)
- (if (org-with-limited-levels (org-at-heading-p)) (org-move-subtree-up)
- (let* ((trail (org-element-at-point 'keep-trail))
- (elem (car trail))
- (prev-elem (nth 1 trail)))
- ;; 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))
- (error "Cannot drag element backward")
- (let ((pos (point)))
- (org-element-swap-A-B prev-elem elem)
- (goto-char (+ (org-element-property :begin prev-elem)
- (- pos (org-element-property :begin elem)))))))))
-
-;;;###autoload
-(defun org-element-drag-forward ()
- "Move forward element at point."
- (interactive)
- (let* ((pos (point))
- (elem (org-element-at-point)))
- (when (= (point-max) (org-element-property :end elem))
- (error "Cannot drag element forward"))
- (goto-char (org-element-property :end elem))
- (let ((next-elem (org-element-at-point)))
- (when (or (org-element-nested-p elem next-elem)
- (and (eq (org-element-type next-elem) 'headline)
- (not (eq (org-element-type elem) 'headline))))
- (goto-char pos)
- (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-property :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-property :begin next-elem)))
- (size-blank (- (org-element-property :end elem)
- (save-excursion
- (goto-char (org-element-property :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))))))
-
-;;;###autoload
-(defun org-element-mark-element ()
- "Put point at beginning of this element, mark at end.
-
-Interactively, if this command is repeated or (in Transient Mark
-mode) if the mark is active, it marks the next element after the
-ones already marked."
- (interactive)
- (let (deactivate-mark)
- (if (or (and (eq last-command this-command) (mark t))
- (and transient-mark-mode mark-active))
- (set-mark
- (save-excursion
- (goto-char (mark))
- (goto-char (org-element-property :end (org-element-at-point)))))
- (let ((element (org-element-at-point)))
- (end-of-line)
- (push-mark (org-element-property :end element) t t)
- (goto-char (org-element-property :begin element))))))
-
-;;;###autoload
-(defun org-narrow-to-element ()
- "Narrow buffer to current element."
- (interactive)
- (let ((elem (org-element-at-point)))
- (cond
- ((eq (car elem) 'headline)
- (narrow-to-region
- (org-element-property :begin elem)
- (org-element-property :end elem)))
- ((memq (car elem) org-element-greater-elements)
- (narrow-to-region
- (org-element-property :contents-begin elem)
- (org-element-property :contents-end elem)))
- (t
- (narrow-to-region
- (org-element-property :begin elem)
- (org-element-property :end elem))))))
-
-;;;###autoload
-(defun org-element-transpose ()
- "Transpose current and previous elements, keeping blank lines between.
-Point is moved after both elements."
- (interactive)
- (org-skip-whitespace)
- (let ((end (org-element-property :end (org-element-at-point))))
- (org-element-drag-backward)
- (goto-char end)))
-
-;;;###autoload
-(defun org-element-unindent-buffer ()
- "Un-indent the visible part of the buffer.
-Relative indentation (between items, inside blocks, etc.) isn't
-modified."
- (interactive)
- (unless (eq major-mode 'org-mode)
- (error "Cannot un-indent a buffer not in Org mode"))
- (let* ((parse-tree (org-element-parse-buffer 'greater-element))
- unindent-tree ; For byte-compiler.
- (unindent-tree
- (function
- (lambda (contents)
- (mapc
- (lambda (element)
- (if (memq (org-element-type element) '(headline section))
- (funcall unindent-tree (org-element-contents element))
- (save-excursion
- (save-restriction
- (narrow-to-region
- (org-element-property :begin element)
- (org-element-property :end element))
- (org-do-remove-indentation)))))
- (reverse contents))))))
- (funcall unindent-tree (org-element-contents parse-tree))))
-
-
(provide 'org-element)
;;; org-element.el ends here
diff --git a/lisp/org.el b/lisp/org.el
index e42f6c4..79d45d6 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -17902,14 +17902,13 @@ BEG and END default to the buffer boundaries."
(if (boundp 'narrow-map)
(org-defkey narrow-map "e" 'org-narrow-to-element)
(org-defkey org-mode-map "\C-xne" 'org-narrow-to-element))
-(org-defkey org-mode-map "\C-\M-t" 'org-element-transpose)
-(org-defkey org-mode-map "\M-}" 'org-element-forward)
-(org-defkey org-mode-map "\M-{" 'org-element-backward)
-(org-defkey org-mode-map "\C-c\C-^" 'org-element-up)
-(org-defkey org-mode-map "\C-c\C-_" 'org-element-down)
-(org-defkey org-mode-map "\C-\M-t" 'org-element-transpose)
-(org-defkey org-mode-map "\C-c\C-f" 'org-forward-same-level)
-(org-defkey org-mode-map "\C-c\C-b" 'org-backward-same-level)
+(org-defkey org-mode-map "\C-\M-t" 'org-transpose-element)
+(org-defkey org-mode-map "\M-}" 'org-forward-element)
+(org-defkey org-mode-map "\M-{" 'org-backward-element)
+(org-defkey org-mode-map "\C-c\C-^" 'org-up-element)
+(org-defkey org-mode-map "\C-c\C-_" 'org-down-element)
+(org-defkey org-mode-map "\C-c\C-f" 'org-forward-same-level)
+(org-defkey org-mode-map "\C-c\C-b" 'org-backward-same-level)
(org-defkey org-mode-map "\C-c$" 'org-archive-subtree)
(org-defkey org-mode-map "\C-c\C-x\C-s" 'org-advertized-archive-subtree)
(org-defkey org-mode-map "\C-c\C-x\C-a" 'org-archive-subtree-default)
@@ -17979,7 +17978,7 @@ BEG and END default to the buffer boundaries."
(org-defkey org-mode-map "\C-c\C-x\C-mg" 'org-mobile-pull)
(org-defkey org-mode-map "\C-c\C-x\C-mp" 'org-mobile-push)
(org-defkey org-mode-map "\C-c@" 'org-mark-subtree)
-(org-defkey org-mode-map "\M-h" 'org-element-mark-element)
+(org-defkey org-mode-map "\M-h" 'org-mark-element)
(org-defkey org-mode-map [?\C-c (control ?*)] 'org-list-make-subtree)
;;(org-defkey org-mode-map [?\C-c (control ?-)] 'org-list-make-list-from-subtree)
@@ -18660,15 +18659,11 @@ this function returns t, nil otherwise."
(throw 'exit t))))
nil))))
-(declare-function org-element-drag-backward "org-element" ())
-(declare-function org-element-drag-forward "org-element" ())
-(declare-function org-element-mark-element "org-element" ())
(declare-function org-element-at-point "org-element" (&optional keep-trail))
(declare-function org-element-type "org-element" (element))
(declare-function org-element-property "org-element" (property element))
(declare-function org-element-paragraph-parser "org-element" (limit))
(declare-function org-element-map "org-element" (data types fun &optional info first-match no-recursion))
-(declare-function org-element--parse-objects "org-element" (beg end acc restriction))
(declare-function org-element-up "org-element" ())
(defun org-metaup (&optional arg)
@@ -21755,6 +21750,206 @@ Stop at the first and last subheadings of a superior heading."
(if (< l level) (setq arg 1)))
(setq arg (1- arg)))))
+;;;###autoload
+(defun org-forward-element ()
+ "Move forward by one element.
+Move to the next element at the same level, when possible."
+ (interactive)
+ (cond ((eobp) (error "Cannot move further down"))
+ ((org-with-limited-levels (org-at-heading-p))
+ (let ((origin (point)))
+ (org-forward-same-level 1)
+ (unless (org-with-limited-levels (org-at-heading-p))
+ (goto-char origin)
+ (error "Cannot move further down"))))
+ (t
+ (let* ((elem (org-element-at-point))
+ (end (org-element-property :end elem))
+ (parent (org-element-property :parent elem)))
+ (if (and parent (= (org-element-property :contents-end parent) end))
+ (goto-char (org-element-property :end parent))
+ (goto-char end))))))
+
+;;;###autoload
+(defun org-backward-element ()
+ "Move backward by one element.
+Move to the previous element at the same level, when possible."
+ (interactive)
+ (if (org-with-limited-levels (org-at-heading-p))
+ ;; At an headline, move to the previous one, if any, or stay
+ ;; here.
+ (let ((origin (point)))
+ (org-backward-same-level 1)
+ (unless (org-with-limited-levels (org-at-heading-p))
+ (goto-char origin)
+ (error "Cannot move further up")))
+ (let* ((trail (org-element-at-point 'keep-trail))
+ (elem (car trail))
+ (prev-elem (nth 1 trail))
+ (beg (org-element-property :begin elem)))
+ (cond
+ ;; Move to beginning of current element if point isn't there
+ ;; already.
+ ((/= (point) beg) (goto-char beg))
+ ((not prev-elem) (error "Cannot move further up"))
+ (t (goto-char (org-element-property :begin prev-elem)))))))
+
+;;;###autoload
+(defun org-up-element ()
+ "Move to upper element."
+ (interactive)
+ (if (org-with-limited-levels (org-at-heading-p))
+ (unless (org-up-heading-safe) (error "No surrounding element"))
+ (let* ((elem (org-element-at-point))
+ (parent (org-element-property :parent elem)))
+ (if parent (goto-char (org-element-property :begin parent))
+ (if (org-with-limited-levels (org-before-first-heading-p))
+ (error "No surrounding element")
+ (org-with-limited-levels (org-back-to-heading)))))))
+
+;;;###autoload
+(defun org-down-element ()
+ "Move to inner element."
+ (interactive)
+ (let ((element (org-element-at-point)))
+ (cond
+ ((memq (org-element-type element) '(plain-list table))
+ (goto-char (org-element-property :contents-begin element))
+ (forward-char))
+ ((memq (org-element-type element) org-element-greater-elements)
+ ;; If contents are hidden, first disclose them.
+ (when (org-element-property :hiddenp element) (org-cycle))
+ (goto-char (or (org-element-property :contents-begin element)
+ (error "No content for this element"))))
+ (t (error "No inner element")))))
+
+;;;###autoload
+(defun org-drag-element-backward ()
+ "Move backward element at point."
+ (interactive)
+ (if (org-with-limited-levels (org-at-heading-p)) (org-move-subtree-up)
+ (let* ((trail (org-element-at-point 'keep-trail))
+ (elem (car trail))
+ (prev-elem (nth 1 trail)))
+ ;; 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))
+ (error "Cannot drag element backward")
+ (let ((pos (point)))
+ (org-element-swap-A-B prev-elem elem)
+ (goto-char (+ (org-element-property :begin prev-elem)
+ (- pos (org-element-property :begin elem)))))))))
+
+;;;###autoload
+(defun org-drag-element-forward ()
+ "Move forward element at point."
+ (interactive)
+ (let* ((pos (point))
+ (elem (org-element-at-point)))
+ (when (= (point-max) (org-element-property :end elem))
+ (error "Cannot drag element forward"))
+ (goto-char (org-element-property :end elem))
+ (let ((next-elem (org-element-at-point)))
+ (when (or (org-element-nested-p elem next-elem)
+ (and (eq (org-element-type next-elem) 'headline)
+ (not (eq (org-element-type elem) 'headline))))
+ (goto-char pos)
+ (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-property :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-property :begin next-elem)))
+ (size-blank (- (org-element-property :end elem)
+ (save-excursion
+ (goto-char (org-element-property :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))))))
+
+;;;###autoload
+(defun org-mark-element ()
+ "Put point at beginning of this element, mark at end.
+
+Interactively, if this command is repeated or (in Transient Mark
+mode) if the mark is active, it marks the next element after the
+ones already marked."
+ (interactive)
+ (let (deactivate-mark)
+ (if (or (and (eq last-command this-command) (mark t))
+ (and transient-mark-mode mark-active))
+ (set-mark
+ (save-excursion
+ (goto-char (mark))
+ (goto-char (org-element-property :end (org-element-at-point)))))
+ (let ((element (org-element-at-point)))
+ (end-of-line)
+ (push-mark (org-element-property :end element) t t)
+ (goto-char (org-element-property :begin element))))))
+
+;;;###autoload
+(defun org-narrow-to-element ()
+ "Narrow buffer to current element."
+ (interactive)
+ (let ((elem (org-element-at-point)))
+ (cond
+ ((eq (car elem) 'headline)
+ (narrow-to-region
+ (org-element-property :begin elem)
+ (org-element-property :end elem)))
+ ((memq (car elem) org-element-greater-elements)
+ (narrow-to-region
+ (org-element-property :contents-begin elem)
+ (org-element-property :contents-end elem)))
+ (t
+ (narrow-to-region
+ (org-element-property :begin elem)
+ (org-element-property :end elem))))))
+
+;;;###autoload
+(defun org-transpose-element ()
+ "Transpose current and previous elements, keeping blank lines between.
+Point is moved after both elements."
+ (interactive)
+ (org-skip-whitespace)
+ (let ((end (org-element-property :end (org-element-at-point))))
+ (org-element-drag-backward)
+ (goto-char end)))
+
+;;;###autoload
+(defun org-unindent-buffer ()
+ "Un-indent the visible part of the buffer.
+Relative indentation (between items, inside blocks, etc.) isn't
+modified."
+ (interactive)
+ (unless (eq major-mode 'org-mode)
+ (error "Cannot un-indent a buffer not in Org mode"))
+ (let* ((parse-tree (org-element-parse-buffer 'greater-element))
+ unindent-tree ; For byte-compiler.
+ (unindent-tree
+ (function
+ (lambda (contents)
+ (mapc
+ (lambda (element)
+ (if (memq (org-element-type element) '(headline section))
+ (funcall unindent-tree (org-element-contents element))
+ (save-excursion
+ (save-restriction
+ (narrow-to-region
+ (org-element-property :begin element)
+ (org-element-property :end element))
+ (org-do-remove-indentation)))))
+ (reverse contents))))))
+ (funcall unindent-tree (org-element-contents parse-tree))))
+
(defun org-show-subtree ()
"Show everything after this heading at deeper levels."
(interactive)