X-Git-Url: https://git.donarmstrong.com/?p=org-ref.git;a=blobdiff_plain;f=org-ref.org;h=b04c1a13be61997ae722b404ad6ad1c950d9b1d4;hp=7d66a799189df41c15debbeae0fb6c2a5c2926fb;hb=2d2531c06b7ea5ae425b159c2c0b2f73b4a2f71b;hpb=46a88d1f19dd80cb33673bbd61a2eef3b099dc91 diff --git a/org-ref.org b/org-ref.org index 7d66a79..b04c1a1 100644 --- a/org-ref.org +++ b/org-ref.org @@ -1145,16 +1145,21 @@ Another alternative ref insertion is to use helm. #+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." +If you are on link, replace with newly selected label. +Use C-u to insert a different kind of ref link. +" (interactive) (let* ((labels (org-ref-get-labels)) (contexts (mapcar 'org-ref-get-label-context labels)) (cb (current-buffer))) - (helm :sources `(((name . "Available labels to ref") + (helm :input (thing-at-point 'word) + :sources `(((name . "Available labels to ref") (candidates . ,(loop for label in labels for context in contexts -;; we do some kludgy adding spaces and bars to make it "easier" to see in helm. + ;; we do some kludgy adding spaces + ;; and bars to make it "easier" to + ;; see in helm. collect (cons (concat label "\n" (mapconcat @@ -1165,14 +1170,47 @@ Use C-u to insert a different kind of ref link." ) "\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 or on a link + ((equal helm-current-prefix-arg nil) + (let* ((object (org-element-context)) + (last-char (save-excursion + (goto-char (org-element-property :end object)) + (backward-char) + (if (looking-at " ") + " " + "")))) + (if (-contains? '("ref" "eqref" "pageref" "nameref") + (org-element-property :type object)) + ;; we are on a link, so replace it. + (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)) + ;; insert a new link + (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))) + )))))))) + + + #+END_SRC #+RESULTS: @@ -3153,8 +3191,6 @@ C-u C-u will change the key at point to the selected keys. (-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 ","))))