From 219e163dc76d3cb27d8438816a453ccb686c553b Mon Sep 17 00:00:00 2001 From: Karthik Chikmagalur Date: Fri, 19 May 2023 22:26:38 -0700 Subject: [PATCH] gptel-curl: Add gptel-abort * gptel-curl.el (gptel-abort): Command to cancel any active gptel Curl request in the current buffer. --- gptel-curl.el | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/gptel-curl.el b/gptel-curl.el index fa6f8ec..eacb177 100644 --- a/gptel-curl.el +++ b/gptel-curl.el @@ -98,6 +98,27 @@ the response is inserted into the current buffer after point." (set-process-filter process #'gptel-curl--stream-filter)) (set-process-sentinel process #'gptel-curl--sentinel))))) +(defun gptel-abort (buf) + "Stop any active gptel process associated with the current buffer." + (interactive (list (current-buffer))) + (unless gptel-use-curl + (user-error "Cannot stop a `url-retrieve' request!")) + (if-let* ((proc-attrs + (cl-find-if + (lambda (proc-list) + (eq (plist-get (cdr proc-list) :buffer) buf)) + gptel-curl--process-alist)) + (proc (car proc-attrs))) + (progn + (setf (alist-get proc gptel-curl--process-alist nil 'remove) nil) + (set-process-sentinel proc #'ignore) + (delete-process proc) + (kill-buffer (process-buffer proc)) + (with-current-buffer buf + (when gptel-mode (gptel--update-header-line " Ready" 'success))) + (message "Stopped gptel request in buffer %S" (buffer-name buf))) + (message "No gptel request associated with buffer %S" (buffer-name buf)))) + ;; TODO: Separate user-messaging from this function (defun gptel-curl--stream-cleanup (process status) "Process sentinel for GPTel curl requests.