| 
					
				 | 
			
			
				@@ -67,6 +67,8 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (require 'bibtex) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (require 'oc) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+(declare-function org-open-at-point "org" (&optional arg)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (declare-function org-element-interpret-data "org-element" (data)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (declare-function org-element-property "org-element" (property element)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (declare-function org-element-type "org-element" (element)) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -399,21 +401,28 @@ Optional argument INFO is the export state, as a property list." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     (org-string-distance k key))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               keys)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-(defun org-cite-basic--make-repair-keymap (beg end suggestions) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  "Return keymap active on wrong citation keys. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-BEG and END are boundaries of the wrong citation.  SUGGESTIONS is a list of 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-replacement keys, as strings." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  (let ((km (make-sparse-keymap)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        (f (lambda () 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-             (interactive) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-             (setf (buffer-substring beg end) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                   (concat "@" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                           (if (= 1 (length suggestions)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                               (car suggestions) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                             (completing-read "Substitute key: " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                              suggestions nil t))))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    (define-key km (kbd "<mouse-1>") f) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    km)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+(defun org-cite-basic--set-keymap (beg end suggestions) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  "Set keymap on citation key between BEG and END positions. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+When the key is know, SUGGESTIONS is nil.  Otherwise, it may be 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+a list of replacement keys, as strings, which will be offered as 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+substitutes for the unknown key.  Finally, it may be the symbol 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+`all'." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  (let ((km (make-sparse-keymap))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    (define-key km (kbd "<mouse-1>") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      (pcase suggestions 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ('nil #'org-open-at-point) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ('all #'org-cite-insert) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        (_ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         (lambda () 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+           (interactive) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+           (setf (buffer-substring beg end) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                 (concat "@" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                         (if (= 1 (length suggestions)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                             (car suggestions) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                           (completing-read "Did you mean: " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                            suggestions nil t)))))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    (put-text-property beg end 'keymap km))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (defun org-cite-basic-activate (citation) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   "Set various text properties on CITATION object. 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -438,24 +447,26 @@ them with a mouse click." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         (if (member key keys) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             ;; Activate a correct key.  Face is `org-cite-key' and 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             ;; `help-echo' displays bibliography entry, for reference. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ;; <mouse-1> calls `org-open-at-point'. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             (let* ((entry (org-cite-basic--get-entry key)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    (bibliography-entry 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     (org-element-interpret-data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      (org-cite-basic--print-entry entry "plain")))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               (add-face-text-property beg end 'org-cite-key) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              (put-text-property beg end 'help-echo bibliography-entry)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              (put-text-property beg end 'help-echo bibliography-entry) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              (org-cite-basic--set-keymap beg end nil)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           ;; Activate a wrong key.  Face is `error', `help-echo' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          ;; displays possible suggestions, and <mouse-1> provides 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          ;; completion to fix the key. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          ;; displays possible suggestions. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           (add-face-text-property beg end 'error) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           (let ((close-keys (org-cite-basic--close-keys key keys))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             (when close-keys 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               (put-text-property beg end 'help-echo 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                  (concat "Suggestions (mouse-1 to substitute): " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                         (mapconcat #'identity close-keys " "))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              (put-text-property beg end 'keymap 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                 (org-cite-basic--make-repair-keymap 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                  beg end close-keys))))))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                         (mapconcat #'identity close-keys " ")))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ;; When the are close know keys, <mouse-1> provides 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ;; completion to fix the current one.  Otherwise, call 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ;; `org-cite-insert'. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            (org-cite-basic--set-keymap beg end (or close-keys 'all)))))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ;;; "Export" capability 
			 |