Function: org-element--cache-before-change
org-element--cache-before-change is a byte-compiled function defined
in org-element.el.gz.
Signature
(org-element--cache-before-change BEG END)
Documentation
Detect modifications in sensitive parts of Org buffer.
BEG and END are the beginning and end of the range of changed
text. See before-change-functions for more information.
The function returns the new value of org-element--cache-change-warning.
Source Code
;; Defined in /usr/src/emacs/lisp/org/org-element.el.gz
(defun org-element--cache-before-change (beg end)
"Detect modifications in sensitive parts of Org buffer.
BEG and END are the beginning and end of the range of changed
text. See `before-change-functions' for more information.
The function returns the new value of `org-element--cache-change-warning'."
(org-with-base-buffer nil
(when (org-element--cache-active-p t)
(org-with-wide-buffer
(setq org-element--cache-change-tic (buffer-chars-modified-tick))
(setq org-element--cache-last-buffer-size (buffer-size))
(goto-char beg)
(forward-line 0)
(let ((bottom (save-excursion (goto-char end) (line-end-position))))
(prog1
;; Use the worst change warning to not miss important edits.
;; This function is called before edit and after edit by
;; `org-element--cache-after-change'. Before the edit, we still
;; want to use the old value if it comes from previous
;; not yet processed edit (they may be merged by
;; `org-element--cache-submit-request'). After the edit, we want to
;; look if there was a sensitive removed during edit.
;; FIXME: This is not the most efficient way and we now
;; have to delete more elements than needed in some
;; cases. A better approach may be storing the warning
;; in the modification request itself.
(let ((org-element--cache-change-warning-before org-element--cache-change-warning)
(org-element--cache-change-warning-after))
(setq org-element--cache-change-warning-after
;; We must preserve match data when called as `before-change-functions'.
(save-match-data
(let ((case-fold-search t))
(when (re-search-forward
org-element--cache-sensitive-re bottom t)
(goto-char beg)
(forward-line 0)
(let (min-level)
(cl-loop while (re-search-forward
(rx-to-string
(if (and min-level
(> min-level 1))
`(and bol (repeat 1 ,(1- min-level) "*") " ")
`(and bol (+ "*") " ")))
bottom t)
do (setq min-level (1- (length (match-string 0))))
until (= min-level 1))
(goto-char beg)
(forward-line 0)
(or (and min-level (org-reduced-level min-level))
(when (looking-at-p "^[ \t]*#\\+CATEGORY:")
'org-data)
t))))))
(setq org-element--cache-change-warning
(cond
((and (numberp org-element--cache-change-warning-before)
(numberp org-element--cache-change-warning-after))
(min org-element--cache-change-warning-after
org-element--cache-change-warning-before))
((numberp org-element--cache-change-warning-before)
org-element--cache-change-warning-before)
((numberp org-element--cache-change-warning-after)
org-element--cache-change-warning-after)
(t (or org-element--cache-change-warning-after
org-element--cache-change-warning-before)))))
(org-element--cache-log-message
"%S is about to modify text: warning %S"
this-command
org-element--cache-change-warning)))))))