branch: elpa/gptel
commit 52748d02ede4242725a946696c3a0fa26669dc57
Author: Karthik Chikmagalur <[email protected]>
Commit: Karthik Chikmagalur <[email protected]>
gptel-transient: Add code fences when redirecting to gptel buffer
* gptel-transient.el (gptel--suffix-send): Add code fences or Org
block markers around text when redirecting a response to a gptel
buffer. Skip this step if the gptel buffer will be in the same
major-mode as the current buffer. (#1002)
---
gptel-transient.el | 64 +++++++++++++++++++++++++++++++++---------------------
1 file changed, 39 insertions(+), 25 deletions(-)
diff --git a/gptel-transient.el b/gptel-transient.el
index 7e9fa972d67..f6fba6e45a9 100644
--- a/gptel-transient.el
+++ b/gptel-transient.el
@@ -1544,35 +1544,49 @@ This sets the variable `gptel-include-tool-results',
which see."
(substring s 1)))
args))
(setq output-to-other-buffer-p t)
- (let ((reduced-prompt ;For inserting into the gptel buffer as
+ (let* ((reduced-prompt ;For inserting into the gptel buffer as
;context, not the prompt used for the
;request itself
- (or prompt
- (if (use-region-p)
- (buffer-substring-no-properties (region-beginning)
- (region-end))
- (buffer-substring-no-properties
- (save-excursion
- (text-property-search-backward
- 'gptel 'response
- (when (get-char-property (max (point-min) (1- (point)))
- 'gptel)
- t))
- (point))
- (gptel--at-word-end (point)))))))
+ (or prompt
+ (if (use-region-p)
+ (buffer-substring-no-properties (region-beginning)
+ (region-end))
+ (buffer-substring-no-properties
+ (save-excursion
+ (text-property-search-backward
+ 'gptel 'response
+ (when (get-char-property (max (point-min) (1- (point)))
+ 'gptel)
+ t))
+ (point))
+ (gptel--at-word-end (point))))))
+ (gptel-buffer (get-buffer gptel-buffer-name))
+ (gptel-buffer-mode
+ (if (buffer-live-p gptel-buffer)
+ (buffer-local-value 'major-mode gptel-buffer)
+ gptel-default-mode)))
+ ;; Add code fences or Org block around prompt
+ (cond ((eq major-mode gptel-buffer-mode))
+ ((provided-mode-derived-p gptel-buffer-mode 'org-mode)
+ (setq reduced-prompt
+ (concat "#+begin_src " (gptel--strip-mode-suffix
major-mode)
+ "\n" reduced-prompt "\n#+end_src")))
+ (t (setq reduced-prompt
+ (concat "``` " (gptel--strip-mode-suffix major-mode)
"\n"
+ reduced-prompt "\n```" ))))
(cond
- ((buffer-live-p (get-buffer gptel-buffer-name))
+ ((buffer-live-p gptel-buffer)
;; Insert into existing gptel session
- (progn
- (setq buffer (get-buffer gptel-buffer-name))
- (with-current-buffer buffer
- (goto-char (point-max))
- (unless (or buffer-read-only
- (get-char-property (point) 'read-only))
- (insert reduced-prompt))
- (setq position (point))
- (when (and gptel-mode (not dry-run))
- (gptel--update-status " Waiting..." 'warning)))))
+ (setq buffer gptel-buffer)
+ (with-current-buffer buffer
+ (goto-char (point-max))
+ (unless (or buffer-read-only
+ (get-char-property (point) 'read-only))
+ (unless (bolp) (insert "\n"))
+ (insert reduced-prompt))
+ (setq position (point))
+ (when (and gptel-mode (not dry-run))
+ (gptel--update-status " Waiting..." 'warning))))
;; Insert into new gptel session
(t (setq buffer
(gptel gptel-buffer-name