]> git.donarmstrong.com Git - org-ref.git/blobdiff - org-ref.org
fix bug in get labels.
[org-ref.git] / org-ref.org
index db0e205a640c15f9b5c004c4bcf59adf8a33d4fc..62361c04e8274928f92a05b8142345957e821b2a 100644 (file)
@@ -12,6 +12,19 @@ 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
 
+1. Get minibuffer messages for the cite/ref/label link under point
+
+With helm integration (default) you can:
+
+1. C-c ] to insert a citation link
+  in helm-bibtex
+   - Enter to insert or append citation(s)
+   - C-u Enter to insert an alternative cite link
+   - C-u C-u Enter to replace the citation at point
+2. C-u C-c ] to insert a ref link with helm completion
+3. C-u C-u C-c ] to insert a label with completion
+4. M-x org-ref to get a helm completion buffer with link checks, utilities and export options
+
 ** Header
 #+BEGIN_SRC emacs-lisp :tangle org-ref.el
 ;;; org-ref.el --- setup bibliography, cite, ref and label org-mode links.
@@ -917,17 +930,17 @@ The label link provides a way to create labels in org-mode. We make it clickable
 #+BEGIN_SRC emacs-lisp  :tangle org-ref.el
 (defun org-ref-count-labels (label)
   "Counts number of matches for label in the document"
-  (+ (count-matches (format "label:%s\\b[^-:]" label) (point-min) (point-max) t)
+  (+ (count-matches (format "label:%s\\b[^-:]" label) (point-min) (point-max))
      ;; 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) t)
-     (count-matches (format "\\label{%s}\\b" label) (point-min) (point-max) t)
+     (count-matches (format "^#\\+tblname:\\s-*%s\\b[^-:]" label) (point-min) (point-max))
+     (count-matches (format "\\label{%s}\\b" label) (point-min) (point-max))
      ;; this is the org-format #+label:
-     (count-matches (format "^#\\+label:\\s-*%s\\b[^-:]" label) (point-min) (point-max) t)
+     (count-matches (format "^#\\+label:\\s-*%s\\b[^-:]" label) (point-min) (point-max))
      (let ((custom-id-count 0))
        (org-map-entries
        (lambda ()
-         (when (string= label  (org-entry-get (point) "CUSTOM_ID"))
+         (when (string= label (org-entry-get (point) "CUSTOM_ID"))
            (setq custom-id-count (+ 1 custom-id-count)))))
        custom-id-count)))
 
@@ -935,7 +948,14 @@ The label link provides a way to create labels in org-mode. We make it clickable
  "label"
  (lambda (label)
    "on clicking count the number of label tags used in the buffer. A number greater than one means multiple labels!"
-   (message (format "%s occurences" (org-ref-count-labels label))))
+   (let ((count (org-ref-count-labels label)))
+   (message (format "%s occurence%s"
+                   count
+                   (if (or (= count 0)
+                             (> count 1))
+                       "s"
+                     ""))
+                   (org-ref-count-labels label))))
  (lambda (keyword desc format)
    (cond
     ((eq format 'html) (format "(<label>%s</label>)" path))
@@ -1094,9 +1114,14 @@ Now, we can put all the labels together which will give us a list of candidates.
       (widen)
       (goto-char (point-min))
       (let ((matches '()))
-       (while (re-search-forward "label:\\([a-zA-z0-9:-]*\\)" (point-max) t)
+        ;; these are the label:stuff  kinds
+       (while (re-search-forward "[^#+]label:\\([a-zA-z0-9:-]*\\)" (point-max) t)
          (add-to-list 'matches (match-string-no-properties 1) t))
-       (append matches (org-ref-get-org-labels) (org-ref-get-latex-labels) (org-ref-get-tblnames) (org-ref-get-custom-ids))))))
+       (append matches
+               (org-ref-get-org-labels)
+               (org-ref-get-latex-labels)
+               (org-ref-get-tblnames)
+               (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.
@@ -1200,10 +1225,14 @@ Another alternative ref insertion is to use helm.
   "Helm menu to insert ref links to labels in the document.
 If you are on link, replace with newly selected label.
 Use C-u to insert a different kind of ref link.
+Use C-u C-u to insert a [[#custom-id]] link
 "
   (interactive)
   (let* ((labels (org-ref-get-labels))
-        (contexts (mapcar 'org-ref-get-label-context labels))
+        (bs (buffer-string))
+        (contexts (with-temp-buffer
+                    (insert bs)
+                    (mapcar 'org-ref-get-label-context labels)))
         (cb (current-buffer)))
 
     (helm :input (thing-at-point 'word)
@@ -1261,6 +1290,10 @@ Use C-u to insert a different kind of ref link.
                                                       (candidates . ("ref" "eqref" "pageref" "nameref"))
                                                       (action . (lambda (x) x))))
                                      ":" label)))
+                                  ;; two prefixes, insert section custom-id link
+                                  ((equal helm-current-prefix-arg '(16))
+                                   (insert
+                                    (format "[[#%s]]" label)))
                                   ))))))))
 #+END_SRC
 
@@ -3069,7 +3102,6 @@ To get a lighter weight message about the label, ref and cite links, we define a
                        (progn
                          (forward-line 4)
                          (point)))))
-      (beep)
       (throw 'result "!!! NO CONTEXT FOUND !!!"))))
 
 
@@ -3099,7 +3131,6 @@ To get a lighter weight message about the label, ref and cite links, we define a
          (let ((count (org-ref-count-labels
                        (org-element-property :path object))))
            ;; get plurality on occurrence correct
-            (when (> count 1) (beep))
            (message (concat
                      (number-to-string count)
                      " occurence"
@@ -3107,6 +3138,12 @@ To get a lighter weight message about the label, ref and cite links, we define a
                                (> count 1))
                        "s")))))
 
+        ((string= type "custom-id")
+         (save-excursion
+           (org-open-link-from-string
+            (format "[[#%s]]" (org-element-property :path object)))
+           (message "%s" (org-get-heading))))
+
          ;; check if the bibliography files exist.
         ((string= type "bibliography")
          (let* ((bibfile)
@@ -3144,7 +3181,6 @@ To get a lighter weight message about the label, ref and cite links, we define a
                   (buffer-substring key-beginning key-end)))
            (if (file-exists-p bibfile)
                (message "%s exists." bibfile)
-              (beep)
              (message "!!! %s NOT FOUND !!!" bibfile))))
         )))))
 #+END_SRC
@@ -3309,7 +3345,6 @@ This code provides a helm interface to things you can do when you click on a cit
            (insert-file-contents bibfile)
            (bibtex-search-entry key)
            (org-ref-bib-citation)))
-      (beep)
       "!!! No entry found !!!" )))
 
 (defun org-ref-cite-candidates ()