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)] (gptel--infix-temperature)]
["Prompt:" ["Prompt:"
("p" "From minibuffer instead" "p") ("p" "From minibuffer instead" "p")
("y" "From kill-ring instead" "y")
("i" "Replace/Delete prompt" "i") ("i" "Replace/Delete prompt" "i")
"Response to:" "Response to:"
("m" "Minibuffer instead" "m") ("m" "Minibuffer instead" "m")
@ -379,13 +380,20 @@ will get progressively longer!"
(buffer) (position) (buffer) (position)
(callback) (gptel-buffer-name) (callback) (gptel-buffer-name)
(prompt (prompt
(and (member "p" args) (cond
(read-string ((member "p" args)
(format "Ask %s: " (gptel-backend-name gptel-backend)) (read-string
(apply #'buffer-substring-no-properties (format "Ask %s: " (gptel-backend-name gptel-backend))
(if (use-region-p) (apply #'buffer-substring-no-properties
(list (region-beginning) (region-end)) (if (use-region-p)
(list (line-beginning-position) (line-end-position)))))))) (list (region-beginning) (region-end))
(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 (cond
((member "m" args) ((member "m" args)
(setq stream nil) (setq stream nil)