Browse Source

org-element: Fix cache bug

* lisp/org-element.el (org-element-cache-get): Return correct cached
  element when point is at the beginning of an item.
Nicolas Goaziou 4 years ago
parent
commit
fd5edd35ae
1 changed files with 12 additions and 7 deletions
  1. 12 7
      lisp/org-element.el

+ 12 - 7
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)))
+	       ;; 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-right node))))))
+		      node (avl-tree--node-left node)))
+	       (t (throw 'found (avl-tree--node-data node))))))
 	  last)))))
 
 (defun org-element-cache-put (data &optional element)