缓存持久化
为跨 Emacs session 使用, org-referent-get 借助 org-persist 实现内部缓存(二级哈希结构)的持久化:
延迟加载及缓存持久化 (delay-load):
#+name: 2025-08-23-16-38
#+begin_src emacs-lisp :eval no
;; depends: org-referent-get, cache.
(lambda (&rest a)
"No load. load by
M-x org-referent-get or M-: (org-referent-get)."
(interactive)
(!def 'org-referent-get org-referent-get)
(require 'org-persist)
(!def cache
(or (cadr
(org-persist-read
"org-referent--cache"
nil nil nil :read-related t))
(make-hash-table :test #'equal)))
(org-persist-register
`("org-referent--cache" (elisp-data ,cache))
nil :write-immediately t :expiry 'never)
(if (called-interactively-p 'interactive)
(call-interactively #'org-referent-get)
(apply org-referent-get a)))
#+end_src
需要注意的是,在 elisp 中,并非所有数据结构都能被持久化,但属性值的具体结构非 org-referent-get 所能定义,使用 org-referent-get 的上层软件需自行约束其属性值的结构,否则将导致 org-referent-get 的持久化特性失效。