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:
;; 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))
#+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 '()))
#+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 ()
#+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))))
#+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)
(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.
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)
((equal helm-current-prefix-arg '(16))
(insert
(format "[[#%s]]" label)))
- ))))))))
+ ))
+ ))))))
#+END_SRC
#+RESULTS:
;; 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")
(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"))))