X-Git-Url: https://git.donarmstrong.com/?p=org-ref.git;a=blobdiff_plain;f=jmax-bibtex.el;h=9927fefe8e187676583ecc8c10469fd5b589510e;hp=e2176029d43674ddc433ad24a3bde0ed00f8252c;hb=a646c41c18b7dd968d596dc64df3a0cb8ab98225;hpb=1d4d42172cf8714fc9ee54174fa568a2ef9ceedd diff --git a/jmax-bibtex.el b/jmax-bibtex.el index e217602..9927fef 100644 --- a/jmax-bibtex.el +++ b/jmax-bibtex.el @@ -2,8 +2,47 @@ ;;; Commentary: ;; Requires: s.el, dash.el, org-ref.el, doi-utils.el, key-chord.el +;; +;; jmax-bibtex-generate-longtitles +;; jmax-bibtex-generate-shorttitles +;; jmax-stringify-journal-name :: replace a journal name with a string in `jmax-bibtex-journal-abbreviations' +;; jmax-set-journal-string :: in a bibtex entry run this to replace the journal with a string +;; +;; jmax-replace-nonascii :: replace nonascii characters in a bibtex entry +;; +;; jmax-title-case-article +;; jmax-sentence-case-article +;; +;; jmax-bibtex-next-entry :: bound to M-n +;; jmax-bibtex-previous-entry :: bound to M-p +;; +;; Functions to act on an entry +;; jmax-bibtex-hydra/body gives a hydra menu to a lot of useful functions. +;; jmax-bibtex-new-entry/body gives a hydra menu to add new bibtex entries. + +(require 'hydra) +(require 'key-chord) ;;; Code: +(defgroup jmax-bibtex nil + "Customization group for jmax-bibtex.") + + +(defcustom jmax-bibtex-hydra-key-chord + nil + "key-chord to run `jmax-bibtex-hydra'. +I like \"jj\"" + :type 'string + :group 'jmax-bibtex) + + +(defcustom jmax-bibtex-hydra-key-binding + nil + "key-binding to run `jmax-bibtex-hydra'. +I like \C-cj." + :type 'string + :group 'jmax-bibtex) + (defvar jmax-bibtex-journal-abbreviations '(("ACAT" "ACS Catalysis" "ACS Catal.") @@ -199,6 +238,8 @@ This is defined in `jmax-bibtex-journal-abbreviations'." ("⇌" . "$\\\\leftrightharpoons$") ("×" . "$\\\\times$") ("°" . "$\\\\deg$") + ("ş" . "{\\\\c{s}}") + ("ı" . "i") ; I think this is a turkish i ;; I think these are non-ascii spaces. there seems to be more than one. (" " . " ") (" " . " ") @@ -222,7 +263,8 @@ This is defined in `jmax-bibtex-journal-abbreviations'." (dolist (char (mapcar (lambda (x) (car x)) jmax-nonascii-latex-replacements)) (while (re-search-forward char nil t) (replace-match (cdr (assoc char jmax-nonascii-latex-replacements)))) - (goto-char (point-min))))) + (goto-char (point-min)))) + (save-buffer)) (add-hook 'org-ref-clean-bibtex-entry-hook 'jmax-replace-nonascii) @@ -428,17 +470,14 @@ functions with a DOI argument." ;; hydra menu for actions on bibtex entries -(require 'hydra) -(require 'key-chord) -(key-chord-define-global - "jj" - (defhydra jmax-bibtex-hydra (:color blue) +(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 +_q_: quit " ("p" org-ref-open-bibtex-pdf) ("P" jmax-bibtex-pubmed) @@ -473,7 +512,20 @@ _U_: Update entry _N_: Open notes _R_: Crossref _g_: Google Sch (save-buffer) (kill-buffer))) ("e" email-bibtex-entry) - ("U" (doi-utils-update-bibtex-entry-from-doi (jmax-bibtex-entry-doi))))) + ("U" (doi-utils-update-bibtex-entry-from-doi (jmax-bibtex-entry-doi))) + ("q" nil "quit") + ("f" jmax-bibtex-file/body "File functions") + ("a" jmax-replace-nonascii "Replace non-ascii")) + +;; create key-chord and key binding for hydra +(when jmax-bibtex-hydra-key-chord + (key-chord-define-global + jmax-bibtex-hydra-key-chord + 'jmax-bibtex-hydra/body)) + + +(when jmax-bibtex-hydra-key-binding + (global-set-key jmax-bibtex-hydra-key-binding 'jmax-bibtex-hydra/body)) ;; A hydra for adding new bibtex entries. @@ -491,13 +543,24 @@ _U_: Update entry _N_: Open notes _R_: Crossref _g_: Google Sch ("t" bibtex-MastersThesis "MS Thesis") ("R" bibtex-TechReport "Report") ("u" bibtex-Unpublished "unpublished") - ("c" bibtex-InCollection "Article in collection")) + ("c" bibtex-InCollection "Article in collection") + ("q" nil "quit")) + +;; a hydra menu of functions to act on a bibtex file. +(defhydra jmax-bibtex-file (:color blue) + "Bibtex file functions: " + ("v" bibtex-validate "Validate entries") + ("s" bibtex-sort-buffer "Sort entries") + ("r" bibtex-reformat "Reformat entries") + ("c" bibtex-count-entries "Count entries") + ("p" org-ref-build-full-bibliography "PDF bibliography")) (defvar jmax-bibtex-menu-funcs '() "Functions to run in doi menu. Each entry is a list of (key menu-name function). The function -must take one argument, the doi.") +must take one argument, the doi. This is somewhat deprecated, as +I prefer the hydra interfaces above.") (setq jmax-bibtex-menu-funcs '(("p" "df" jmax-bibtex-pdf)