branch: elpa/gptel commit ae1cc572475214f383d90269125283ca79c5874b Author: Henrik Ahlgren <pa...@seestieto.com> Commit: GitHub <nore...@github.com>
gptel-transient: unmark before editing crowdsourced prompt (#618) * gptel-transient.el (gptel--read-crowdsourced-prompt, gptel--edit-directive, gptel--suffix-system-message): Deactivate the mark after entering the prompt-edit buffer for a crowdsourced prompt (#616). This behaviour was introduced in commit cc53a81c, but it did not actually work since `deactivate-mark' was called after returning from `gptel--read-crowdsourced-prompt', when it was too late. * gptel-rewrite.el (gptel--suffix-rewrite-directive): Call `gptel--rewrite-directive' with mark activation enabled. --- gptel-rewrite.el | 2 +- gptel-transient.el | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/gptel-rewrite.el b/gptel-rewrite.el index afffaf40ae..df1fbceca1 100644 --- a/gptel-rewrite.el +++ b/gptel-rewrite.el @@ -587,7 +587,7 @@ generated from functions." "Rewrite directive is dynamically generated: Edit its current value instead?"))))) (if cancel (progn (message "Edit canceled") (call-interactively #'gptel-rewrite)) - (gptel--edit-directive 'gptel--rewrite-directive #'gptel-rewrite))) + (gptel--edit-directive 'gptel--rewrite-directive #'gptel-rewrite t))) (transient-define-suffix gptel--suffix-rewrite (&optional rewrite-message dry-run) "Rewrite or refactor region contents." diff --git a/gptel-transient.el b/gptel-transient.el index c3f04462d6..dab79b2d1a 100644 --- a/gptel-transient.el +++ b/gptel-transient.el @@ -1304,10 +1304,9 @@ This uses the prompts in the variable (complete-with-action action gptel--crowdsourced-prompts str pred))) nil t))) (when-let ((prompt (gethash choice gptel--crowdsourced-prompts))) - (gptel--set-with-scope - 'gptel--system-message prompt gptel--set-buffer-locally) - (gptel--edit-directive 'gptel--system-message) - (deactivate-mark))) + (gptel--set-with-scope + 'gptel--system-message prompt gptel--set-buffer-locally) + (gptel--edit-directive 'gptel--system-message))) (message "No prompts available."))) (transient-define-suffix gptel--suffix-system-message (&optional cancel) @@ -1325,15 +1324,16 @@ generated from functions." "Active directive is dynamically generated: Edit its current value instead?"))))) (if cancel (progn (message "Edit canceled") (call-interactively #'gptel-menu)) - (gptel--edit-directive 'gptel--system-message))) + (gptel--edit-directive 'gptel--system-message nil t))) ;; MAYBE: Eventually can be simplified with string-edit, after we drop support ;; for Emacs 28.2. -(defun gptel--edit-directive (sym &optional callback-cmd) +(defun gptel--edit-directive (sym &optional callback-cmd activate) "Edit a gptel directive in a dedicated buffer. Store the result in SYM, a symbol. If CALLBACK-CMD is specified, -it is run after exiting the edit." +it is run after exiting the edit. If ACTIVATE is specified, +activate the mark." (let ((orig-buf (current-buffer)) (msg-start (make-marker)) (directive (symbol-value sym))) @@ -1365,7 +1365,7 @@ it is run after exiting the edit." ;; If it's a list, insert only the system message part (insert (car-safe (gptel--parse-directive directive 'raw))) (push-mark nil 'nomsg)) - (activate-mark) + (when activate (activate-mark)) (visual-line-mode 1)) (display-buffer (current-buffer) `((display-buffer-below-selected)