diff --git a/gptel-curl.el b/gptel-curl.el index e595b08..23cd597 100644 --- a/gptel-curl.el +++ b/gptel-curl.el @@ -236,7 +236,12 @@ See `gptel--url-get-response' for details." (current-buffer)) '((display-buffer-reuse-window display-buffer-pop-up-window) - (reusable-frames . visible))))) + (reusable-frames . visible)))) + ;; Run pre-response hook + (when (and (equal (plist-get proc-info :http-status) "200") + gptel-pre-response-hook) + (with-current-buffer (marker-buffer (plist-get proc-info :position)) + (run-hooks 'gptel-pre-response-hook)))) (when-let ((http-msg (plist-get proc-info :status)) (http-status (plist-get proc-info :http-status))) diff --git a/gptel.el b/gptel.el index 8759191..9d241ad 100644 --- a/gptel.el +++ b/gptel.el @@ -134,6 +134,14 @@ return the transformed string." :group 'gptel :type 'hook) +(defcustom gptel-pre-response-hook nil + "Hook run before inserting ChatGPT's response into the current buffer. + +This hook is called in the buffer from which the prompt was sent +to ChatGPT. Note: this hook only runs if the request succeeds." + :group 'gptel + :type 'hook) + (defcustom gptel-post-response-hook nil "Hook run after inserting ChatGPT's response into the current buffer. @@ -569,6 +577,7 @@ See `gptel--url-get-response' for details." (put-text-property 0 (length response) 'gptel 'response response) (with-current-buffer (marker-buffer start-marker) (goto-char start-marker) + (run-hooks 'gptel-pre-response-hook) (unless (or (bobp) (plist-get info :in-place)) (insert "\n\n")) (let ((p (point)))