X-Git-Url: https://git.donarmstrong.com/?p=org-ref.git;a=blobdiff_plain;f=org-ref.org;h=22cf65eb33096d11d0a2dc769acb44e40d3797d2;hp=0c2e1d972afac69b11398b504d2b2feaa20b133b;hb=c52f96fe6fae23ff9d73651395ce8699a82284d1;hpb=56658921640ee1eddc7077dd0d2fc9c40e696fd0 diff --git a/org-ref.org b/org-ref.org index 0c2e1d9..22cf65e 100644 --- a/org-ref.org +++ b/org-ref.org @@ -1100,7 +1100,7 @@ Now, we can put all the labels together which will give us a list of candidates. #+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) @@ -1142,10 +1142,11 @@ Alternatively, you may want to just call a function that inserts a link with com 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)) @@ -1165,14 +1166,44 @@ 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 + ((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: @@ -3131,9 +3162,6 @@ C-u C-u will change the key at point to the selected keys. (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)) @@ -3146,7 +3174,7 @@ C-u C-u will change the key at point to the selected keys. ;; 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. @@ -3156,8 +3184,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 ","))))