X-Git-Url: https://git.donarmstrong.com/?p=org-ref.git;a=blobdiff_plain;f=org-ref.el;h=842483791e20db7ee4cbfaccc994535d4590a5ef;hp=cf279584d0a22b7fb1a085a03ffe6061cd2c2333;hb=d9d107c9e0aeb8c285c6aeef774059fee0bbac6d;hpb=0cc2275fc2fae335628696fd625848880d09e1d0 diff --git a/org-ref.el b/org-ref.el index cf27958..8424837 100644 --- a/org-ref.el +++ b/org-ref.el @@ -41,6 +41,7 @@ (require 'helm-config) (require 'helm-bibtex) (require 'org) +(require 'org-element) ;; * Custom variables (defgroup org-ref nil @@ -81,15 +82,19 @@ You should use full-paths for each file." '(("article" . "%a, %t, %j, %v(%n), %p (%y). link. doi.") ("book" . "%a, %t, %u (%y).") - + ("techreport" . "%a, %t, %i, %u (%y).") ("proceedings" . "%e, %t in %S, %u (%y).") - ("inproceedings" . "%a, %t, %p, in %b, edited by %e, %u (%y)")) - "String to format an entry. Just the reference, no numbering at the beginning, etc... see the `org-ref-reftex-format-citation' docstring for the escape codes." :type 'string :group 'org-ref) +(defcustom org-ref-note-title-format + "** TODO %y - %t" + "String to format the title of a note. See the `org-ref-reftex-format-citation' docstring for the escape codes." + :type 'string + :group 'org-ref) + (defcustom org-ref-open-notes-function (lambda () (org-show-entry) @@ -329,12 +334,12 @@ You will see a message in the minibuffer when on a cite, ref or label link." ":\\([a-zA-Z0-9-_:\\./]*,?\\)*")) -(setq org-ref-label-re - "label:\\([a-zA-Z0-9-_:]*,?\\)*") +(defvar org-ref-label-re + "label:\\([a-zA-Z0-9-_:]*,?\\)*") -(setq org-ref-ref-re - "\\(eq\\)?ref:\\([a-zA-Z0-9-_:]*,?\\)*") +(defvar org-ref-ref-re + "\\(eq\\)?ref:\\([a-zA-Z0-9-_:]*,?\\)*") (defface org-ref-cite-face @@ -459,8 +464,11 @@ environment, only %l is available." ((= l ?E) (car (reftex-get-bib-names "editor" entry))) ((= l ?h) (org-ref-reftex-get-bib-field "howpublished" entry)) ((= l ?i) (org-ref-reftex-get-bib-field "institution" entry)) - ((= l ?j) (org-ref-reftex-get-bib-field "journal" entry)) - ((= l ?k) (org-ref-reftex-get-bib-field "key" entry)) + ((= l ?j) (let ((jt (reftex-get-bib-field "journal" entry))) + (if (string= "" jt) + (reftex-get-bib-field "journaltitle" entry) + jt))) + ((= l ?k) (org-ref-reftex-get-bib-field "=key=" entry)) ((= l ?m) (org-ref-reftex-get-bib-field "month" entry)) ((= l ?n) (org-ref-reftex-get-bib-field "number" entry)) ((= l ?o) (org-ref-reftex-get-bib-field "organization" entry)) @@ -489,7 +497,6 @@ environment, only %l is available." (while (string-match "[ ,.;:]*%<" format) (setq format (replace-match "" t t format))) ;; also replace carriage returns, tabs, and multiple whitespaces - (setq format (replace-regexp-in-string "\n\\|\t\\|\s+" " " format)) format) (defun org-ref-get-bibtex-entry-citation (key) @@ -500,14 +507,15 @@ Format according to the type in `org-ref-bibliography-entry-format'." (file) (entry) (bibtex-entry) (entry-type) (format)) (setq file (catch 'result - (loop for file in org-ref-bibliography-files do - (if (org-ref-key-in-file-p key (file-truename file)) - (throw 'result file) - (message "%s not found in %s" - key (file-truename file)))))) + (cl-loop for file in org-ref-bibliography-files do + (if (org-ref-key-in-file-p key (file-truename file)) + (throw 'result file) + (message "%s not found in %s" + key (file-truename file)))))) (with-temp-buffer (insert-file-contents file) + (bibtex-set-dialect (parsebib-find-bibtex-dialect) t) (bibtex-search-entry key nil 0) (setq bibtex-entry (bibtex-parse-entry)) ;; downcase field names so they work in the format-citation code @@ -548,11 +556,14 @@ Format according to the type in `org-ref-bibliography-entry-format'." ;; unescape the & (setq output (replace-regexp-in-string "\\\\&" "&" output)) ;; hack to replace {} around text - (setq output (replace-regexp-in-string " {\\(.*\\)} " " \\1 " output)) + (setq output (replace-regexp-in-string "{" "" output)) + (setq output (replace-regexp-in-string "}" "" output)) ;; get rid of empty parens (setq output (replace-regexp-in-string "()" "" output)) ;; get rid of empty link and doi (setq output (replace-regexp-in-string " link\\." "" output)) + ;; change double dash to single dash + (setq output (replace-regexp-in-string "--" "-" output)) (setq output (replace-regexp-in-string " doi\\." "" output)) (format "
  • [%s] %s
  • " key key output))) @@ -572,13 +583,14 @@ Format according to the type in `org-ref-bibliography-entry-format'." (file) (entry) (bibtex-entry) (entry-type) (format)) (setq file (catch 'result - (loop for file in org-ref-bibliography-files do + (cl-loop for file in org-ref-bibliography-files do (if (org-ref-key-in-file-p key (file-truename file)) (throw 'result file) (message "%s not found in %s" key (file-truename file)))))) (with-temp-buffer (insert-file-contents file) + (bibtex-set-dialect (parsebib-find-bibtex-dialect) t) (bibtex-search-entry key nil 0) (setq entry (bibtex-parse-entry)) (format "** %s - %s @@ -651,26 +663,27 @@ Format according to the type in `org-ref-bibliography-entry-format'." (split-string (org-element-property :path object) ",")) - ;; now if we have comma separated bibliographies - ;; we find the one clicked on. we want to - ;; search forward to next comma from point - (save-excursion - (if (search-forward "," link-string-end 1 1) - ;; we found a match - (setq key-end (- (match-end 0) 1)) - ;; no comma found so take the point - (setq key-end (point)))) - ;; and backward to previous comma from point - (save-excursion - (if (search-backward "," link-string-beginning 1 1) - ;; we found a match - (setq key-beginning (+ (match-beginning 0) 1)) - (setq key-beginning (point)))) ; no match found + (let (key-beginning key-end) + ;; now if we have comma separated bibliographies + ;; we find the one clicked on. we want to + ;; search forward to next comma from point + (save-excursion + (if (search-forward "," link-string-end 1 1) + ;; we found a match + (setq key-end (- (match-end 0) 1)) + ;; no comma found so take the point + (setq key-end (point)))) + ;; and backward to previous comma from point + (save-excursion + (if (search-backward "," link-string-beginning 1 1) + ;; we found a match + (setq key-beginning (+ (match-beginning 0) 1)) + (setq key-beginning (point)))) ; no match found ;; save the key we clicked on. - (setq bibfile (org-ref-strip-string - (buffer-substring key-beginning key-end))) - ;; open file on click - (find-file bibfile))) + (setq bibfile (org-ref-strip-string + (buffer-substring key-beginning key-end))) + ;; open file on click + (find-file bibfile)))) ;; formatting code (lambda (keyword desc format) @@ -717,21 +730,22 @@ Format according to the type in `org-ref-bibliography-entry-format'." (set (make-local-variable 'reftex-default-bibliography) (split-string (org-element-property :path object) ",")) - ;; now if we have comma separated bibliographies - ;; we find the one clicked on. we want to - ;; search forward to next comma from point - (save-excursion - (if (search-forward "," link-string-end 1 1) - (setq key-end (- (match-end 0) 1)) ; we found a match - (setq key-end (point)))) ; no comma found so take the point - ;; and backward to previous comma from point - (save-excursion - (if (search-backward "," link-string-beginning 1 1) - (setq key-beginning (+ (match-beginning 0) 1)) ; we found a match - (setq key-beginning (point)))) ; no match found - ;; save the key we clicked on. - (setq bibfile (org-ref-strip-string (buffer-substring key-beginning key-end))) - (find-file bibfile))) ; open file on click + (let (key-beginning key-end) + ;; now if we have comma separated bibliographies + ;; we find the one clicked on. we want to + ;; search forward to next comma from point + (save-excursion + (if (search-forward "," link-string-end 1 1) + (setq key-end (- (match-end 0) 1)) ; we found a match + (setq key-end (point)))) ; no comma found so take the point + ;; and backward to previous comma from point + (save-excursion + (if (search-backward "," link-string-beginning 1 1) + (setq key-beginning (+ (match-beginning 0) 1)) ; we found a match + (setq key-beginning (point)))) ; no match found + ;; save the key we clicked on. + (setq bibfile (org-ref-strip-string (buffer-substring key-beginning key-end))) + (find-file bibfile)))) ; open file on click ;; formatting code (lambda (keyword desc format) @@ -823,21 +837,22 @@ ARG does nothing." (set (make-local-variable 'reftex-default-addbibresource) (split-string (org-element-property :path object) ",")) - ;; now if we have comma separated bibliographies - ;; we find the one clicked on. we want to - ;; search forward to next comma from point - (save-excursion - (if (search-forward "," link-string-end 1 1) - (setq key-end (- (match-end 0) 1)) ; we found a match - (setq key-end (point)))) ; no comma found so take the point - ;; and backward to previous comma from point - (save-excursion - (if (search-backward "," link-string-beginning 1 1) - (setq key-beginning (+ (match-beginning 0) 1)) ; we found a match - (setq key-beginning (point)))) ; no match found - ;; save the key we clicked on. - (setq bibfile (org-ref-strip-string (buffer-substring key-beginning key-end))) - (find-file bibfile))) ; open file on click + (let (key-beginning key-end) + ;; now if we have comma separated bibliographies + ;; we find the one clicked on. we want to + ;; search forward to next comma from point + (save-excursion + (if (search-forward "," link-string-end 1 1) + (setq key-end (- (match-end 0) 1)) ; we found a match + (setq key-end (point)))) ; no comma found so take the point + ;; and backward to previous comma from point + (save-excursion + (if (search-backward "," link-string-beginning 1 1) + (setq key-beginning (+ (match-beginning 0) 1)) ; we found a match + (setq key-beginning (point)))) ; no match found + ;; save the key we clicked on. + (setq bibfile (org-ref-strip-string (buffer-substring key-beginning key-end))) + (find-file bibfile)))) ; open file on click ;; formatting code (lambda (keyword desc format) @@ -864,11 +879,11 @@ ARG does nothing." (string-match-p "[^.]*\\.\\(png\\|jpg\\|eps\\|pdf\\)$" (org-element-property :path link))) - (incf counter) + (cl-incf counter) (let* ((start (org-element-property :begin link)) (parent (car (cdr (org-element-property :parent link)))) - (caption (caaar (plist-get parent :caption))) + (caption (cl-caaar (plist-get parent :caption))) (name (plist-get parent :name))) (if caption (format @@ -907,10 +922,10 @@ ARG does nothing." (org-element-map (org-element-parse-buffer 'element) 'table (lambda (table) "create a link for to the table" - (incf counter) + (cl-incf counter) (let ((start (org-element-property :begin table)) (name (org-element-property :name table)) - (caption (caaar (org-element-property :caption table)))) + (caption (cl-caaar (org-element-property :caption table)))) (if caption (format "[[elisp:(progn (switch-to-buffer \"%s\")(widen)(goto-char %s))][table %s: %s]] %s\n" @@ -967,7 +982,7 @@ ARG does nothing." (org-ref-count-labels label)))) (lambda (keyword desc format) (cond - ((eq format 'html) (format "()" path)) + ((eq format 'html) (format "
    " keyword)) ((eq format 'latex) (format "\\label{%s}" keyword))))) @@ -1046,7 +1061,7 @@ ARG does nothing." ;formatting (lambda (keyword desc format) (cond - ((eq format 'html) (format "(%s)" path)) + ((eq format 'html) (format "%s" keyword keyword)) ((eq format 'latex) (format "\\ref{%s}" keyword))))) @@ -1221,19 +1236,19 @@ Use C-u C-u to insert a [[#custom-id]] link" (helm :input (thing-at-point 'word) :sources `(((name . "Available labels to ref") - (candidates . ,(loop for label in labels - for context in contexts - ;; we do some kludgy adding spaces - ;; and bars to make it "easier" to - ;; see in helm. - collect (cons (concat - label "\n" - (mapconcat - (lambda (x) - (concat " |" x)) - (split-string context "\n") - "\n" - ) "\n\n") label))) + (candidates . ,(cl-loop for label in labels + for context in contexts + ;; we do some kludgy adding spaces + ;; and bars to make it "easier" to + ;; see in helm. + collect (cons (concat + label "\n" + (mapconcat + (lambda (x) + (concat " |" x)) + (split-string context "\n") + "\n" + ) "\n\n") label))) ;; default action to replace or insert ref link. (action . (lambda (label) (switch-to-buffer ,cb) @@ -1417,28 +1432,30 @@ keyword we clicked on. We also strip the text properties." ;; this means no description in the link (progn ;; we need the link path start and end - (save-excursion - (goto-char (org-element-property :begin object)) - (search-forward link-string nil nil 1) - (setq link-string-beginning (match-beginning 0)) - (setq link-string-end (match-end 0))) + (let (link-string-beginning link-string-end) + (save-excursion + (goto-char (org-element-property :begin object)) + (search-forward link-string nil nil 1) + (setq link-string-beginning (match-beginning 0)) + (setq link-string-end (match-end 0))) - ;; The key is the text between commas, or the link boundaries - (save-excursion - (if (search-forward "," link-string-end t 1) - (setq key-end (- (match-end 0) 1)) ; we found a match - (setq key-end link-string-end))) ; no comma found so take the end - ;; and backward to previous comma from point which defines the start character - (save-excursion - (if (search-backward "," link-string-beginning 1 1) - (setq key-beginning (+ (match-beginning 0) 1)) ; we found a match - (setq key-beginning link-string-beginning))) ; no match found - ;; save the key we clicked on. - (setq bibtex-key - (org-ref-strip-string - (buffer-substring key-beginning key-end))) - (set-text-properties 0 (length bibtex-key) nil bibtex-key) - bibtex-key) + (let (key-beginning key-end) + ;; The key is the text between commas, or the link boundaries + (save-excursion + (if (search-forward "," link-string-end t 1) + (setq key-end (- (match-end 0) 1)) ; we found a match + (setq key-end link-string-end))) ; no comma found so take the end + ;; and backward to previous comma from point which defines the start character + (save-excursion + (if (search-backward "," link-string-beginning 1 1) + (setq key-beginning (+ (match-beginning 0) 1)) ; we found a match + (setq key-beginning link-string-beginning))) ; no match found + ;; save the key we clicked on. + (let ((bibtex-key + (org-ref-strip-string + (buffer-substring key-beginning key-end)))) + (set-text-properties 0 (length bibtex-key) nil bibtex-key) + bibtex-key)))) ;; link with description. assume only one key link-string))) @@ -1505,9 +1522,9 @@ falling back to what the user has set in `org-ref-default-bibliography'" (unless key (setq key (org-ref-get-bibtex-key-under-cursor))) (setq file (catch 'result - (loop for file in org-ref-bibliography-files do - (if (org-ref-key-in-file-p key (file-truename file)) - (throw 'result file))))) + (cl-loop for file in org-ref-bibliography-files do + (if (org-ref-key-in-file-p key (file-truename file)) + (throw 'result file))))) (cons key file))) ;; *** key at point functions @@ -1532,6 +1549,7 @@ falling back to what the user has set in `org-ref-default-bibliography'" (save-excursion (with-temp-buffer (insert-file-contents bibfile) + (bibtex-set-dialect (parsebib-find-bibtex-dialect) t) (bibtex-search-entry key) ;; I like this better than bibtex-url which does not always find ;; the urls @@ -1558,6 +1576,7 @@ falling back to what the user has set in `org-ref-default-bibliography'" (save-excursion (with-temp-buffer (insert-file-contents bibfile) + (bibtex-set-dialect (parsebib-find-bibtex-dialect) t) (bibtex-search-entry key) (org-ref-open-bibtex-notes))))) @@ -1572,6 +1591,7 @@ falling back to what the user has set in `org-ref-default-bibliography'" (message "%s" (progn (with-temp-buffer (insert-file-contents bibfile) + (bibtex-set-dialect (parsebib-find-bibtex-dialect) t) (bibtex-search-entry key) (org-ref-bib-citation)))))) @@ -1644,6 +1664,7 @@ Prompt for NEW-FILE includes bib files in `org-ref-default-bibliography', and bi (save-excursion (with-temp-buffer (insert-file-contents bibfile) + (bibtex-set-dialect (parsebib-find-bibtex-dialect) t) (bibtex-search-entry key) (setq doi (bibtex-autokey-get-field "doi")) ;; in case doi is a url, remove the url part. @@ -1701,11 +1722,13 @@ get a lot of options. LINK-STRING is used by the link function." (url (save-excursion (with-temp-buffer (insert-file-contents bibfile) + (bibtex-set-dialect (parsebib-find-bibtex-dialect) t) (bibtex-search-entry key) (bibtex-autokey-get-field "url")))) (doi (save-excursion (with-temp-buffer (insert-file-contents bibfile) + (bibtex-set-dialect (parsebib-find-bibtex-dialect) t) (bibtex-search-entry key) ;; I like this better than bibtex-url which does not always find ;; the urls @@ -1782,6 +1805,7 @@ get a lot of options. LINK-STRING is used by the link function." (save-excursion (with-temp-buffer (insert-file-contents bibfile) + (bibtex-set-dialect (parsebib-find-bibtex-dialect) t) (bibtex-search-entry key) (org-ref-bib-citation)))) "\n" @@ -2086,17 +2110,20 @@ arg (ALTERNATIVE-CITE) to get a menu of citation types." (defun org-ref-bib-citation () "From a bibtex entry, create and return a simple citation string. This assumes you are in an article." - + (bibtex-set-dialect nil t) (bibtex-beginning-of-entry) (let* ((cb (current-buffer)) (bibtex-expand-strings t) - (entry (loop for (key . value) in (bibtex-parse-entry t) - collect (cons (downcase key) value))) + (entry (cl-loop for (key . value) in (bibtex-parse-entry t) + collect (cons (downcase key) value))) (title (replace-regexp-in-string "\n\\|\t\\|\s+" " " (reftex-get-bib-field "title" entry))) (year (reftex-get-bib-field "year" entry)) (author (replace-regexp-in-string "\n\\|\t\\|\s+" " " (reftex-get-bib-field "author" entry))) (key (reftex-get-bib-field "=key=" entry)) - (journal (reftex-get-bib-field "journal" entry)) + (journal (let ((jt (reftex-get-bib-field "journal" entry))) + (if (string= "" jt) + (reftex-get-bib-field "journaltitle" entry) + jt))) (volume (reftex-get-bib-field "volume" entry)) (pages (reftex-get-bib-field "pages" entry)) (doi (reftex-get-bib-field "doi" entry)) @@ -2111,8 +2138,8 @@ This assumes you are in an article." (bibtex-beginning-of-entry) (let* ((cb (current-buffer)) (bibtex-expand-strings t) - (entry (loop for (key . value) in (bibtex-parse-entry t) - collect (cons (downcase key) value))) + (entry (cl-loop for (key . value) in (bibtex-parse-entry t) + collect (cons (downcase key) value))) (title (replace-regexp-in-string "\n\\|\t\\|\s+" " " (reftex-get-bib-field "title" entry))) (year (reftex-get-bib-field "year" entry)) (author (replace-regexp-in-string "\n\\|\t\\|\s+" " " (reftex-get-bib-field "author" entry))) @@ -2162,18 +2189,9 @@ construct the heading by hand." (bibtex-beginning-of-entry) (let* ((cb (current-buffer)) (bibtex-expand-strings t) - (entry (loop for (key . value) in (bibtex-parse-entry t) - collect (cons (downcase key) value))) - (title (replace-regexp-in-string "\n\\|\t\\|\s+" " " (reftex-get-bib-field "title" entry))) - (year (reftex-get-bib-field "year" entry)) - (author (replace-regexp-in-string "\n\\|\t\\|\s+" " " (reftex-get-bib-field "author" entry))) - (key (reftex-get-bib-field "=key=" entry)) - (journal (reftex-get-bib-field "journal" entry)) - (volume (reftex-get-bib-field "volume" entry)) - (pages (reftex-get-bib-field "pages" entry)) - (doi (reftex-get-bib-field "doi" entry)) - (url (reftex-get-bib-field "url" entry)) - ) + (entry (cl-loop for (key . value) in (bibtex-parse-entry t) + collect (cons (downcase key) value))) + (key (reftex-get-bib-field "=key=" entry))) ;; save key to clipboard to make saving pdf later easier by pasting. (with-temp-buffer @@ -2190,38 +2208,41 @@ construct the heading by hand." (if (re-search-forward (format ":Custom_ID: %s$" key) nil 'end) (funcall org-ref-open-notes-function) ;; no entry found, so add one - (insert (format "\n** TODO %s - %s" year title)) - (insert (format" + (insert (org-ref-reftex-format-citation entry (concat "\n" org-ref-note-title-format))) + (insert (org-ref-reftex-format-citation + entry + (concat " :PROPERTIES: - :Custom_ID: %s - :AUTHOR: %s - :JOURNAL: %s - :YEAR: %s - :VOLUME: %s - :PAGES: %s - :DOI: %s - :URL: %s + :Custom_ID: %k + :AUTHOR: %9a + :JOURNAL: %j + :YEAR: %y + :VOLUME: %v + :PAGES: %p + :DOI: %D + :URL: %U :END: -[[cite:%s]] [[file:%s/%s.pdf][pdf]]\n\n" -key author journal year volume pages doi url key org-ref-pdf-directory key)) -(save-buffer)))) +" + (format "[[cite:%s]] [[file:%s/%s.pdf][pdf]]\n\n" + key org-ref-pdf-directory key)))) + (save-buffer)))) (defun org-ref-open-notes-from-reftex () "Call reftex, and open notes for selected entry." (interactive) (let ((bibtex-key ))) - ;; now look for entry in the notes file - (if org-ref-bibliography-notes - (find-file-other-window org-ref-bibliography-notes) - (error "Org-ref-bib-bibliography-notes is not set to anything")) + ;; now look for entry in the notes file + (if org-ref-bibliography-notes + (find-file-other-window org-ref-bibliography-notes) + (error "Org-ref-bib-bibliography-notes is not set to anything")) - (goto-char (point-min)) + (goto-char (point-min)) - (re-search-forward (format - ":Custom_ID: %s$" - (first (reftex-citation t)) nil 'end)) - (funcall org-ref-open-notes-function)) + (re-search-forward (format + ":Custom_ID: %s$" + (cl-first (reftex-citation t)) nil 'end)) + (funcall org-ref-open-notes-function)) ;; ** Open bibtex entry in browser (defun org-ref-open-in-browser () @@ -2733,6 +2754,7 @@ Shows bad citations, ref links and labels" (bibfile (cdr results))) (with-temp-buffer (insert-file-contents bibfile) + (bibtex-set-dialect (parsebib-find-bibtex-dialect) t) (bibtex-search-entry key nil 0) (prog1 (reftex-get-bib-field "year" (bibtex-parse-entry t)) )))) @@ -2750,7 +2772,7 @@ Shows bad citations, ref links and labels" (setq keys (org-ref-split-and-strip-string link-string)) (setq years (mapcar 'org-ref-get-citation-year keys)) (setq data (mapcar* (lambda (a b) `(,a . ,b)) years keys)) - (setq data (cl-sort data (lambda (x y) (< (string-to-int (car x)) (string-to-int (car y)))))) + (setq data (cl-sort data (lambda (x y) (< (string-to-number (car x)) (string-to-number (car y)))))) ;; now get the keys separated by commas (setq keys (mapconcat (lambda (x) (cdr x)) data ",")) ;; and replace the link with the sorted keys @@ -2924,26 +2946,27 @@ Shows bad citations, ref links and labels" (when (> link-string-beginning (point)) (goto-char link-string-beginning)) - ;; now if we have comma separated bibliographies - ;; we find the one clicked on. we want to - ;; search forward to next comma from point - (save-excursion - (if (search-forward "," link-string-end 1 1) - (setq key-end (- (match-end 0) 1)) ; we found a match - (setq key-end (point)))) ; no comma found so take the point + (let (key-beginning key-end) + ;; now if we have comma separated bibliographies + ;; we find the one clicked on. we want to + ;; search forward to next comma from point + (save-excursion + (if (search-forward "," link-string-end 1 1) + (setq key-end (- (match-end 0) 1)) ; we found a match + (setq key-end (point)))) ; no comma found so take the point - ;; and backward to previous comma from point - (save-excursion - (if (search-backward "," link-string-beginning 1 1) - (setq key-beginning (+ (match-beginning 0) 1)) ; we found a match - (setq key-beginning (point)))) ; no match found - ;; save the key we clicked on. - (setq bibfile - (org-ref-strip-string - (buffer-substring key-beginning key-end))) - (if (file-exists-p bibfile) - (message "%s exists." bibfile) - (message "!!! %s NOT FOUND !!!" bibfile)))))))))) + ;; and backward to previous comma from point + (save-excursion + (if (search-backward "," link-string-beginning 1 1) + (setq key-beginning (+ (match-beginning 0) 1)) ; we found a match + (setq key-beginning (point)))) ; no match found + ;; save the key we clicked on. + (setq bibfile + (org-ref-strip-string + (buffer-substring key-beginning key-end))) + (if (file-exists-p bibfile) + (message "%s exists." bibfile) + (message "!!! %s NOT FOUND !!!" bibfile))))))))))) ;; ** aliases (defalias 'oro 'org-ref-open-citation-at-point) @@ -3079,16 +3102,16 @@ User is prompted for tags. This function is called from `helm-bibtex'. Argument CANDIDATES helm candidates." (message "") (let ((keywords (read-string "Keywords (comma separated): "))) - (loop for key in (helm-marked-candidates) - do - (save-window-excursion - (helm-bibtex-show-entry key) - (bibtex-set-field - "keywords" - (concat - keywords - ", " (bibtex-autokey-get-field "keywords"))) - (save-buffer))))) + (cl-loop for key in (helm-marked-candidates) + do + (save-window-excursion + (helm-bibtex-show-entry key) + (bibtex-set-field + "keywords" + (concat + keywords + ", " (bibtex-autokey-get-field "keywords"))) + (save-buffer))))) (setq helm-source-bibtex '((name . "BibTeX entries") @@ -3219,6 +3242,7 @@ With two prefix args, insert a label link." (save-excursion (with-temp-buffer (insert-file-contents bibfile) + (bibtex-set-dialect (parsebib-find-bibtex-dialect) t) (bibtex-search-entry key) (org-ref-bib-citation))) "!!! No entry found !!!" ))) @@ -3234,11 +3258,13 @@ Checks for pdf and doi, and add appropriate functions." (url (save-excursion (with-temp-buffer (insert-file-contents bibfile) + (bibtex-set-dialect (parsebib-find-bibtex-dialect) t) (bibtex-search-entry key) (bibtex-autokey-get-field "url")))) (doi (save-excursion (with-temp-buffer (insert-file-contents bibfile) + (bibtex-set-dialect (parsebib-find-bibtex-dialect) t) (bibtex-search-entry key) ;; I like this better than bibtex-url which does not always find ;; the urls @@ -3314,10 +3340,10 @@ Checks for pdf and doi, and add appropriate functions." (email-bibtex-entry)))) t) ;; finally return a numbered list of the candidates - (loop for i from 0 - for cell in candidates - collect (cons (format "%2s. %s" i (car cell)) - (cdr cell))))) + (cl-loop for i from 0 + for cell in candidates + collect (cons (format "%2s. %s" i (car cell)) + (cdr cell))))) (defvar org-ref-helm-user-candidates '()