diff --git a/lisp/org-element.el b/lisp/org-element.el index 29a90be41..e9f0b2c58 100644 --- a/lisp/org-element.el +++ b/lisp/org-element.el @@ -5745,8 +5745,11 @@ Providing it allows for quicker computation." (cbeg (org-element-property :contents-begin next)) (cend (org-element-property :contents-end next))) (cond - ;; Skip objects ending before or at POS. - ((<= end pos) + ;; Skip objects ending before point. Also skip + ;; objects ending at point unless it is also the + ;; end of buffer, since we want to return the + ;; innermost object. + ((and (<= end pos) (/= (point-max) end)) (goto-char end) ;; For convenience, when object ends at POS, ;; without any space, store it in LAST, as we @@ -5764,7 +5767,9 @@ Providing it allows for quicker computation." ;; object, for consistency with ;; convenience feature above. (and (= pos cend) - (not (memq (char-before pos) '(?\s ?\t)))))) + (or (= (point-max) pos) + (not (memq (char-before pos) + '(?\s ?\t))))))) (goto-char cbeg) (narrow-to-region (point) cend) (setq parent next diff --git a/testing/lisp/test-org-element.el b/testing/lisp/test-org-element.el index 1bc2a5363..7b7eda3a6 100644 --- a/testing/lisp/test-org-element.el +++ b/testing/lisp/test-org-element.el @@ -3076,6 +3076,12 @@ Paragraph \\alpha." (eq 'bold (org-test-with-temp-text "* *bold*" (search-forward "bo") + (org-element-type (org-element-context))))) + ;; Special case: incomplete cell at the end of a table row. + (should + (eq 'table-cell + (org-test-with-temp-text "|a|b|c" + (goto-char (point-max)) (org-element-type (org-element-context))))))