branch: elpa/gptel
commit ffa679ef4c72a0ade9f6513a2360f826382832ea
Author: Karthik Chikmagalur <[email protected]>
Commit: Karthik Chikmagalur <[email protected]>
gptel: Fix overlay handling in tool call confirmation cleanup
* gptel.el (gptel--accept-tool-calls, gptel--reject-tool-calls):
When cleaning up the tool call confirmation overlays, set the
buffer to the overlay buffer. Otherwise this creates issues when
the tool call changes the active Emacs buffer, which happpens
often when an LLM is controlling Emacs.
---
gptel.el | 38 ++++++++++++++++++++------------------
1 file changed, 20 insertions(+), 18 deletions(-)
diff --git a/gptel.el b/gptel.el
index 8f54494bb1a..8b207af790a 100644
--- a/gptel.el
+++ b/gptel.el
@@ -1878,15 +1878,16 @@ NAME and ARG-VALUES are the name and arguments for the
call."
(apply (gptel-tool-function tool-spec) arg-values)
(error (mapconcat #'gptel--to-string errdata " ")))))
(funcall process-tool-result result))))
- (when (overlayp ov)
- (when-let* ((preview-handles (overlay-get ov 'previews)))
- (dolist (func-to-handle preview-handles)
- (when (car func-to-handle) (apply func-to-handle))))
- (when-let* ((prompt-ov (overlay-get ov 'prompt))
- ((overlay-buffer prompt-ov))
- (inhibit-read-only t))
- (delete-region (overlay-start prompt-ov)
- (overlay-end prompt-ov)))
+ (when (and (overlayp ov) (overlay-buffer ov))
+ (with-current-buffer (overlay-buffer ov)
+ (when-let* ((preview-handles (overlay-get ov 'previews)))
+ (dolist (func-to-handle preview-handles)
+ (when (car func-to-handle) (apply func-to-handle))))
+ (when-let* ((prompt-ov (overlay-get ov 'prompt))
+ ((overlay-buffer prompt-ov))
+ (inhibit-read-only t))
+ (delete-region (overlay-start prompt-ov)
+ (overlay-end prompt-ov))))
(delete-overlay ov)))
(defun gptel--reject-tool-calls (&optional _response ov)
@@ -1896,15 +1897,16 @@ NAME and ARG-VALUES are the name and arguments for the
call."
(gptel--update-status " Tools cancelled" 'error)
(message (substitute-command-keys
"Tool calls canceled. \\[gptel-menu] to continue them!"))
- (when (overlayp ov)
- (when-let* ((preview-handles (overlay-get ov 'previews)))
- (dolist (func-to-handle preview-handles)
- (when (car func-to-handle) (apply func-to-handle))))
- (when-let* ((prompt-ov (overlay-get ov 'prompt))
- ((overlay-buffer prompt-ov))
- (inhibit-read-only t))
- (delete-region (overlay-start prompt-ov)
- (overlay-end prompt-ov)))
+ (when (and (overlayp ov) (overlay-buffer ov))
+ (with-current-buffer (overlay-buffer ov)
+ (when-let* ((preview-handles (overlay-get ov 'previews)))
+ (dolist (func-to-handle preview-handles)
+ (when (car func-to-handle) (apply func-to-handle))))
+ (when-let* ((prompt-ov (overlay-get ov 'prompt))
+ ((overlay-buffer prompt-ov))
+ (inhibit-read-only t))
+ (delete-region (overlay-start prompt-ov)
+ (overlay-end prompt-ov))))
(delete-overlay ov)))
(defun gptel--dispatch-tool-calls (choice)