;;; 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:
("ņ" . "{\\\\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)