gptel: Set window when running post-response hook

* gptel.el (gptel--insert-response): Moving point in a buffer does
not move window-point in a window displaying that buffer if the
window is not selected (#269).  So select the gptel response
window explicitly (if possible) when running
`gptel-post-response-functions`.

NOTE: Instead of selecting the window before running the hook, We
could run `set-window-point` in the window after running it.
Since the hook can have any kind of behavior (smooth-scrolling for
instance) we want it to play out interactively.

* gptel-curl.el (gptel--curl-stream-cleanup): Ditto.
This commit is contained in:
Karthik Chikmagalur 2024-03-29 15:47:32 -07:00
parent 26326c302e
commit 81bb467104
2 changed files with 17 additions and 6 deletions

View file

@ -238,10 +238,16 @@ PROCESS and _STATUS are process parameters."
(when gptel-mode
(gptel--update-status
(format " Response Error: %s" http-msg) 'error))))
;; Run hook in visible window to set window-point, BUG #269
(if-let ((gptel-window (get-buffer-window gptel-buffer 'visible)))
(with-selected-window gptel-window
(run-hook-with-args 'gptel-post-response-functions
(marker-position start-marker)
(marker-position (or tracking-marker start-marker))))
(with-current-buffer gptel-buffer
(run-hook-with-args 'gptel-post-response-functions
(marker-position start-marker)
(marker-position (or tracking-marker start-marker)))))
(marker-position (or tracking-marker start-marker))))))
(setf (alist-get process gptel-curl--process-alist nil 'remove) nil)
(kill-buffer proc-buf)))

View file

@ -1047,8 +1047,13 @@ See `gptel--url-get-response' for details."
(gptel--update-status
(format " Response Error: %s" status-str) 'error)
(message "gptel response error: (%s) %s"
status-str (plist-get info :error)))
(run-hook-with-args 'gptel-post-response-functions response-beg response-end))))
status-str (plist-get info :error))))
;; Run hook in visible window to set window-point, BUG #269
(if-let ((gptel-window (get-buffer-window gptel-buffer 'visible)))
(with-selected-window gptel-window
(run-hook-with-args 'gptel-post-response-functions response-beg response-end))
(with-current-buffer gptel-buffer
(run-hook-with-args 'gptel-post-response-functions response-beg response-end)))))
(defun gptel-set-topic ()
"Set a topic and limit this conversation to the current heading.