X-Git-Url: https://git.donarmstrong.com/?p=org-ref.git;a=blobdiff_plain;f=org-ref.el;h=1d9ec6880778cfda2538be488d91694b43273f76;hp=8be10ef67a1170df7fbfe103fef37857f24703a9;hb=ed52c1ec9545f39007c1df422ffb4407a323c605;hpb=98af8209494ff34ae87a4a529d621f1e86ada923
diff --git a/org-ref.el b/org-ref.el
index 8be10ef..1d9ec68 100644
--- a/org-ref.el
+++ b/org-ref.el
@@ -89,6 +89,12 @@ You should use full-paths for each file."
: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)
@@ -105,11 +111,23 @@ You should use full-paths for each file."
(defcustom org-ref-open-pdf-function
'org-ref-open-pdf-at-point
-"User-defined function to open a pdf from a link. The function must get the key at point, and derive a path to the pdf file, then open it. The default function is `org-ref-open-pdf-at-point'."
+ "User-defined function to open a pdf from a link. The
+function must get the key at point, and derive a path to the pdf
+file, then open it. The default function is
+`org-ref-open-pdf-at-point'."
:type 'function
:group 'org-ref)
+(defcustom org-ref-get-pdf-filename-function
+ 'org-ref-get-pdf-filename
+ "User-defined function to get a filename from a bibtex key.
+The function must take a key as an argument, and return the path
+to the corresponding filename. The default is
+`org-ref-get-pdf-filename'. An alternative value is
+`org-ref-get-mendeley-filename'.")
+
+
(defcustom org-ref-insert-cite-function
'org-ref-helm-insert-cite-link
"Function to call to insert citation links. The default is `org-ref-helm-insert-cite-link' which uses `helm-bibtex'. `org-ref' modifies `helm-bibtex' a little bit to give `org-mode' citations, and to reorder default actions. You may use `org-ref-insert-cite-link' if you like the reftex interface."
@@ -442,10 +460,14 @@ environment, only %l is available."
(if reftex-comment-citations
reftex-cite-comment-format
"")))
- ((= l ?a) (reftex-format-names
- (reftex-get-bib-names "author" entry)
- (or n 2)))
- ((= l ?A) (car (reftex-get-bib-names "author" entry)))
+ ((= l ?a) (replace-regexp-in-string
+ "\n\\|\t\\|\s+" " "
+ (reftex-format-names
+ (reftex-get-bib-names "author" entry)
+ (or n 2))))
+ ((= l ?A) (replace-regexp-in-string
+ "\n\\|\t\\|\s+" " "
+ (car (reftex-get-bib-names "author" entry))))
((= l ?b) (org-ref-reftex-get-bib-field "booktitle" entry "in: %s"))
((= l ?B) (reftex-abbreviate-title
(org-ref-reftex-get-bib-field "booktitle" entry "in: %s")))
@@ -458,8 +480,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))
@@ -473,9 +498,13 @@ environment, only %l is available."
((= l ?U) (org-ref-reftex-get-bib-field "url" entry))
((= l ?r) (org-ref-reftex-get-bib-field "address" entry))
;; strip enclosing brackets from title if they are there
- ((= l ?t) (org-ref-reftex-get-bib-field "title" entry))
- ((= l ?T) (reftex-abbreviate-title
+ ((= l ?t) (replace-regexp-in-string
+ "\n\\|\t\\|\s+" " "
(org-ref-reftex-get-bib-field "title" entry)))
+ ((= l ?T) (reftex-abbreviate-title
+ ((replace-regexp-in-string
+ "\n\\|\t\\|\s+" " "
+ (org-ref-reftex-get-bib-field "title" entry)))))
((= l ?v) (org-ref-reftex-get-bib-field "volume" entry))
((= l ?y) (org-ref-reftex-get-bib-field "year" entry)))))
@@ -487,8 +516,6 @@ environment, only %l is available."
(setq format (replace-match "%" t t format)))
(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)
@@ -974,7 +1001,7 @@ ARG does nothing."
(org-ref-count-labels label))))
(lambda (keyword desc format)
(cond
- ((eq format 'html) (format "()" keyword))
+ ((eq format 'html) (format "
" keyword))
((eq format 'latex)
(format "\\label{%s}" keyword)))))
@@ -1521,12 +1548,37 @@ falling back to what the user has set in `org-ref-default-bibliography'"
;; *** key at point functions
+(defun org-ref-get-pdf-filename (key)
+ "Return the pdf filename associated with a bibtex KEY."
+ (format (concat org-ref-pdf-directory "%s.pdf") key))
+
+
+(defun org-ref-get-mendeley-filename (key)
+ "Return the pdf filename indicated by mendeley file field.
+Falls back to org-ref-get-pdf-filename if file filed does not exist.
+Contributed by https://github.com/autosquid."
+ (let* ((results (org-ref-get-bibtex-key-and-file key))
+ (bibfile (cdr results)))
+ (with-temp-buffer
+ (insert-file-contents bibfile)
+ (bibtex-set-dialect (parsebib-find-bibtex-dialect) t)
+ (bibtex-search-entry key nil 0)
+ (setq entry (bibtex-parse-entry))
+ (let ((e (org-ref-reftex-get-bib-field "file" entry)))
+ (if (> (length e) 4)
+ (remove-if
+ (lambda (ch)
+ (find ch "{}\\"))
+ (format "/%s" (subseq e 1 (- (length e) 4))))
+ (format (concat org-ref-pdf-directory "%s.pdf") key))))))
+
+
(defun org-ref-open-pdf-at-point ()
"Open the pdf for bibtex key under point if it exists."
(interactive)
(let* ((results (org-ref-get-bibtex-key-and-file))
(key (car results))
- (pdf-file (format (concat org-ref-pdf-directory "%s.pdf") key)))
+ (pdf-file (funcall org-ref-get-pdf-filename-function key)))
(if (file-exists-p pdf-file)
(org-open-file pdf-file)
(message "no pdf found for %s" key))))
@@ -1709,7 +1761,7 @@ get a lot of options. LINK-STRING is used by the link function."
(interactive)
(let* ((results (org-ref-get-bibtex-key-and-file))
(key (car results))
- (pdf-file (format (concat org-ref-pdf-directory "%s.pdf") key))
+ (pdf-file (funcall org-ref-get-pdf-filename-function key))
(bibfile (cdr results))
(url (save-excursion
(with-temp-buffer
@@ -2102,7 +2154,7 @@ 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)
@@ -2112,7 +2164,10 @@ This assumes you are in an article."
(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))
@@ -2180,16 +2235,7 @@ construct the heading by hand."
(bibtex-expand-strings t)
(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))
- (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))
- )
+ (key (reftex-get-bib-field "=key=" entry)))
;; save key to clipboard to make saving pdf later easier by pasting.
(with-temp-buffer
@@ -2206,38 +2252,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$"
- (cl-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 ()
@@ -3248,7 +3297,7 @@ With two prefix args, insert a label link."
Checks for pdf and doi, and add appropriate functions."
(let* ((results (org-ref-get-bibtex-key-and-file))
(key (car results))
- (pdf-file (format (concat org-ref-pdf-directory "%s.pdf") key))
+ (pdf-file (funcall org-ref-get-pdf-filename-function key))
(bibfile (cdr results))
(url (save-excursion
(with-temp-buffer