forked from mirrors/org-mode
org-persist: Allow inhibiting of normalisation
* lisp/org-persist.el (org-persist-register, org-persist--normalize-container, org-persist--inhibit-container-normalization): Since container normalisation is applied frequently (via `org-persist--normalize-container'), when registering many new containers the cost can quickly add up. To avoid redundant overhead, after normalising the container initially in `org-persist-register' we bind a new variable `org-persist--inhibit-container-normalization' to t and adjust `org-persist--normalize-container' to do nothing when this new variable is non-nil.
This commit is contained in:
parent
a27cc761ff
commit
1931fc2131
|
@ -602,10 +602,15 @@ MISC, if non-nil will be appended to the collection. It must be a plist."
|
|||
|
||||
;;;; Reading container data.
|
||||
|
||||
(defvar org-persist--inhibit-container-normalization nil
|
||||
"Prevent `org-persist--normalize-container' from doing anything.")
|
||||
|
||||
(defun org-persist--normalize-container (container &optional inner)
|
||||
"Normalize CONTAINER representation into (type . settings).
|
||||
|
||||
When INNER is non-nil, do not try to match as list of containers."
|
||||
(if org-persist--inhibit-container-normalization
|
||||
container
|
||||
(pcase container
|
||||
((or `elisp `elisp-data `version `file `index `url)
|
||||
`(,container nil))
|
||||
|
@ -617,7 +622,7 @@ When INNER is non-nil, do not try to match as list of containers."
|
|||
container)
|
||||
((and (pred listp) (guard (not inner)))
|
||||
(mapcar (lambda (c) (org-persist--normalize-container c 'inner)) container))
|
||||
(_ (error "org-persist: Unknown container type: %S" container))))
|
||||
(_ (error "org-persist: Unknown container type: %S" container)))))
|
||||
|
||||
(defvar org-persist--associated-buffer-cache (make-hash-table :weakness 'key)
|
||||
"Buffer hash cache.")
|
||||
|
@ -950,9 +955,10 @@ VALUE pairs.
|
|||
When WRITE-IMMEDIATELY is non-nil, the return value will be the same
|
||||
with `org-persist-write'."
|
||||
(unless org-persist--index (org-persist--load-index))
|
||||
(setq container (org-persist--normalize-container container))
|
||||
(let ((container (org-persist--normalize-container container))
|
||||
(inherit (and inherit (org-persist--normalize-container inherit)))
|
||||
(org-persist--inhibit-container-normalization t))
|
||||
(when inherit
|
||||
(setq inherit (org-persist--normalize-container inherit))
|
||||
(let ((inherited-collection (org-persist--get-collection inherit associated))
|
||||
new-collection)
|
||||
(unless (member container (plist-get inherited-collection :container))
|
||||
|
@ -969,7 +975,7 @@ with `org-persist-write'."
|
|||
associated
|
||||
(plist-get associated :buffer))
|
||||
(add-hook 'kill-buffer-hook #'org-persist-write-all-buffer nil 'local)))
|
||||
(when write-immediately (org-persist-write container associated)))
|
||||
(when write-immediately (org-persist-write container associated))))
|
||||
|
||||
(cl-defun org-persist-unregister (container &optional associated &key remove-related)
|
||||
"Unregister CONTAINER in ASSOCIATED to be persistent.
|
||||
|
|
Loading…
Reference in New Issue