Skip to content

Commit 52748d0

Browse files
committed
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)
1 parent 3c4e65b commit 52748d0

File tree

1 file changed

+39
-25
lines changed

1 file changed

+39
-25
lines changed

gptel-transient.el

Lines changed: 39 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1544,35 +1544,49 @@ This sets the variable `gptel-include-tool-results', which see."
15441544
(substring s 1)))
15451545
args))
15461546
(setq output-to-other-buffer-p t)
1547-
(let ((reduced-prompt ;For inserting into the gptel buffer as
1547+
(let* ((reduced-prompt ;For inserting into the gptel buffer as
15481548
;context, not the prompt used for the
15491549
;request itself
1550-
(or prompt
1551-
(if (use-region-p)
1552-
(buffer-substring-no-properties (region-beginning)
1553-
(region-end))
1554-
(buffer-substring-no-properties
1555-
(save-excursion
1556-
(text-property-search-backward
1557-
'gptel 'response
1558-
(when (get-char-property (max (point-min) (1- (point)))
1559-
'gptel)
1560-
t))
1561-
(point))
1562-
(gptel--at-word-end (point)))))))
1550+
(or prompt
1551+
(if (use-region-p)
1552+
(buffer-substring-no-properties (region-beginning)
1553+
(region-end))
1554+
(buffer-substring-no-properties
1555+
(save-excursion
1556+
(text-property-search-backward
1557+
'gptel 'response
1558+
(when (get-char-property (max (point-min) (1- (point)))
1559+
'gptel)
1560+
t))
1561+
(point))
1562+
(gptel--at-word-end (point))))))
1563+
(gptel-buffer (get-buffer gptel-buffer-name))
1564+
(gptel-buffer-mode
1565+
(if (buffer-live-p gptel-buffer)
1566+
(buffer-local-value 'major-mode gptel-buffer)
1567+
gptel-default-mode)))
1568+
;; Add code fences or Org block around prompt
1569+
(cond ((eq major-mode gptel-buffer-mode))
1570+
((provided-mode-derived-p gptel-buffer-mode 'org-mode)
1571+
(setq reduced-prompt
1572+
(concat "#+begin_src " (gptel--strip-mode-suffix major-mode)
1573+
"\n" reduced-prompt "\n#+end_src")))
1574+
(t (setq reduced-prompt
1575+
(concat "``` " (gptel--strip-mode-suffix major-mode) "\n"
1576+
reduced-prompt "\n```" ))))
15631577
(cond
1564-
((buffer-live-p (get-buffer gptel-buffer-name))
1578+
((buffer-live-p gptel-buffer)
15651579
;; Insert into existing gptel session
1566-
(progn
1567-
(setq buffer (get-buffer gptel-buffer-name))
1568-
(with-current-buffer buffer
1569-
(goto-char (point-max))
1570-
(unless (or buffer-read-only
1571-
(get-char-property (point) 'read-only))
1572-
(insert reduced-prompt))
1573-
(setq position (point))
1574-
(when (and gptel-mode (not dry-run))
1575-
(gptel--update-status " Waiting..." 'warning)))))
1580+
(setq buffer gptel-buffer)
1581+
(with-current-buffer buffer
1582+
(goto-char (point-max))
1583+
(unless (or buffer-read-only
1584+
(get-char-property (point) 'read-only))
1585+
(unless (bolp) (insert "\n"))
1586+
(insert reduced-prompt))
1587+
(setq position (point))
1588+
(when (and gptel-mode (not dry-run))
1589+
(gptel--update-status " Waiting..." 'warning))))
15761590
;; Insert into new gptel session
15771591
(t (setq buffer
15781592
(gptel gptel-buffer-name

0 commit comments

Comments
 (0)