branch: elpa/gptel commit 52748d02ede4242725a946696c3a0fa26669dc57 Author: Karthik Chikmagalur <karthikchikmaga...@gmail.com> Commit: Karthik Chikmagalur <karthikchikmaga...@gmail.com>
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