diff --git a/lisp/org-element.el b/lisp/org-element.el index fdcbf8de0..511468e96 100644 --- a/lisp/org-element.el +++ b/lisp/org-element.el @@ -5602,14 +5602,19 @@ cache, unless optional argument IGNORE-CHANGES is non-nil." (cond ((< key beg) (setq node (avl-tree--node-left node))) - ((= key beg) - (if (memq (org-element-type element) '(item table-row)) - (setq last (avl-tree--node-data node) - node (avl-tree--node-left node)) - (throw 'found (avl-tree--node-data node)))) - (t + ((> key beg) (setq last (avl-tree--node-data node) - node (avl-tree--node-right node)))))) + node (avl-tree--node-right node))) + ;; When KEY is at the beginning of a table or list, + ;; make sure to return it instead of the first row or + ;; item. + ((and (memq (org-element-type element) '(item table-row)) + (= (org-element-property + :contents-begin (org-element-property :parent element)) + beg)) + (setq last (avl-tree--node-data node) + node (avl-tree--node-left node))) + (t (throw 'found (avl-tree--node-data node)))))) last))))) (defun org-element-cache-put (data &optional element)