#+END_SRC
Let us make a helm function to insert a label link. This will help you enter unique labels.
-#+BEGIN_SRC emacs-lisp
+#+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."
(interactive)
Another alternative ref insertion is to use helm.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp :tangle org-ref.el
(defun org-ref-helm-insert-ref-link ()
"Helm menu to insert ref links to labels in the document.
-Use C-u to insert a different kind of ref link."
+Use C-u to insert a different kind of ref link.
+C-u C-u to replace the current ref with selection"
(interactive)
(let* ((labels (org-ref-get-labels))
(contexts (mapcar 'org-ref-get-label-context labels))
) "\n\n") label)))
(action . (lambda (label)
(switch-to-buffer ,cb)
- (insert
- (concat
- (if helm-current-prefix-arg
- (helm :sources '((name . "Ref link types")
- (candidates . ("ref" "eqref" "pageref" "nameref"))
- (action . (lambda (x) x))))
- "ref")
- ":" label)))))))))
+
+ (cond
+ ;; no prefix
+ ((equal helm-current-prefix-arg nil)
+ (insert
+ (concat
+ "ref:" label)))
+ ;; one prefix, alternate ref link
+ ((equal helm-current-prefix-arg '(4))
+ (insert
+ (concat
+ (helm :sources '((name . "Ref link types")
+ (candidates . ("ref" "eqref" "pageref" "nameref"))
+ (action . (lambda (x) x))))
+ ":" label)))
+ ;; two prefixes, replace current label
+ ((equal helm-current-prefix-arg '(16))
+ ;; get link
+ (let* ((object (org-element-context))
+ (last-char (save-excursion
+ (goto-char (org-element-property :end object))
+ (backward-char)
+ (if (looking-at " ")
+ " "
+ ""))))
+ (setf
+ (buffer-substring
+ (org-element-property :begin object)
+ (org-element-property :end object))
+ (concat
+ (replace-regexp-in-string
+ (org-element-property :path object)
+ label
+ (org-element-property :raw-link object))
+ last-char))))))))))))
+
+
+
#+END_SRC
#+RESULTS:
(insert (concat "," (mapconcat 'identity keys ","))))
;; double prefix, replace key at point
((equal helm-current-prefix-arg '(16))
- (message-box "Replacing %s with %s"
- (car (org-ref-get-bibtex-key-and-file))
- (mapconcat 'identity keys ","))
(setf (buffer-substring
(org-element-property :begin object)
(org-element-property :end object))
;; replace space at end to avoid collapsing into next word.
" ")))
(t
- (message-box "Not found"))))
+ (message "Not found"))))
;; We are next to a link, and we want to append
;; next to a link means one character back is on a link.
(-contains?
org-ref-cite-types
(org-element-property :type (org-element-context)))))
- ;;(message-box "at end of a link")
- ;; (goto-char (org-element-property :end object))
(while (looking-back " ") (backward-char))
(insert (concat "," (mapconcat 'identity keys ","))))