;;; jmax-bibtex.el --- jmax-bibtex utilities
;;; Commentary:
-;; Requires: s.el, dash.el, org-ref.el, doi-utils.el
+;; Requires: s.el, dash.el, org-ref.el, doi-utils.el, key-chord.el
;;; Code:
("JPCC" "The Journal of Physical Chemistry C" "J. Phys. Chem. C")
("JPCL" "The Journal of Physical Chemistry Letters" "J. Phys. Chem. Lett.")
("JCP" "The Journal of Chemical Physics" "J. Chem. Phys.")
+ ("MSMSE" "Modelling and Simulation in Materials Science and Engineering" "Modell. Simul. Mater. Sci. Eng.")
("TSF" "Thin Solid Films" "Thin Solid Films")
("TC" "Topics in Catalysis" "Top. Catal.")
("WR" "Water Research" "Water Res."))
("ë" . "{\\\\\"e}")
("ü" . "{\\\\\"u}")
("ñ" . "{\\\\~n}")
+ ("ņ" . "{\\\\c{n}}")
("å" . "{\\\\aa}")
("ö" . "{\\\\\"o}")
+ ("Á" . "{\\\\'A}")
+ ("á" . "{\\\\'a}")
("í" . "{\\\\'i}")
("ó" . "{\\\\'o}")
("ó" . "{\\\\'o}")
("ú" . "{\\\\'u}")
("ú" . "{\\\\'u}")
("š" . "{\\\\v{s}}")
+ ("ř" . "{\\\\v{r}}")
("İ" . "{\\\\.I}")
("ğ" . "{\\\\u{g}}")
("δ" . "$\\\\delta$")
("–" . "-")
("−" . "-")
("–" . "-")
+ ("—" . "-")
("‘" . "'")
("’" . "'")
("“" . "\"")
+ ("’" . "'")
("”" . "\"")))
(defun jmax-replace-nonascii ()
(setf (car words) (s-capitalize (car words))))
(setq title (mapconcat 'identity words " "))
-
+
;; Capitalize letters after a dash
(while
(string-match "[a-zA-Z]-\\([a-z]\\)" title start)
(setf (substring title (match-beginning 1) (match-end 1))
(format "%s" (upcase char)))
(setq start (match-end 1))))
-
+
;; this is defined in doi-utils
(bibtex-set-field
"title"
word
(s-downcase word)))
words))
-
+
;; capitalize first word
(setf (car words) (s-capitalize (car words)))
;; (format "{%s}" (upcase char)))
(format "%s" (upcase char)))
(setq start (match-end 1))))
-
+
;; this is defined in doi-utils
(bibtex-set-field
"title" title)
"thin wrapper to get `jmax-bibtex' to open pdf"
(interactive)
(org-ref-open-bibtex-pdf))
-
+
+
+;; hydra menu for actions on bibtex entries
+(require 'hydra)
+(require 'key-chord)
+(key-chord-define-global
+ "jj"
+ (defhydra jmax-bibtex-hydra (:color blue)
+ "
+_p_: Open pdf _y_: Copy key _n_: New entry _w_: WOS
+_u_: Open url _f_: Copy formatted entry _o_: Copy entry _c_: WOS citing
+_r_: Refile entry _k_: Add keywords _d_: delete entry _r_: WOS related
+_e_: Email entry _K_: Edit keywords _L_: clean entry _P_: Pubmed
+_U_: Update entry _N_: Open notes _R_: Crossref _g_: Google Scholar
+"
+ ("p" org-ref-open-bibtex-pdf)
+ ("P" jmax-bibtex-pubmed)
+ ("w" jmax-bibtex-wos)
+ ("c" jmax-bibtex-wos-citing)
+ ("r" jmax-bibtex-wos-related)
+ ("R" jmax-bibtex-crossref)
+ ("g" jmax-bibtex-google-scholar)
+ ("n" jmax-bibtex-new-entry/body)
+ ("N" org-ref-open-bibtex-notes)
+ ("o" bibtex-copy-entry-as-kill)
+ ("d" bibtex-kill-entry)
+ ("L" org-ref-clean-bibtex-entry)
+ ("y" (kill-new (bibtex-autokey-get-field "=key=")))
+ ("f" bibtex-copy-summary-as-kill)
+ ("k" helm-tag-bibtex-entry)
+ ("K" (lambda ()
+ (interactive)
+ (org-ref-set-bibtex-keywords
+ (read-input "Keywords: "
+ (bibtex-autokey-get-field "keywords"))
+ t)))
+ ("u" org-ref-open-in-browser)
+ ("r" (lambda () (interactive)
+ (bibtex-beginning-of-entry)
+ (bibtex-kill-entry)
+ (find-file (ido-completing-read
+ "Bibtex file: "
+ (f-entries "." (lambda (f) (f-ext? f "bib")))))
+ (goto-char (point-max))
+ (bibtex-yank)
+ (save-buffer)
+ (kill-buffer)))
+ ("e" email-bibtex-entry)
+ ("U" (doi-utils-update-bibtex-entry-from-doi (jmax-bibtex-entry-doi)))))
+
+
+;; A hydra for adding new bibtex entries.
+(defhydra jmax-bibtex-new-entry (:color blue)
+ "New Bibtex entry:"
+ ("a" bibtex-Article "Article")
+ ("b" bibtex-Book "Book")
+ ("i" bibtex-InBook "In book")
+ ("l" bibtex-Booklet "Booklet")
+ ("P" bibtex-Proceedings "Proceedings")
+ ("p" bibtex-InProceedings "In proceedings")
+ ("m" bibtex-Misc "Misc.")
+ ("M" bibtex-Manual "Manual")
+ ("T" bibtex-PhdThesis "PhD Thesis")
+ ("t" bibtex-MastersThesis "MS Thesis")
+ ("R" bibtex-TechReport "Report")
+ ("u" bibtex-Unpublished "unpublished")
+ ("c" bibtex-InCollection "Article in collection"))
(defvar jmax-bibtex-menu-funcs '()
- "Functions to run in doi menu. Each entry is a list of (key menu-name function).
+ "Functions to run in doi menu. Each entry is a list of (key menu-name function).
The function must take one argument, the doi.")
(setq jmax-bibtex-menu-funcs
'(("p" "df" jmax-bibtex-pdf)
+ ("C" "opy" (lambda (doi)
+ (kill-new (org-ref-bib-citation))
+ (bury-buffer)))
("w" "os" doi-utils-wos)
("c" "iting articles" doi-utils-wos-citing)
("r" "elated articles" doi-utils-wos-related)
"Menu command to run in a bibtex entry.
Functions from `jmax-bibtex-menu-funcs'. They all rely on the
entry having a doi."
-
+
(interactive)
;; construct menu string as a message
(message
(char-to-string input) jmax-bibtex-menu-funcs)))
(when choice
(funcall
- (elt
+ (elt
choice
2)
(jmax-bibtex-entry-doi)