#+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)
(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.
+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)
"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)
(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
(progn
(forward-line 4)
(point)))))
- (beep)
(throw 'result "!!! NO CONTEXT FOUND !!!"))))
(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"
(buffer-substring key-beginning key-end)))
(if (file-exists-p bibfile)
(message "%s exists." bibfile)
- (beep)
(message "!!! %s NOT FOUND !!!" bibfile))))
)))))
#+END_SRC
(insert-file-contents bibfile)
(bibtex-search-entry key)
(org-ref-bib-citation)))
- (beep)
"!!! No entry found !!!" )))
(defun org-ref-cite-candidates ()