From: John Kitchin Date: Sat, 31 Jan 2015 20:47:29 +0000 (-0500) Subject: polished isbn function X-Git-Url: https://git.donarmstrong.com/?p=org-ref.git;a=commitdiff_plain;h=cff970c7d49ebc7b61878dd5ca89b96185fef28f;ds=sidebyside polished isbn function --- diff --git a/doi-utils.org b/doi-utils.org index e80738a..ada477c 100644 --- a/doi-utils.org +++ b/doi-utils.org @@ -1268,15 +1268,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 +1303,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 +1319,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 +1334,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)