mirror of
https://git.savannah.gnu.org/git/emacs/org-mode.git
synced 2024-09-29 20:37:51 +00:00
Re-implement 54534eebb
more efficiently
* lisp/org-element.el (org-element--cache-sensitive-re): Do not treat properties inside property drawers as global sensitive change. It can cause cache drop on large logbook drawers where a new clock entry is inserted. (org-element--cache-for-removal): Use the same technique used for detecting property drawer <-> ordinary drawer changes under headlines for org-data.
This commit is contained in:
parent
0c9b30e961
commit
9c7acaa02d
|
@ -6495,7 +6495,7 @@ If you observe Emacs hangs frequently, please report this to Org mode mailing li
|
||||||
org-list-full-item-re "\\|"
|
org-list-full-item-re "\\|"
|
||||||
":\\(?: \\|$\\)" "\\|"
|
":\\(?: \\|$\\)" "\\|"
|
||||||
"\\\\begin{[A-Za-z0-9*]+}" "\\|"
|
"\\\\begin{[A-Za-z0-9*]+}" "\\|"
|
||||||
":\\(?:\\w\\|[-_]\\)+:[ \t]*.*$"
|
":\\(?:\\w\\|[-_]\\)+:[ \t]*$"
|
||||||
"\\)")
|
"\\)")
|
||||||
"Regexp matching a sensitive line, structure wise.
|
"Regexp matching a sensitive line, structure wise.
|
||||||
A sensitive line is a headline, inlinetask, block, drawer, or
|
A sensitive line is a headline, inlinetask, block, drawer, or
|
||||||
|
@ -6619,11 +6619,6 @@ known element in cache (it may start after END)."
|
||||||
(if (not before) after
|
(if (not before) after
|
||||||
(let ((up before)
|
(let ((up before)
|
||||||
(robust-flag t))
|
(robust-flag t))
|
||||||
(when (and (eq 'org-data (org-element-type up))
|
|
||||||
org-element--cache-change-warning)
|
|
||||||
;; We may be doing changes in first section that affect
|
|
||||||
;; org-data.
|
|
||||||
(setq org-element--cache-change-warning 'org-data))
|
|
||||||
(while up
|
(while up
|
||||||
(if (let ((type (org-element-type up)))
|
(if (let ((type (org-element-type up)))
|
||||||
(or (and (memq type '( center-block dynamic-block
|
(or (and (memq type '( center-block dynamic-block
|
||||||
|
@ -6649,17 +6644,7 @@ known element in cache (it may start after END)."
|
||||||
(pcase type
|
(pcase type
|
||||||
;; Sensitive change in section. Need to
|
;; Sensitive change in section. Need to
|
||||||
;; re-parse.
|
;; re-parse.
|
||||||
(`section
|
(`section (not org-element--cache-change-warning))
|
||||||
(or (not org-element--cache-change-warning) ; robust
|
|
||||||
(when (and org-element--cache-change-warning
|
|
||||||
(eq 'org-data
|
|
||||||
(org-element-type (org-element-property :parent up))))
|
|
||||||
;; Breaking change in section
|
|
||||||
;; potentially breaks org-data
|
|
||||||
;; (i.e. top property drawer change).
|
|
||||||
(setq org-element--cache-change-warning 'org-data)
|
|
||||||
;; Not robust
|
|
||||||
nil)))
|
|
||||||
;; Headline might be inserted. This is non-robust
|
;; Headline might be inserted. This is non-robust
|
||||||
;; change when `up' is a `headline' or `section'
|
;; change when `up' is a `headline' or `section'
|
||||||
;; with `>' level compared to the inserted headline.
|
;; with `>' level compared to the inserted headline.
|
||||||
|
@ -6680,7 +6665,18 @@ known element in cache (it may start after END)."
|
||||||
(when (looking-at org-property-drawer-re)
|
(when (looking-at org-property-drawer-re)
|
||||||
(< beg (match-end 0))))
|
(< beg (match-end 0))))
|
||||||
'robust))))
|
'robust))))
|
||||||
(`org-data (not (eq org-element--cache-change-warning 'org-data)))
|
(`org-data (and (not (eq org-element--cache-change-warning 'org-data))
|
||||||
|
;; Property drawer could
|
||||||
|
;; have been inserted. It
|
||||||
|
;; is not robust change
|
||||||
|
;; then.
|
||||||
|
(org-with-wide-buffer
|
||||||
|
(goto-char (point-min))
|
||||||
|
(while (and (org-at-comment-p) (bolp)) (forward-line))
|
||||||
|
;; Should not see property
|
||||||
|
;; drawer inside robust
|
||||||
|
;; region.
|
||||||
|
(not (looking-at org-property-drawer-re)))))
|
||||||
(_ 'robust)))))
|
(_ 'robust)))))
|
||||||
;; UP is a robust greater element containing changes.
|
;; UP is a robust greater element containing changes.
|
||||||
;; We only need to extend its ending boundaries.
|
;; We only need to extend its ending boundaries.
|
||||||
|
|
Loading…
Reference in a new issue