gptel-transient: Add prompting from kill-ring

* gptel-transient.el (gptel-menu, gptel--suffix-send):  Add a
transient menu option to select the prompt from the kill-ring.
By default the latest kill is selected.  Sending with a prefix-arg
allows for choosing the kill ring element.

TODO: This latter behavior needs to be made discoverable somehow.
This commit is contained in:
Karthik Chikmagalur 2024-01-11 17:21:13 -08:00
parent bea31e33e2
commit 7c2e342f35

View file

@ -123,6 +123,7 @@ which see."
(gptel--infix-temperature)]
["Prompt:"
("p" "From minibuffer instead" "p")
("y" "From kill-ring instead" "y")
("i" "Replace/Delete prompt" "i")
"Response to:"
("m" "Minibuffer instead" "m")
@ -379,13 +380,20 @@ will get progressively longer!"
(buffer) (position)
(callback) (gptel-buffer-name)
(prompt
(and (member "p" args)
(cond
((member "p" args)
(read-string
(format "Ask %s: " (gptel-backend-name gptel-backend))
(apply #'buffer-substring-no-properties
(if (use-region-p)
(list (region-beginning) (region-end))
(list (line-beginning-position) (line-end-position))))))))
(list (line-beginning-position) (line-end-position))))))
((member "y" args)
(unless (car-safe kill-ring)
(user-error "`kill-ring' is empty! Nothing to send."))
(if current-prefix-arg
(read-from-kill-ring "Prompt from kill-ring: ")
(current-kill 0))))))
(cond
((member "m" args)
(setq stream nil)