diff --git a/bibtex-completion.el b/bibtex-completion.el index e3d437d..42759ca 100644 --- a/bibtex-completion.el +++ b/bibtex-completion.el @@ -56,9 +56,24 @@ (declare-function org-element-property "org-element") (defgroup bibtex-completion nil - "Helm plugin for searching entries in a BibTeX bibliography." + "Provides searching of entries in a BibTeX bibliography, and running actions on them." :group 'completion) +(defvar bibtex-completion-map + "Keymap for bibtex-completion commands" + (let ((map (make-sparse-keymap))) + (define-key map (kbd "p") 'bibtex-completion-open-pdf) + (define-key map (kbd "u") 'bibtex-completion-open-url-or-doi) + (define-key map (kbd "c") 'bibtex-completion-insert-citation) + (define-key map (kbd "r") 'bibtex-completion-insert-reference) + (define-key map (kbd "k") 'bibtex-completion-insert-key) + (define-key map (kbd "b") 'bibtex-completion-insert-bibtex) + (define-key map (kbd "a") 'bibtex-completion-add-PDF-attachment) + (define-key map (kbd "e") 'bibtex-completion-edit-notes) + (define-key map (kbd "s") 'bibtex-completion-show-entry) + (define-key map (kbd "l") 'bibtex-completion-add-pdf-to-library) + map)) + (defcustom bibtex-completion-bibliography nil "The BibTeX file or list of BibTeX files. Org-bibtex users can also specify org mode bibliography files, in @@ -478,6 +493,26 @@ for string replacement." (defvar bibtex-completion-cached-notes-keys nil "A cache storing notes keys obtained when the bibliography was last parsed.") +(defun bibtex-completion--read () + "Select BibTeX entries in completion system." + ;; define a completion function that defaults to completing-read, but can be overridden + (list (cdr (assoc (completing-read-bibtex--read) (bibtex-completion--get-candidates))))) + +(defun bibtex-completion--completing-read () + "Read bibtex-completion entries for completion using completing-read." + (bibtex-completion-init) + (completing-read + "BibTeX entries: " + (bibtex-completion--get-candidates))) + +(defun bibtex-completion--get-candidates () + "Return all keys from bibtex-completion-candidates." + (mapcar + (lambda (cand) + (cons (bibtex-completion-format-entry cand (1- (frame-width))) + (cdr (assoc "=key=" cand)))) + (bibtex-completion-candidates))) + (defun bibtex-completion-candidates () "Read the BibTeX files and return a list of conses, one for each entry. The first element of these conses is a string containing authors, @@ -1087,6 +1122,7 @@ The format depends on (let ((format-function (cdr (or (assoc major-mode bibtex-completion-format-citation-functions) (assoc 'default bibtex-completion-format-citation-functions))))) + (interactive (list (bibtex-completion--read))) (insert (funcall format-function keys)))) @@ -1096,6 +1132,7 @@ The format depends on (s-word-wrap fill-column (concat "\n- " (bibtex-completion-apa-format-reference it))) keys))) + (interactive (list (bibtex-completion--read))) (insert "\n" (s-join "\n" refs) "\n"))) (defun bibtex-completion-apa-format-reference (key) @@ -1293,11 +1330,13 @@ Surrounding curly braces are stripped." (defun bibtex-completion-insert-key (keys) "Insert BibTeX KEYS at point." + (interactive (list (bibtex-completion--read))) (insert (funcall 'bibtex-completion-format-citation-default keys))) (defun bibtex-completion-insert-bibtex (keys) "Insert BibTeX entries for entries in KEYS at point." + (interactive (list (bibtex-completion--read))) (insert (s-join "\n" (--map (bibtex-completion-make-bibtex it) keys)))) (defun bibtex-completion-make-bibtex (key)