82 lines
2.5 KiB
EmacsLisp
82 lines
2.5 KiB
EmacsLisp
;;; contrib.el --- Code contributed by users -*- lexical-binding: t; -*-
|
|
|
|
;;; Commentary:
|
|
;;
|
|
|
|
;;; Code:
|
|
(defvar org-ref-cite-types)
|
|
(declare-function org-element-context "org-element")
|
|
(declare-function org-element-type "org-element")
|
|
(declare-function org-element-property "org-element")
|
|
(declare-function bibtex-completion-apa-format-reference "bibtex-completion")
|
|
(declare-function org-ref-parse-cite-path "org-ref-citation-links")
|
|
|
|
|
|
;; * Add messages in minibuffer
|
|
;; Contributed in https://github.com/jkitchin/org-ref/issues/938 by @DiogoFerrari
|
|
|
|
|
|
(defun org-ref-get-bibtex-key-under-cursor--display ()
|
|
"Return key under the cursor in `org-mode'.
|
|
If not on a key, but on a cite, prompt for key."
|
|
(if-let* ((key (get-text-property (point) 'cite-key)))
|
|
;; Point is on a key, so we get it directly
|
|
key
|
|
;; point is not on a key, but may still be on a cite link
|
|
(let ((el (org-element-context))
|
|
data text
|
|
keys)
|
|
(cond
|
|
;; on a cite-link type
|
|
((and
|
|
(eq (org-element-type el) 'link)
|
|
(assoc (org-element-property :type el) org-ref-cite-types))
|
|
|
|
(goto-char (org-element-property :begin el))
|
|
(setq data (org-ref-parse-cite-path (org-element-property :path el))
|
|
keys (cl-loop for ref in (plist-get data :references)
|
|
collect (plist-get ref :key)))
|
|
(setq text nil)
|
|
(dolist (key keys)
|
|
(search-forward key)
|
|
(goto-char (match-beginning 0))
|
|
;; (get-text-property (point) 'cite-key)
|
|
;; (message (bibtex-completion-apa-format-reference key))
|
|
(setq text (concat text "\n" (bibtex-completion-apa-format-reference key))))))))
|
|
(message (string-trim-left text)))
|
|
|
|
|
|
(defvar org-ref-message-timer nil
|
|
"Stores the idle timer for cite minibuffer messages.")
|
|
|
|
|
|
(defcustom org-ref-message-interval 0.5
|
|
"Time in seconds to wait for the idle timer that displays the cite message."
|
|
:group 'org-ref
|
|
:type 'float)
|
|
|
|
|
|
(defun org-ref-link-message ()
|
|
"Display a message in the minibuffer when point is on a cite link."
|
|
(when (and (eq major-mode 'org-mode) (eq (get-text-property (point) 'help-echo) 'org-ref-cite-tooltip))
|
|
(save-excursion (org-ref-get-bibtex-key-under-cursor--display))))
|
|
|
|
|
|
(defun org-ref-messages-on ()
|
|
"Turn cite messages to minibuffer on."
|
|
(interactive)
|
|
(setq org-ref-message-timer (run-with-idle-timer org-ref-message-interval 0 'org-ref-link-message)))
|
|
|
|
|
|
(defun org-ref-messages-off ()
|
|
"Turn cite messages to minibuffer off."
|
|
(interactive)
|
|
(when org-ref-message-timer
|
|
(cancel-timer org-ref-message-timer)
|
|
(setq org-ref-message-timer nil)))
|
|
|
|
|
|
(provide 'contrib)
|
|
|
|
;;; contrib.el ends here
|