Function: org-element--cache-persist-before-write

org-element--cache-persist-before-write is a byte-compiled function defined in org-element.el.gz.

Signature

(org-element--cache-persist-before-write CONTAINER &optional ASSOCIATED)

Documentation

Sync element cache for CONTAINER and ASSOCIATED item before saving.

This function is intended to be used in org-persist-before-write-hook.

Prevent writing to disk cache when cache is disabled in the CONTAINER buffer. Otherwise, cleanup cache sync keys, unreadable :buffer properties, and verify cache consistency.

Source Code

;; Defined in /usr/src/emacs/lisp/org/org-element.el.gz
;;; Cache persistence

(defun org-element--cache-persist-before-write (container &optional associated)
  "Sync element cache for CONTAINER and ASSOCIATED item before saving.
This function is intended to be used in `org-persist-before-write-hook'.

Prevent writing to disk cache when cache is disabled in the CONTAINER
buffer.  Otherwise, cleanup cache sync keys, unreadable :buffer
properties, and verify cache consistency."
  (when (equal container '(elisp org-element--cache))
    (if (and org-element-use-cache
             (plist-get associated :file)
             (get-file-buffer (plist-get associated :file))
             org-element-cache-persistent)
        (with-current-buffer (get-file-buffer (plist-get associated :file))
          (if (and (derived-mode-p 'org-mode)
                   org-element--cache)
              (org-with-wide-buffer
               (org-element--cache-sync (current-buffer) (point-max))
               ;; Cleanup cache request keys to avoid collisions during next
               ;; Emacs session.  Cleanup known non-printable objects.
               (avl-tree-mapc
                (lambda (el)
                  (org-element-put-property el :org-element--cache-sync-key nil)
                  (org-element-map el t
                    (lambda (el2)
                      (unless (org-element-type-p el2 'plain-text)
                        (org-element-put-property el2 :buffer nil)))
                    nil nil nil 'with-affiliated 'no-undefer)
                  (let ((org-element--cache-self-verify-frequency 1.0))
                    (when (and org-element--cache-self-verify-before-persisting
                               (org-element--cache-verify-element el))
                      (error "Cache verification failed: aborting"))))
                org-element--cache)
               nil)
            'forbid))
      'forbid)))