diff --git a/lisp/org-element.el b/lisp/org-element.el index 265ca536c..7660a02dc 100644 --- a/lisp/org-element.el +++ b/lisp/org-element.el @@ -1742,9 +1742,15 @@ containing `:begin', `:end', `:contents-begin' and Assume point is at the beginning of the paragraph." (save-excursion - (let* ((contents-begin (point)) - (keywords (org-element--collect-affiliated-keywords)) - (begin (car keywords)) + (let* (;; INNER-PAR-P is non-nil when paragraph is at the + ;; beginning of an item or a footnote reference. In that + ;; case, we mustn't look for affiliated keywords since they + ;; belong to the container. + (inner-par-p (/= (point-at-bol) (point))) + (contents-begin (point)) + (keywords (unless inner-par-p + (org-element--collect-affiliated-keywords))) + (begin (if inner-par-p contents-begin (car keywords))) (before-blank (let ((case-fold-search t)) (end-of-line) @@ -1803,7 +1809,7 @@ Assume point is at the beginning of the paragraph." ;; If paragraph has no affiliated keywords, it may not begin ;; at beginning of line if it starts an item. (nconc - (list :begin (if (cadr keywords) begin contents-begin) + (list :begin begin :end end :contents-begin contents-begin :contents-end contents-end diff --git a/testing/lisp/test-org-element.el b/testing/lisp/test-org-element.el index 1b119ca31..8620e9df9 100644 --- a/testing/lisp/test-org-element.el +++ b/testing/lisp/test-org-element.el @@ -1188,7 +1188,20 @@ e^{i\\pi}+1=0 (org-test-with-temp-text "#+BEGIN: \nParagraph" (let ((elem (org-element-at-point))) (and (eq (org-element-type elem) 'paragraph) - (= (point-max) (org-element-property :end elem))))))) + (= (point-max) (org-element-property :end elem)))))) + ;; Include incomplete latex environments. + (should + (org-test-with-temp-text "\begin{equation}\nParagraph" + (let ((elem (org-element-at-point))) + (and (eq (org-element-type elem) 'paragraph) + (= (point-max) (org-element-property :end elem)))))) + ;; Do not steal affiliated keywords from container. + (should + (org-test-with-temp-text "#+ATTR_LATEX: test\n- item 1" + (let ((elem (progn (search-forward "item") (org-element-at-point)))) + (and (eq (org-element-type elem) 'paragraph) + (not (org-element-property :attr_latex elem)) + (/= (org-element-property :begin elem) 1)))))) ;;;; Plain List