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) ""))