Thanks! Here is another take=)
(defcustom org-cite-basic-follow-actions '[["Open" ("b" "bibliography entry" (org-cite-basic-goto !citation !prefix))] ["Copy" ("d" "DOI" org-cite-basic-follow.copy-doi)] ["Browse" ("u" "url" org-cite-basic-follow.browse-url)]] "Hepp" :group 'org-cite :type 'sexp) (transient-define-prefix org-cite-basic-follow (citation &optional prefix) [:class transient-columns :setup-children org-cite-basic-follow--setup :pad-keys t] (interactive) (if (or org-cite-basic-follow-ask (eq prefix '(-4))) (transient-setup 'org-cite-basic-follow nil nil :scope (list citation prefix)) (org-cite-basic-goto citation prefix))) (defun org-cite-basic-follow--parse-suffix-specification (specification) (pcase specification ((and (pred stringp) label) label) (`(,key ,desc (,fn . ,fn-args) . ,other) (let ((function-args (mapcar (lambda (arg) (pcase arg ('!citation '(car (transient-scope))) ('!prefix '(cadr (transient-scope))) ('!citation-key '(org-element-property :key (car (transient-scope)))))) fn-args))) `(,key ,desc (lambda () (interactive) (,fn ,@function-args)) ,other))) (`(,key ,desc ,suffix) (list key desc suffix)))) (defun org-cite-basic-follow--setup (_) (transient-parse-suffixes 'org-cite-basic-follow (cl-map 'vector (lambda (group) (cl-map 'vector #'org-cite-basic-follow--parse-suffix-specification group)) org-cite-basic-follow-actions))) Cheers, Tor-björn