-
Notifications
You must be signed in to change notification settings - Fork 55
Transient org cite follow processor
Bruce D'Arcus edited this page Apr 5, 2023
·
12 revisions
Possible idea for enhancement that just occurred to me, that isn't possible with embark (IUC), but may be here: the menu should indicate whether a command will return results, much like the minibuffer indicators. Basically, it would color-code the keys. I don't know how to implement that ATM, but please add it if you do.
Digging a bit more, not sure the above would work. But another idea: the transient could also enable setting the local citation style or command.
If you would rather not use embark-act
in the buffer, and prefer hydra
or transient
, here's how you can create such a processor; this example using transient (though the screenshot above is using pretty-hydra
).
;;; citar-menu.el --- transient menu for citar -*- lexical-binding: t; -*-
;;
;;; Code:
(require 'org-element)
(require 'transient)
(require 'citar)
(require 'citar-org)
;; First, create at-point functions for the key commands.
;; A hydra would use the same functions.
(defun citar-menu-open-entry ()
"An at-point interface to 'citar-open-entry'."
(interactive)
(citar--open-entry (citar-key-at-point)))
(defun citar-menu-open-notes ()
"An at-point interface to 'citar-open-notes'."
(interactive)
(let ((key (citar-key-at-point)))
(citar-open-notes (list key))))
(defun citar-menu-open-files ()
"An at-point interface to 'citar-open-files'."
(interactive)
(let ((key (citar-key-at-point)))
(citar-open-files (list key))))
(defun citar-menu-open ()
"An at-point interface to 'citar-open'."
(interactive)
(let ((key (citar-key-at-point)))
(citar-open (list key))))
;; Next, create the transient menu definition.
(transient-define-prefix citar-menu-transient ()
["Reference(s)\n"
["Open"
("f" "library files" citar-menu-open-files)
("e" "BibTeX entry" citar-menu-open-entry)
("n" "notes" citar-menu-open-notes)
("o" "files or links" citar-menu-open)]
["Edit"
("i" "Insert or edit" citar-insert-edit)
("d" "Delete key/citation" citar-org-delete-citation)]])
;; Finally, create and register the org-cite processor.
(defun citar-menu-transient-follow (&optional datum _)
"Follow function to use a transient menu for citar.
DATUM is the org element."
(interactive)
(when (null datum) (setq datum (org-element-context)))
(if (eq 'citation-reference (org-element-type datum))
(citar-menu-transient)))
;;;###autoload
(org-cite-register-processor 'citar-transient
:follow #'citar-menu-transient-follow)
(provide 'citar-menu)
;;; citar-menu.el ends here