summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Goaziou <n.goaziou@gmail.com>2012-03-09 19:47:50 +0100
committerNicolas Goaziou <n.goaziou@gmail.com>2012-03-09 19:47:50 +0100
commit86131a8b5017cd2cec2167a76a8c6233ee58db2c (patch)
tree6bba7fdbd11fdce8a2b410125811882bc7262363
parent1a42967061142c99b4fa7f3ce9aea75ca6a9c670 (diff)
downloadorg-mode-86131a8b5017cd2cec2167a76a8c6233ee58db2c.tar.gz
org-element: New `org-element-down' function
* contrib/lisp/org-element.el (org-element-down): New function. * testing/lisp/test-org-element.el: Add test.
-rw-r--r--contrib/lisp/org-element.el11
-rw-r--r--testing/lisp/test-org-element.el15
2 files changed, 26 insertions, 0 deletions
diff --git a/contrib/lisp/org-element.el b/contrib/lisp/org-element.el
index e73c29b..098c312 100644
--- a/contrib/lisp/org-element.el
+++ b/contrib/lisp/org-element.el
@@ -3859,6 +3859,17 @@ modified."
((org-before-first-heading-p) (error "No surrounding element"))
(t (org-back-to-heading))))))))))
+(defun org-element-down ()
+ "Move to inner element."
+ (interactive)
+ (let ((element (org-element-at-point)))
+ (cond
+ ((eq (org-element-type element) 'plain-list)
+ (forward-char))
+ ((memq (org-element-type element) org-element-greater-elements)
+ (goto-char (org-element-property :contents-begin element)))
+ (t (error "No inner element")))))
+
(provide 'org-element)
;;; org-element.el ends here
diff --git a/testing/lisp/test-org-element.el b/testing/lisp/test-org-element.el
index 567540a..b321ffa 100644
--- a/testing/lisp/test-org-element.el
+++ b/testing/lisp/test-org-element.el
@@ -312,6 +312,21 @@ Outside."
(org-element-up)
(should (looking-at "\\* Top"))))
+(ert-deftest test-org-elemnet/down-element ()
+ "Test `org-element-down' specifications."
+ ;; 1. Error when the element hasn't got a recursive type.
+ (org-test-with-temp-text "Paragraph."
+ (should-error (org-element-down)))
+ ;; 2. When at a plain-list, move to first item.
+ (org-test-with-temp-text "- Item 1\n - Item 1.1\n - Item 2.2"
+ (goto-line 2)
+ (org-element-down)
+ (should (looking-at " - Item 1.1")))
+ ;; 3. Otherwise, move inside the greater element.
+ (org-test-with-temp-text "#+BEGIN_CENTER\nParagraph.\n#+END_CENTER"
+ (org-element-down)
+ (should (looking-at "Paragraph"))))
+
(provide 'test-org-element)
;;; test-org-element.el ends here