Function: org-persist--normalize-associated
org-persist--normalize-associated is a byte-compiled function defined
in org-persist.el.gz.
Signature
(org-persist--normalize-associated ASSOCIATED)
Documentation
Normalize ASSOCIATED representation into (:type value).
Source Code
;; Defined in /usr/src/emacs/lisp/org/org-persist.el.gz
(defun org-persist--normalize-associated (associated)
"Normalize ASSOCIATED representation into (:type value)."
(pcase associated
((or (pred stringp) `(:file ,_))
(unless (stringp associated)
(setq associated (cadr associated)))
(let* ((rtn `(:file ,associated))
(inode (and
;; Do not store :inode for remote files - it may
;; be time-consuming on slow connections or even
;; fail completely when ssh connection is closed.
(not (file-remote-p associated))
(fboundp 'file-attribute-inode-number)
(file-attribute-inode-number
(file-attributes associated)))))
(when inode (plist-put rtn :inode inode))
rtn))
((or (pred bufferp) `(:buffer ,_))
(unless (bufferp associated)
(setq associated (cadr associated)))
(let ((cached (gethash associated org-persist--associated-buffer-cache))
file inode hash)
(if (and cached (eq (buffer-modified-tick associated)
(car cached)))
(progn
(setq file (nth 1 cached)
inode (nth 2 cached)
hash (nth 3 cached)))
(setq file (buffer-file-name
(or (buffer-base-buffer associated)
associated)))
(setq inode (when (and file
;; Do not store :inode for remote files - it may
;; be time-consuming on slow connections or even
;; fail completely when ssh connection is closed.
(not (file-remote-p file))
(fboundp 'file-attribute-inode-number))
(file-attribute-inode-number
(file-attributes file))))
(setq hash
;; `secure-hash' may trigger interactive dialog when it
;; cannot determine the coding system automatically.
;; Force coding system that works reliably for any text
;; to avoid it. The hash will be consistent, as long
;; as we use the same coding system.
(let ((coding-system-for-write 'emacs-internal))
(secure-hash 'md5 associated)))
(puthash associated
(list (buffer-modified-tick associated)
file inode hash)
org-persist--associated-buffer-cache))
(let ((rtn `(:hash ,hash)))
(when file (setq rtn (plist-put rtn :file file)))
(when inode (setq rtn (plist-put rtn :inode inode)))
rtn)))
((pred listp)
associated)
(_ (error "Unknown associated object %S" associated))))