X-Git-Url: https://git.donarmstrong.com/?p=org-ref.git;a=blobdiff_plain;f=doi-utils.org;h=68c74bcc3fde4ff88d3daa94bc5b934e99ddc400;hp=e80738a7228683da36a96c9ead08f5220b596306;hb=b27a82139b93605379c12ce4221581990de2da44;hpb=daf4a443943df1013e2823eaf9eb2cab875be4e0 diff --git a/doi-utils.org b/doi-utils.org index e80738a..68c74bc 100644 --- a/doi-utils.org +++ b/doi-utils.org @@ -915,7 +915,9 @@ The idea here is to perform a query on Crossref, get a helm buffer of candidates (cond ;; If region is active assume we want it ((region-active-p) - (buffer-substring (region-beginning) (region-end))) + (replace-regexp-in-string + "\n" " " + (buffer-substring (region-beginning) (region-end)))) ;; type or paste it in (t nil))) @@ -935,7 +937,9 @@ The idea here is to perform a query on Crossref, get a helm buffer of candidates (setq json-string (buffer-substring url-http-end-of-headers (point-max))) (setq json-data (json-read-from-string json-string))) - (let* ((name (format "Crossref hits for %s" query)) + (let* ((name (format "Crossref hits for %s" + ;; remove carriage returns. they cause problems in helm. + (replace-regexp-in-string "\n" " " query))) (helm-candidates (mapcar (lambda (x) (cons (concat @@ -949,7 +953,7 @@ The idea here is to perform a query on Crossref, get a helm buffer of candidates ;; just return the candidate (action . (("Insert bibtex entry" . (lambda (doi) (doi-utils-add-bibtex-entry-from-doi - (replace-regexp-in-string "^http://dx.doi.org/" "" doi)))) + (replace-regexp-in-string "^http://dx.doi.org/" "" doi) ,bibtex-file))) ("Open url" . (lambda (doi) (browse-url doi)))))))) (helm :sources '(source))))) @@ -1163,7 +1167,8 @@ Here is a list of helm candidates #+END_SRC #+RESULTS: -#+BEGIN_SRC emacs-lisp +#+BEGIN_SRC emacs-lisp :tangle no + (((fullCitation . "Ann M. Deml, Vladan Stevanovi\304\207, Christopher L. Muhich, Charles B. Musgrave, Ryan O'Hayre, 2014, 'Oxide enthalpy of formation and band gap energy as accurate descriptors of oxygen vacancy formation energetics', Energy & Environmental Science, vol. 7, no. 6, p. 1996") (year . "2014") (coins . "ctx_ver=Z39.88-2004&rft_id=info%3Adoi%2Fhttp%3A%2F%2Fdx.doi.org%2F10.1039%2Fc3ee43874k&rfr_id=info%3Asid%2Fcrossref.org%3Asearch&rft.atitle=Oxide+enthalpy+of+formation+and+band+gap+energy+as+accurate+descriptors+of+oxygen+vacancy+formation+energetics&rft.jtitle=Energy+%26+Environmental+Science&rft.date=2014&rft.volume=7&rft.issue=6&rft.spage=1996&rft.aufirst=Ann+M.&rft.aulast=Deml&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.au=Ann+M.+Deml&rft.au=+Vladan+Stevanovi%C4%87&rft.au=+Christopher+L.+Muhich&rft.au=+Charles+B.+Musgrave&rft.au=+Ryan+O%27Hayre") @@ -1256,7 +1261,7 @@ I found this on the web. It can be handy, but the bibtex entry has a lot of stuf #+BEGIN_SRC emacs-lisp :tangle doi-utils.el (defun isbn-to-bibtex-lead (isbn) "Search lead.to for ISBN bibtex entry. You have to copy the entry if it is on the page to your bibtex file." - (interactive "ISBN: ") + (interactive "sISBN: ") (browse-url (format "http://lead.to/amazon/en/?key=%s+&si=all&op=bt&bn=&so=sa&ht=us" isbn))) #+END_SRC @@ -1268,15 +1273,16 @@ http://xisbn.worldcat.org/xisbnadmin/doc/api.htm#getmetadata #+BEGIN_SRC emacs-lisp :tangle doi-utils.el (defun isbn-to-bibtex (isbn bibfile) "Get bibtex entry for ISBN and insert it into BIBFILE unless an -entry with the generated key already exists in the file. " +entry with the generated key already exists in the file." (interactive (list (read-input "ISBN: " ;; now set initial input (cond - ;; If region is active assume we want it - ((region-active-p) + ;; If region is active and it starts with a number, we use it + ((and (region-active-p) + (s-match "^[0-9]" (buffer-substring (region-beginning) (region-end)))) (buffer-substring (region-beginning) (region-end))) ;; if first entry in kill ring starts with a number assume it is an isbn ;; and use it as the guess @@ -1302,9 +1308,12 @@ entry with the generated key already exists in the file. " (new-entry) (new-key)) + ;; check if we got something (unless (string= "ok" status) (error "Status is %s" status)) + ;; construct an alphabetically sorted bibtex entry. I assume ISBN numbers go + ;; with book entries. (setq new-entry (concat "\n@book{,\n" (mapconcat @@ -1315,7 +1324,7 @@ entry with the generated key already exists in the file. " "\n") "\n}\n")) - ;; build entry in temp buffer to get the key + ;; build entry in temp buffer to get the key so we can check for duplicates (setq new-entry (with-temp-buffer (insert new-entry) (org-ref-clean-bibtex-entry) @@ -1330,16 +1339,19 @@ entry with the generated key already exists in the file. " new-key))) (goto-char (point-max)) (insert new-entry) - ;; set key + ;; set key. It is simplest to just replace it, even if it is the same. (bibtex-beginning-of-entry) (re-search-forward bibtex-entry-maybe-empty-head) (if (match-beginning bibtex-key-in-head) (delete-region (match-beginning bibtex-key-in-head) (match-end bibtex-key-in-head))) (insert new-key) - (bibtex-fill-entry))) + (bibtex-fill-entry) + (save-buffer))) #+END_SRC + + * end of file #+BEGIN_SRC emacs-lisp :tangle doi-utils.el (provide 'doi-utils) @@ -1351,25 +1363,3 @@ entry with the generated key already exists in the file. " #+RESULTS: : Loaded doi-utils.el - - - - - -#+BEGIN_SRC emacs-lisp -(setq data '(("John" . "john@email.com") - ("Jim" . "jim@email.com") - ("Jane" . "jane@email.com") - ("Jill" . "jill@email.com"))) - -(setq some-helm-source - `((name . "HELM at the Emacs") - (candidates . ,(mapcar 'car data)) - (action . (lambda (candidate) - (message-box "%s" (cdr (assoc candidate data))))))) - -(message-box "you chose %s" (helm :sources '(some-helm-source))) -#+END_SRC - -#+RESULTS: -: you chose jim@email.com