From e7454ceb79a51de8e79492fc30a1f4e2ab3414bd Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou Date: Wed, 11 Aug 2021 12:11:34 +0200 Subject: [PATCH] oc: Call select-style function with a citation argument * lisp/oc.el (org-cite--keys-to-citation): New function. (org-cite-make-insert-processor): Use new function. Change signature of SELECT-STYLE. Reported-by: "Bruce D'Arcus" --- lisp/oc-basic.el | 2 +- lisp/oc.el | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/lisp/oc-basic.el b/lisp/oc-basic.el index 7f4c6e7ff..f16eb2511 100644 --- a/lisp/oc-basic.el +++ b/lisp/oc-basic.el @@ -682,7 +682,7 @@ present in the citation." ;;; "Insert" capability -(defun org-cite-basic--complete-style () +(defun org-cite-basic--complete-style (_) "Offer completion for style. Return chosen style as a string." (let* ((styles diff --git a/lisp/oc.el b/lisp/oc.el index 04e0c9b09..5fcb9da62 100644 --- a/lisp/oc.el +++ b/lisp/oc.el @@ -1449,6 +1449,16 @@ ARG is the prefix argument received when calling `org-open-at-point', or nil." (insert-before-markers string ";") (insert-before-markers ";" string)))) +(defun org-cite--keys-to-citation (keys) + "Build a citation object from a list of citation KEYS. +Citation keys are strings without the leading \"@\"." + (apply #'org-element-create + 'citation + nil + (mapcar (lambda (k) + (org-element-create 'citation-reference (list :key k))) + keys))) + (defun org-cite-make-insert-processor (select-key select-style) "Build a function appropriate as an insert processor. @@ -1457,8 +1467,8 @@ should return a citation key as a string, or nil. Otherwise, the function should return a list of such keys, or nil. The keys should not have any leading \"@\" character. -SELECT-STYLE is a function called without any argument. It should return a -style string, or nil. +SELECT-STYLE is a function called with one argument, the citation object being +edited or constructed so far. It should return a style string, or nil. The return value is a function of two arguments: CONTEXT and ARG. CONTEXT is either a citation reference, a citation object, or nil. ARG is a prefix @@ -1541,7 +1551,8 @@ The generated function inserts or edit a citation at point. More specifically, (insert (format "[cite%s:%s]" (if arg - (let ((style (funcall select-style))) + (let ((style (funcall select-style + (org-cite--keys-to-citation keys)))) (if (org-string-nw-p style) (concat "/" style) ""))