branch: elpa/gptel
commit 99f2d57715bdd46e9c2b6b95b9d3799bd1d9ffaf
Author: Karthik Chikmagalur <[email protected]>
Commit: Karthik Chikmagalur <[email protected]>

    gptel-context: Sanitize stale context, fix context removal
    
    * gptel-context.el (gptel-context-remove): Fix for
    `gptel-context's new plist spec.
    
    (gptel-context--buffer-setup): Fix for new plist spec.
    
    * gptel-transient.el (gptel-menu): Sanitize `gptel-context' before
    displaying the menu, clearing context from killed buffers.
    Because `gptel-context--collect' is now pure and no longer sets
    `gptel-context', we have to sanitize `gptel-context' _somewhere_!
    gptel-menu might not be the best place for it, but at least this
    way you don't see wrong counts in the context indicator in the
    menu.
---
 gptel-context.el   | 9 +++++----
 gptel-transient.el | 7 +++++++
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/gptel-context.el b/gptel-context.el
index 8f73a185860..798a9fe0ed6 100644
--- a/gptel-context.el
+++ b/gptel-context.el
@@ -304,7 +304,8 @@ If CONTEXT is a directory, recursively removes all files in 
it."
     ;; FIXME: Quadratic cost when clearing a bunch of contexts at once
     (unless
         (cl-loop
-         for ov in (alist-get (current-buffer) gptel-context)
+         for ov in
+         (plist-get (alist-get (current-buffer) gptel-context) :overlays)
          thereis (overlay-start ov))
       (setf (alist-get (current-buffer) gptel-context nil 'remove) nil)))
    ((bufferp context)                   ;Full buffer
@@ -666,9 +667,9 @@ CONTEXT-ALIST is the alist of contexts to use to populate 
the buffer."
                        buf (overlay-start source-ov) (overlay-end source-ov))
                       (insert "\n")
                       (setq ov (make-overlay beg (point)))
-                      (overlay-put ov 'gptel-context source-ov)))
-                  (overlay-put ov 'gptel-overlay t)
-                  (overlay-put ov 'evaporate t)
+                      (overlay-put ov 'gptel-context source-ov)
+                      (overlay-put ov 'gptel-overlay t)
+                      (overlay-put ov 'evaporate t)))
                   (insert "\n" (make-separator-line) "\n"))
                  (t                     ;BUF is a file path, not a buffer
                   (insert (propertize (format "In file %s:\n\n" 
(file-name-nondirectory buf))
diff --git a/gptel-transient.el b/gptel-transient.el
index 3daf1963da7..ef5f905794f 100644
--- a/gptel-transient.el
+++ b/gptel-transient.el
@@ -918,6 +918,13 @@ Also format its value in the Transient menu."
   [(gptel--suffix-send)]
   (interactive)
   (gptel--sanitize-model)
+  (when gptel-context        ;MAYBE: Move this to a dedicated sanitize 
function?
+    (setq gptel-context
+          (cl-delete-if
+           (lambda (entry)
+             (let ((first (or (car-safe entry) entry)))
+               (and (bufferp first) (not (buffer-live-p first)))))
+           gptel-context)))
   (transient-setup 'gptel-menu))
 
 ;; ** Prefix for setting the system prompt.

Reply via email to