summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--evil-org.el31
1 files changed, 23 insertions, 8 deletions
diff --git a/evil-org.el b/evil-org.el
index fcb0bd9..3a4ec80 100644
--- a/evil-org.el
+++ b/evil-org.el
@@ -507,16 +507,31 @@ If a prefix argument is given, links are opened in incognito mode."
(defun evil-org-select-inner-element (element)
"Select inner org ELEMENT."
- (list (or (org-element-property :contents-begin element)
- (org-element-property :begin element))
- (or (org-element-property :contents-end element)
- ;; Prune post-blank lines from :end element
+ (if-let ((value (org-element-property :value element))
+ (lines (remove "" (split-string value "[\n\r]"))))
+
+ ;; If org-element exposes "value", select "value"
+ (list (save-excursion
+ (goto-char (or (org-element-property :post-affiliated element)
+ (org-element-property :begin element)))
+ (search-forward (first lines))
+ (match-beginning 0))
(save-excursion
(goto-char (org-element-property :end element))
- (let ((post-blank (org-element-property :post-blank element)))
- (unless (zerop post-blank)
- (forward-line (- post-blank))))
- (point)))))
+ (search-backward (car (last lines)))
+ (match-end 0)))
+
+ ;; If org-element exposes contents-begin/end, select those
+ (list (or (org-element-property :contents-begin element)
+ (org-element-property :post-affiliated element)
+ (org-element-property :begin element))
+ (or (org-element-property :contents-end element)
+ (save-excursion
+ (goto-char (org-element-property :end element))
+ (let ((post-blank (org-element-property :post-blank element)))
+ (unless (zerop post-blank)
+ (forward-line (- post-blank))))
+ (point))))))
(defun evil-org-parent (element)
"Find a parent or nearest heading of ELEMENT."