]> git.donarmstrong.com Git - org-ref.git/blobdiff - org-ref.org
add with-affiliates and catch all cite types
[org-ref.git] / org-ref.org
index 62361c04e8274928f92a05b8142345957e821b2a..c9518c8865c0a02181fc9e67e9896a94826880c9 100644 (file)
@@ -12,6 +12,7 @@ This document is an experiment at creating a literate program to provide similar
 4. Exportable links to LaTeX
 5. Utility functions for dealing with bibtex files and org-files
 
+Some additional features include
 1. Get minibuffer messages for the cite/ref/label link under point
 
 With helm integration (default) you can:
@@ -484,7 +485,7 @@ This code provides some functions to generate a simple sorted bibliography in ht
 
 #+BEGIN_SRC emacs-lisp :tangle org-ref.el
 (defun org-ref-get-bibtex-keys ()
-  "return a list of unique keys in the buffer."
+  "Return a list of unique keys in the buffer."
   (let ((keys '()))
     (org-element-map (org-element-parse-buffer) 'link
       (lambda (link)
@@ -494,7 +495,9 @@ This code provides some functions to generate a simple sorted bibliography in ht
                (key
                 (org-ref-split-and-strip-string (plist-get plist ':path)))
              (when (not (-contains? keys key))
-               (setq keys (append keys (list key)))))))))
+               (setq keys (append keys (list key))))))))
+      ;; set with-affiliated to get keys in captions
+      nil nil nil t)
     ;; Sort keys alphabetically
     (setq keys (cl-sort keys 'string-lessp :key 'downcase))
     keys))
@@ -934,7 +937,7 @@ The label link provides a way to create labels in org-mode. We make it clickable
      ;; for tblname, it is not enough to get word boundary
      ;; tab-little and tab-little-2 match then.
      (count-matches (format "^#\\+tblname:\\s-*%s\\b[^-:]" label) (point-min) (point-max))
-     (count-matches (format "\\label{%s}\\b" label) (point-min) (point-max))
+     (count-matches (format "\\label{%s}" label) (point-min) (point-max))
      ;; this is the org-format #+label:
      (count-matches (format "^#\\+label:\\s-*%s\\b[^-:]" label) (point-min) (point-max))
      (let ((custom-id-count 0))
@@ -1063,7 +1066,7 @@ It would be nice to use completion to enter a ref link, where a list of labels i
 
 #+BEGIN_SRC emacs-lisp :tangle org-ref.el
 (defun org-ref-get-org-labels ()
- "find #+LABEL: labels"
+ "Return a list of #+LABEL: labels."
   (save-excursion
     (goto-char (point-min))
     (let ((matches '()))
@@ -1074,7 +1077,7 @@ matches)))
 
 #+BEGIN_SRC emacs-lisp :tangle org-ref.el
 (defun org-ref-get-custom-ids ()
- "return a list of custom_id properties in the buffer"
+ "Return a list of custom_id properties in the buffer."
  (let ((results '()) custom_id)
    (org-map-entries
     (lambda ()
@@ -1099,6 +1102,7 @@ Finally, we get the table names.
 
 #+BEGIN_SRC emacs-lisp :tangle org-ref.el
 (defun org-ref-get-tblnames ()
+  "Return list of table names in the buffer."
   (org-element-map (org-element-parse-buffer 'element) 'table
     (lambda (table)
       (org-element-property :name table))))
@@ -1108,7 +1112,8 @@ Now, we can put all the labels together which will give us a list of candidates.
 
 #+BEGIN_SRC emacs-lisp  :tangle org-ref.el
 (defun org-ref-get-labels ()
-  "returns a list of labels in the buffer that you can make a ref link to. this is used to auto-complete ref links."
+  "Returns a list of labels in the buffer that you can make a ref link to.
+This is used to auto-complete ref links and in helm menus."
   (save-excursion
     (save-restriction
       (widen)
@@ -1124,7 +1129,7 @@ Now, we can put all the labels together which will give us a list of candidates.
                (org-ref-get-custom-ids))))))
 #+END_SRC
 
-Let us make a helm function to insert a label link. This will help you enter unique labels.
+Let us make a helm function to insert a label link. This will help you enter unique labels by showing matching labels until they are all gone and you are left with a unique one. If you are on a link, it means you want to replace it.
 #+BEGIN_SRC emacs-lisp :tangle org-ref.el
 (defun org-ref-helm-insert-label-link ()
   "Insert a label link. helm just shows you what labels already exist.
@@ -1200,7 +1205,7 @@ If you are on a label link, replace it."
                                             helm-pattern))))))))))))
 #+END_SRC
 
-Now we create the completion function. This works from the org-machinery, e.g. if you type C-c C-l to insert a link, and use completion by pressing tab.
+Now we create a completion function. This works from the org-machinery, e.g. if you type C-c C-l to insert a link, and use completion by pressing tab.
 
 #+BEGIN_SRC emacs-lisp  :tangle org-ref.el
 (defun org-ref-complete-link (&optional arg)
@@ -1294,7 +1299,8 @@ Use C-u C-u to insert a [[#custom-id]] link
                                   ((equal helm-current-prefix-arg '(16))
                                    (insert
                                     (format "[[#%s]]" label)))
-                                  ))))))))
+                                  ))
+                             ))))))
 #+END_SRC
 
 #+RESULTS:
@@ -2608,13 +2614,21 @@ Makes a new buffer with clickable links."
     (org-element-map (org-element-parse-buffer) 'link
       (lambda (link)
        (let ((plist (nth 1 link)))
-         (when (equal (plist-get plist ':type) "cite")
-           (dolist (key (org-ref-split-and-strip-string (plist-get plist ':path)) )
+         (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))
-               (setq bad-citations (append bad-citations
-                                           `(,(format "%s [[elisp:(progn (switch-to-buffer-other-frame \"%s\")(goto-char %s))][not found here]]\n"
-                                                      key (buffer-name)(plist-get plist ':begin)))))
-               ))))))
+               (message-box "%s" link)
+               (setq
+                bad-citations
+                (append
+                 bad-citations
+                 `(,(format "%s [[elisp:(progn (switch-to-buffer-other-frame \"%s\")(goto-char %s))][not found here]]\n"
+                            key
+                            (buffer-name)
+                            (plist-get plist :begin)))))
+               )))))
+      ;; set with-affilates to t to get citations in a caption
+      nil nil nil t)
 
     (if bad-citations
       (progn
@@ -3119,12 +3133,18 @@ To get a lighter weight message about the label, ref and cite links, we define a
 
         ;; message some context about the label we are referring to
         ((string= type "ref")
-         (message (org-ref-get-label-context
-                   (org-element-property :path object))))
+         (message "%scount: %s"
+                  (org-ref-get-label-context
+                   (org-element-property :path object))
+                  (org-ref-count-labels
+                       (org-element-property :path object))))
 
         ((string= type "eqref")
-         (message (org-ref-get-label-context
-                   (org-element-property :path object))))
+         (message "%scount: %s"
+                  (org-ref-get-label-context
+                   (org-element-property :path object))
+                  (org-ref-count-labels
+                       (org-element-property :path object))))
 
         ;; message the count
         ((string= type "label")
@@ -3264,10 +3284,12 @@ C-u C-u will change the key at point to the selected keys.
               (replace-regexp-in-string
                (car (org-ref-get-bibtex-key-and-file)) ; key
                (mapconcat 'identity keys ",")          ; new keys
-               (org-element-property :raw-link object)
-               )
+               (org-element-property :raw-link object))
               ;; replace space at end to avoid collapsing into next word.
-              last-char)))
+              last-char))
+       ;; and we want to go to the end of the new link
+       (goto-char
+        (org-element-property :end (org-element-context))))
        (t
        (message "Not found"))))