oc-basic: Fix completion cache

* lisp/oc-basic.el (org-cite-basic--key-completion-table): Cache
completions per document.  Return nil when no completion is available
so insertion mechanism can properly report the problem.
This commit is contained in:
Nicolas Goaziou 2021-12-07 22:49:40 +01:00
parent a83465add3
commit 18d77ac253
1 changed files with 16 additions and 7 deletions

View File

@ -68,6 +68,7 @@
(require 'bibtex)
(require 'json)
(require 'map)
(require 'oc)
(require 'seq)
@ -704,11 +705,18 @@ Return chosen style as a string."
(defun org-cite-basic--key-completion-table ()
"Return completion table for cite keys, as a hash table.
In this hash table, keys are a strings with author, date, and title of the
reference. Values are the cite key."
(let ((cache-key (mapcar #'car org-cite-basic--bibliography-cache)))
(if (gethash cache-key org-cite-basic--completion-cache)
org-cite-basic--completion-cache
In this hash table, keys are a strings with author, date, and
title of the reference. Values are the cite keys.
Return nil if there are no bibliography files or no entries."
;; Populate bibliography cache.
(let ((entries (org-cite-basic--parse-bibliography)))
(cond
((null entries) nil) ;no bibliography files
((gethash entries org-cite-basic--completion-cache)
org-cite-basic--completion-cache)
(t
(clrhash org-cite-basic--completion-cache)
(dolist (key (org-cite-basic--all-keys))
(let ((completion
@ -725,8 +733,9 @@ reference. Values are the cite key."
org-cite-basic-column-separator
(org-cite-basic--get-field 'title key nil t))))
(puthash completion key org-cite-basic--completion-cache)))
(puthash cache-key t org-cite-basic--completion-cache)
org-cite-basic--completion-cache)))
(unless (map-empty-p org-cite-basic--completion-cache) ;no key
(puthash entries t org-cite-basic--completion-cache)
org-cite-basic--completion-cache)))))
(defun org-cite-basic--complete-key (&optional multiple)
"Prompt for a reference key and return a citation reference string.