| 
					
				 | 
			
			
				@@ -68,6 +68,7 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (require 'bibtex) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (require 'json) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+(require 'map) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (require 'oc) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (require 'seq) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -719,11 +720,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 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -740,14 +748,16 @@ 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. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-When optional argument MULTIPLE is non-nil, prompt for multiple keys, until one 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-of them is nil.  Then return the list of reference strings selected. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+When optional argument MULTIPLE is non-nil, prompt for multiple 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+keys, until one of them is nil.  Then return the list of 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+reference strings selected. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 Raise an error when no bibliography is set in the buffer." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   (let* ((table 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -763,9 +773,9 @@ Raise an error when no bibliography is set in the buffer." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				              (build-prompt 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               (lambda () 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 (if keys 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    (format "Key (\"\" to exit) %s: " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    (format "Key (empty input exits) %s: " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             (mapconcat #'identity (reverse keys) ";")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  "Key (\"\" to exit): ")))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  "Key (empty input exits): ")))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         (let ((key (funcall prompt (funcall build-prompt)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           (while (org-string-nw-p key) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             (push (gethash key table) keys) 
			 |