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.