0
0
Fork 1
mirror of https://git.savannah.gnu.org/git/emacs/org-mode.git synced 2024-09-29 20:37:51 +00:00

org-element: Small optimization

* lisp/org-element.el (org-element--cache-for-removal): Do not remove
a robust element whenever only its contents are modified.  Remove
inlinetasks as robust elements since modifying a node property inside
implies to parse the task again.
This commit is contained in:
Nicolas Goaziou 2014-07-20 19:22:00 +02:00
parent 3c14db8685
commit 8feb8b93d5

View file

@ -5463,24 +5463,31 @@ changes."
(before (car elements))
(after (cdr elements)))
(if (not before) after
(let ((up before))
(while (setq up (org-element-property :parent up))
(let ((up before)
(robust-flag t))
(while up
(if (and (memq (org-element-type up)
'(center-block
drawer dynamic-block inlinetask
property-drawer quote-block special-block))
'(center-block drawer dynamic-block
property-drawer quote-block
special-block))
(<= (org-element-property :contents-begin up) beg)
(> (org-element-property :contents-end up) end))
;; UP is a robust greater element containing changes.
;; We only need to extend its ending boundaries.
(org-element--cache-shift-positions
up offset '(:contents-end :end))
(setq before up)))
(setq before up)
(when robust-flag (setq robust-flag nil)))
(setq up (org-element-property :parent up)))
;; We're at top level element containing ELEMENT: if it's
;; altered by buffer modifications, it is first element in
;; cache to be removed. Otherwise, that first element is the
;; following one.
(if (< (org-element-property :end before) beg) after before)))))
;;
;; As a special case, do not remove BEFORE if it is a robust
;; container for current changes.
(if (or (< (org-element-property :end before) beg) robust-flag) after
before)))))
(defun org-element--cache-submit-request (beg end offset)
"Submit a new cache synchronization request for current buffer.