]> git.donarmstrong.com Git - org-ref.git/blobdiff - org-ref.org
add license at top
[org-ref.git] / org-ref.org
index 100f8da9f18d575bb5f1e9f375a02dc2adc482db..b69062201b7c210fb8e0c00f7383c50b60e04089 100644 (file)
@@ -75,6 +75,7 @@ The only external require is reftex-cite
 (require 'helm)
 (require 'helm-config)
 (require 'helm-bibtex)
 (require 'helm)
 (require 'helm-config)
 (require 'helm-bibtex)
+(require 'org)
 #+END_SRC
 
 ** Custom variables
 #+END_SRC
 
 ** Custom variables
@@ -1630,7 +1631,6 @@ The first thing we need is to get the bibtex key we clicked on.
 point to get a comma, or the end of the link, and then backwards
 to get a comma, or the beginning of the link. that delimits the
 keyword we clicked on. We also strip the text properties."
 point to get a comma, or the end of the link, and then backwards
 to get a comma, or the beginning of the link. that delimits the
 keyword we clicked on. We also strip the text properties."
-  (interactive)
   (let* ((object (org-element-context))
         (link-string (org-element-property :path object)))
     ;; you may click on the part before the citations. here we make
   (let* ((object (org-element-context))
         (link-string (org-element-property :path object)))
     ;; you may click on the part before the citations. here we make
@@ -1684,7 +1684,6 @@ internal bibliographies
 
 falling back to what the user has set in org-ref-default-bibliography
 "
 
 falling back to what the user has set in org-ref-default-bibliography
 "
-  (interactive)
   (catch 'result
     (save-excursion
       (goto-char (point-min))
   (catch 'result
     (save-excursion
       (goto-char (point-min))
@@ -1744,7 +1743,6 @@ Finally, we want to know which file the key is in.
 #+BEGIN_SRC emacs-lisp :tangle org-ref.el
 (defun org-ref-get-bibtex-key-and-file (&optional key)
   "returns the bibtex key and file that it is in. If no key is provided, get one under point"
 #+BEGIN_SRC emacs-lisp :tangle org-ref.el
 (defun org-ref-get-bibtex-key-and-file (&optional key)
   "returns the bibtex key and file that it is in. If no key is provided, get one under point"
- (interactive)
  (let ((org-ref-bibliography-files (org-ref-find-bibliography))
        (file))
    (unless key
  (let ((org-ref-bibliography-files (org-ref-find-bibliography))
        (file))
    (unless key
@@ -1890,7 +1888,6 @@ Prompt for NEW-FILE includes bib files in org-ref-default-bibliography, and bib
 
 (defun org-ref-get-doi-at-point ()
   "Get doi for key at point."
 
 (defun org-ref-get-doi-at-point ()
   "Get doi for key at point."
-  (interactive)
   (let* ((results (org-ref-get-bibtex-key-and-file))
         (key (car results))
         (bibfile (cdr results))
   (let* ((results (org-ref-get-bibtex-key-and-file))
         (key (car results))
         (bibfile (cdr results))
@@ -2155,15 +2152,18 @@ We create the links by mapping the function onto the list of defined link types.
 
 #+BEGIN_SRC emacs-lisp :tangle org-ref.el
 (defun org-ref-format-citation-description (desc)
 
 #+BEGIN_SRC emacs-lisp :tangle org-ref.el
 (defun org-ref-format-citation-description (desc)
-  "return formatted citation description. if the cite link has a description, it is optional text for the citation command. You can specify pre and post text by separating these with ::."
-  (interactive)
+  "Return formatted citation description.  If the cite link has a
+description, it is optional text for the citation command. You
+can specify pre and post text by separating these with ::, for
+example [[cite:key][pre text::post text]]."
   (cond
    ((string-match "::" desc)
     (format "[%s][%s]" (car (setq results (split-string desc "::"))) (cadr results)))
    (t (format "[%s]" desc))))
 
 (defun org-ref-define-citation-link (type &optional key)
   (cond
    ((string-match "::" desc)
     (format "[%s][%s]" (car (setq results (split-string desc "::"))) (cadr results)))
    (t (format "[%s]" desc))))
 
 (defun org-ref-define-citation-link (type &optional key)
-  "add a citation link for org-ref. With optional key, set the reftex binding. For example:
+  "Add a citation link of TYPE for org-ref.
+With optional KEY, set the reftex binding. For example:
 (org-ref-define-citation-link \"citez\" ?z) will create a new citez link, with reftex key of z,
 and the completion function."
   (interactive "sCitation Type: \ncKey: ")
 (org-ref-define-citation-link \"citez\" ?z) will create a new citez link, with reftex key of z,
 and the completion function."
   (interactive "sCitation Type: \ncKey: ")
@@ -2194,6 +2194,8 @@ and the completion function."
 (mapcar 'org-ref-define-citation-link org-ref-cite-types)
 #+END_SRC
 
 (mapcar 'org-ref-define-citation-link org-ref-cite-types)
 #+END_SRC
 
+#+RESULTS:
+
 *** org-ref-insert-cite-link
 We need a convenient method to insert links. In reftex you use the keystroke C-c ], which gives you a minibuffer to search the bibtex files from. This function is bound to that same keystroke here [[*org-mode%20/%20reftex%20setup][org-mode / reftex setup]]. This function will append to a cite link if you call it while on a link.
 
 *** org-ref-insert-cite-link
 We need a convenient method to insert links. In reftex you use the keystroke C-c ], which gives you a minibuffer to search the bibtex files from. This function is bound to that same keystroke here [[*org-mode%20/%20reftex%20setup][org-mode / reftex setup]]. This function will append to a cite link if you call it while on a link.
 
@@ -2237,8 +2239,7 @@ inserted. Use a prefix arg to get a menu of citation types."
                   (mapconcat 'identity (reftex-citation t) ",")))))
 
       ;; you pressed a C-u so we run this code
                   (mapconcat 'identity (reftex-citation t) ",")))))
 
       ;; you pressed a C-u so we run this code
-      (reftex-citation)))
-  )
+      (reftex-citation))))
 #+END_SRC
 cite:zhou-2004-first-lda-u,paier-2006-errat,boes-2015-estim-bulk
 
 #+END_SRC
 cite:zhou-2004-first-lda-u,paier-2006-errat,boes-2015-estim-bulk
 
@@ -2819,7 +2820,6 @@ Makes a new buffer with clickable links."
          (when (-contains? org-ref-cite-types (plist-get plist :type))
            (dolist (key (org-ref-split-and-strip-string (plist-get plist :path)))
              (when (not (index key bibtex-keys))
          (when (-contains? org-ref-cite-types (plist-get plist :type))
            (dolist (key (org-ref-split-and-strip-string (plist-get plist :path)))
              (when (not (index key bibtex-keys))
-               (message-box "%s" link)
                (setq
                 bad-citations
                 (append
                (setq
                 bad-citations
                 (append
@@ -2948,6 +2948,7 @@ Here we develop a similar idea, but instead of an org-buffer with links, we crea
 Now, we have a functions for candidates, we can make helm sources for each one, and then run a helm command to view them.
 
 #+BEGIN_SRC emacs-lisp :tangle org-ref.el
 Now, we have a functions for candidates, we can make helm sources for each one, and then run a helm command to view them.
 
 #+BEGIN_SRC emacs-lisp :tangle org-ref.el
+;;;###autoload
 (defun org-ref ()
   "Opens a helm interface to actions for org-ref.
 Shows bad citations, ref links and labels"
 (defun org-ref ()
   "Opens a helm interface to actions for org-ref.
 Shows bad citations, ref links and labels"
@@ -3168,7 +3169,6 @@ I prefer citations in chronological order within a grouping. These functions sor
 #+BEGIN_SRC emacs-lisp :tangle org-ref.el
 (defun org-ref-get-citation-year (key)
   "get the year of an entry with key. Returns year as a string."
 #+BEGIN_SRC emacs-lisp :tangle org-ref.el
 (defun org-ref-get-citation-year (key)
   "get the year of an entry with key. Returns year as a string."
-  (interactive)
   (let* ((results (org-ref-get-bibtex-key-and-file key))
         (bibfile (cdr results)))
     (with-temp-buffer
   (let* ((results (org-ref-get-bibtex-key-and-file key))
         (bibfile (cdr results)))
     (with-temp-buffer
@@ -3178,7 +3178,7 @@ I prefer citations in chronological order within a grouping. These functions sor
         ))))
 
 (defun org-ref-sort-citation-link ()
         ))))
 
 (defun org-ref-sort-citation-link ()
- "replace link at point with sorted link by year"
+ "Replace link at point with sorted link by year."
  (interactive)
  (let* ((object (org-element-context))
         (type (org-element-property :type object))
  (interactive)
  (let* ((object (org-element-context))
         (type (org-element-property :type object))
@@ -3200,12 +3200,13 @@ I prefer citations in chronological order within a grouping. These functions sor
 Sometimes it may be helpful to manually change the order of citations. These functions define shift-arrow functions.
 #+BEGIN_SRC emacs-lisp :tangle org-ref.el
 (defun org-ref-swap-keys (i j keys)
 Sometimes it may be helpful to manually change the order of citations. These functions define shift-arrow functions.
 #+BEGIN_SRC emacs-lisp :tangle org-ref.el
 (defun org-ref-swap-keys (i j keys)
- "swap the keys in a list with index i and j"
+ "Swap the KEYS in a list with index I and J."
  (let ((tempi (nth i keys)))
    (setf (nth i keys) (nth j keys))
    (setf (nth j keys) tempi))
   keys)
 
  (let ((tempi (nth i keys)))
    (setf (nth i keys) (nth j keys))
    (setf (nth j keys) tempi))
   keys)
 
+
 (defun org-ref-swap-citation-link (direction)
  "move citation at point in direction +1 is to the right, -1 to the left"
  (interactive)
 (defun org-ref-swap-citation-link (direction)
  "move citation at point in direction +1 is to the right, -1 to the left"
  (interactive)
@@ -3401,12 +3402,12 @@ I like convenience. Here are some aliases for faster typing.
 [[https://github.com/tmalsburg/helm-bibtex][helm-bibtex]] is a very cool interface to bibtex files. Out of the box though, it is not super convenient for org-ref. Here, we modify it to make it fit our workflow and extend it where needed.
 
 Let us add keywords as a searchable field.
 [[https://github.com/tmalsburg/helm-bibtex][helm-bibtex]] is a very cool interface to bibtex files. Out of the box though, it is not super convenient for org-ref. Here, we modify it to make it fit our workflow and extend it where needed.
 
 Let us add keywords as a searchable field.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp  :tangle org-ref.el
 (setq helm-bibtex-additional-search-fields '(keywords))
 #+END_SRC
 
 Next, we are going to add keywords to the helm interface. This modifies the helm-bibtex function to add our keywords.
 (setq helm-bibtex-additional-search-fields '(keywords))
 #+END_SRC
 
 Next, we are going to add keywords to the helm interface. This modifies the helm-bibtex function to add our keywords.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp :tangle org-ref.el
 (defun helm-bibtex-candidates-formatter (candidates source)
   "Formats BibTeX entries for display in results list."
   (cl-loop
 (defun helm-bibtex-candidates-formatter (candidates source)
   "Formats BibTeX entries for display in results list."
   (cl-loop
@@ -3426,11 +3427,10 @@ Next, we are going to add keywords to the helm interface. This modifies the helm
             (-zip-with (lambda (f w) (truncate-string-to-width f w 0 ?\s))
                        fields (list 36 (- width 85) 4 1 1 7 7)))
           entry-key)))
             (-zip-with (lambda (f w) (truncate-string-to-width f w 0 ?\s))
                        fields (list 36 (- width 85) 4 1 1 7 7)))
           entry-key)))
-
 #+END_SRC
 
 Next, we add some functions to add keywords to a bibtex entry using a helm interface, and a new action to add keywords to entries from helm-bibtex.
 #+END_SRC
 
 Next, we add some functions to add keywords to a bibtex entry using a helm interface, and a new action to add keywords to entries from helm-bibtex.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp  :tangle org-ref.el
 ;; adapted from bibtex-utils.el
 ;; these are candidates for selecting keywords/tags
 (defun org-ref-bibtex-keywords ()
 ;; adapted from bibtex-utils.el
 ;; these are candidates for selecting keywords/tags
 (defun org-ref-bibtex-keywords ()
@@ -3489,10 +3489,31 @@ Run this with the point in a bibtex entry."
                                       )))))
     (helm :sources '(keyword-source fallback-source))))
 
                                       )))))
     (helm :sources '(keyword-source fallback-source))))
 
+(defun helm-bibtex-show-entry (key)
+  "Show the entry in the BibTeX file.
+The original function in helm-bibtex has a bug where it finds the
+first key that partially matches. This version avoids that."
+  (catch 'break
+    (dolist (bibtex-file (if (listp helm-bibtex-bibliography)
+                             helm-bibtex-bibliography
+                           (list helm-bibtex-bibliography)))
+      (let ((buf (helm-bibtex-buffer-visiting bibtex-file))
+            (entries '()))
+        (find-file bibtex-file)
+        (bibtex-map-entries
+        (lambda (key start end)
+          (add-to-list 'entries (cons key start))))
+        (if (assoc key entries)
+           (progn
+             (goto-char (cdr (assoc key entries)))
+             (throw 'break t))
+          (unless buf
+            (kill-buffer)))))))
 
 (defun org-ref-helm-tag-entries (candidates)
   "Set tags on selected bibtex entries from helm-bibtex.
 User is prompted for tags. This function is called from `helm-bibtex'."
 
 (defun org-ref-helm-tag-entries (candidates)
   "Set tags on selected bibtex entries from helm-bibtex.
 User is prompted for tags. This function is called from `helm-bibtex'."
+  (message "")
   (let ((keywords (read-input "Keywords (comma separated): ")))
     (loop for key in (helm-marked-candidates)
          do
   (let ((keywords (read-input "Keywords (comma separated): ")))
     (loop for key in (helm-marked-candidates)
          do
@@ -3606,6 +3627,7 @@ C-u C-u will change the key at point to the selected keys.
 (setq helm-bibtex-format-citation-functions
       '((org-mode . helm-bibtex-format-org-ref)))
 
 (setq helm-bibtex-format-citation-functions
       '((org-mode . helm-bibtex-format-org-ref)))
 
+;;;###autoload
 (defun org-ref-helm-insert-cite-link (arg)
   "org-ref function to use helm-bibtex to insert a citation link.
 With one prefix arg, insert a ref link.
 (defun org-ref-helm-insert-cite-link (arg)
   "org-ref function to use helm-bibtex to insert a citation link.
 With one prefix arg, insert a ref link.
@@ -3620,7 +3642,6 @@ With two prefix args, insert a label link."
    ((equal arg '(16))
     (org-ref-helm-insert-label-link))))
 
    ((equal arg '(16))
     (org-ref-helm-insert-label-link))))
 
-(require 'helm-bibtex)
 
 ;; add our own fallback entries where we want them. These appear in reverse order of adding in the menu
 (setq helm-bibtex-fallback-options
 
 ;; add our own fallback entries where we want them. These appear in reverse order of adding in the menu
 (setq helm-bibtex-fallback-options
@@ -3641,7 +3662,6 @@ This code provides a helm interface to things you can do when you click on a cit
 #+BEGIN_SRC emacs-lisp :tangle org-ref.el
 (defun org-ref-get-citation-string-at-point ()
   "Get a string of a formatted citation"
 #+BEGIN_SRC emacs-lisp :tangle org-ref.el
 (defun org-ref-get-citation-string-at-point ()
   "Get a string of a formatted citation"
-  (interactive)
   (let* ((results (org-ref-get-bibtex-key-and-file))
         (key (car results))
         (bibfile (cdr results)))
   (let* ((results (org-ref-get-bibtex-key-and-file))
         (key (car results))
         (bibfile (cdr results)))
@@ -3657,7 +3677,6 @@ This code provides a helm interface to things you can do when you click on a cit
 (defun org-ref-cite-candidates ()
   "Generate the list of possible candidates for click actions on a cite link.
 Checks for pdf and doi, and add appropriate functions."
 (defun org-ref-cite-candidates ()
   "Generate the list of possible candidates for click actions on a cite link.
 Checks for pdf and doi, and add appropriate functions."
-  (interactive)
   (let* ((results (org-ref-get-bibtex-key-and-file))
         (key (car results))
          (pdf-file (format (concat org-ref-pdf-directory "%s.pdf") key))
   (let* ((results (org-ref-get-bibtex-key-and-file))
         (key (car results))
          (pdf-file (format (concat org-ref-pdf-directory "%s.pdf") key))
@@ -3762,8 +3781,10 @@ This is a list of cons cells '((\"description\" . action)). The action function
  '("Example" . (lambda () (message-box "You did it!")))
  t)
 
  '("Example" . (lambda () (message-box "You did it!")))
  t)
 
+;;;###autoload
 (defun org-ref-cite-click-helm (key)
 (defun org-ref-cite-click-helm (key)
-  "subtle points.
+  "Open helm for actions on a cite link.
+subtle points.
 1. get name and candidates before entering helm because we need the org-buffer.
 2. switch back to the org buffer before evaluating the action. most of them need the point and buffer."
   (interactive)
 1. get name and candidates before entering helm because we need the org-buffer.
 2. switch back to the org buffer before evaluating the action. most of them need the point and buffer."
   (interactive)