Преглед изворни кода

org-element: Fix corner case in cache synchronization

* lisp/org-element.el (org-element--cache-submit-request): When
  changes happen before first know element, start from phase 1 instead
  of phase 2 in order to properly re-parent subsequent elements, if
  needed.
(org-element--cache-process-request): Do not propagate beginning
position since it is already available to the request.
Nicolas Goaziou пре 10 година
родитељ
комит
33a344be33
1 измењених фајлова са 4 додато и 6 уклоњено
  1. 4 6
      lisp/org-element.el

+ 4 - 6
lisp/org-element.el

@@ -5147,9 +5147,7 @@ request."
       ;; delegate phase 1 processing to next request in order to keep
       ;; keys unique among requests.
       (when (equal (aref request 0) next)
-	(let ((next-request (nth 1 org-element--cache-sync-requests)))
-	  (aset next-request 1 (aref request 1))
-	  (aset next-request 6 1))
+	(aset (nth 1 org-element--cache-sync-requests) 6 1)
 	(throw 'quit t))
       (let ((limit (+ (aref request 1) (aref request 3) extra)))
 	;; Next element will start at its beginning position plus
@@ -5507,9 +5505,9 @@ change, as an integer."
 			(key (org-element--cache-key first)))
 		    (cond
 		     ;; When changes happen before the first known
-		     ;; element, shift the rest of the cache.
-		     ((> beg end)
-		      (vector key nil nil offset nil nil 2))
+		     ;; element, re-parent and shift the rest of the
+		     ;; cache.
+		     ((> beg end) (vector key beg nil offset nil nil 1))
 		     ;; Otherwise, we find the first non robust
 		     ;; element containing END.  All elements between
 		     ;; FIRST and this one are to be removed.