Skip to content

Commit 95a5716

Browse files
committed
gptel: Check derived modes instead of major-mode
* gptel.el (gptel--convert-org, gptel--save-state, gptel--restore-state): Check for modes derived from Org/Markdown instead of checking for org-mode and markdown-mode specifically. This is to adapt gptel-mode and md -> org conversion in major-modes that are derived from Org. * gptel-curl.el (gptel-curl-get-response): Ditto.
1 parent a834adb commit 95a5716

File tree

2 files changed

+46
-47
lines changed

2 files changed

+46
-47
lines changed

gptel-curl.el

+2-4
Original file line numberDiff line numberDiff line change
@@ -135,10 +135,8 @@ the response is inserted into the current buffer after point."
135135
(if stream
136136
#'gptel-curl--stream-insert-response
137137
#'gptel--insert-response))
138-
:transformer (when (eq (buffer-local-value
139-
'major-mode
140-
(plist-get info :buffer))
141-
'org-mode)
138+
:transformer (when (with-current-buffer (plist-get info :buffer)
139+
(derived-mode-p 'org-mode))
142140
(gptel--stream-convert-markdown->org)))
143141
info))
144142
(if stream

gptel.el

+44-43
Original file line numberDiff line numberDiff line change
@@ -727,52 +727,52 @@ Valid JSON unless NO-JSON is t."
727727
(defun gptel--restore-state ()
728728
"Restore gptel state when turning on `gptel-mode'."
729729
(when (buffer-file-name)
730-
(pcase major-mode
731-
('org-mode
732-
(require 'gptel-org)
733-
(gptel-org--restore-state))
734-
(_ (when gptel--bounds
735-
(mapc (pcase-lambda (`(,beg . ,end))
736-
(put-text-property beg end 'gptel 'response))
737-
gptel--bounds)
738-
(message "gptel chat restored."))
739-
(when gptel--backend-name
740-
(if-let ((backend (alist-get
741-
gptel--backend-name gptel--known-backends
742-
nil nil #'equal)))
743-
(setq-local gptel-backend backend)
744-
(message
745-
(substitute-command-keys
746-
(concat
747-
"Could not activate gptel backend \"%s\"! "
748-
"Switch backends with \\[universal-argument] \\[gptel-send]"
749-
" before using gptel."))
750-
gptel--backend-name)))))))
730+
(if (derived-mode-p 'org-mode)
731+
(progn
732+
(require 'gptel-org)
733+
(gptel-org--restore-state))
734+
(when gptel--bounds
735+
(mapc (pcase-lambda (`(,beg . ,end))
736+
(put-text-property beg end 'gptel 'response))
737+
gptel--bounds)
738+
(message "gptel chat restored."))
739+
(when gptel--backend-name
740+
(if-let ((backend (alist-get
741+
gptel--backend-name gptel--known-backends
742+
nil nil #'equal)))
743+
(setq-local gptel-backend backend)
744+
(message
745+
(substitute-command-keys
746+
(concat
747+
"Could not activate gptel backend \"%s\"! "
748+
"Switch backends with \\[universal-argument] \\[gptel-send]"
749+
" before using gptel."))
750+
gptel--backend-name))))))
751751

752752
(defun gptel--save-state ()
753753
"Write the gptel state to the buffer.
754754
755755
This saves chat metadata when writing the buffer to disk. To
756756
restore a chat session, turn on `gptel-mode' after opening the
757757
file."
758-
(pcase major-mode
759-
('org-mode
760-
(require 'gptel-org)
761-
(gptel-org--save-state))
762-
(_ (let ((print-escape-newlines t))
763-
(save-excursion
764-
(save-restriction
765-
(add-file-local-variable 'gptel-model gptel-model)
766-
(add-file-local-variable 'gptel--backend-name
767-
(gptel-backend-name gptel-backend))
768-
(unless (equal (default-value 'gptel-temperature) gptel-temperature)
769-
(add-file-local-variable 'gptel-temperature gptel-temperature))
770-
(unless (string= (default-value 'gptel--system-message)
771-
gptel--system-message)
772-
(add-file-local-variable 'gptel--system-message gptel--system-message))
773-
(when gptel-max-tokens
774-
(add-file-local-variable 'gptel-max-tokens gptel-max-tokens))
775-
(add-file-local-variable 'gptel--bounds (gptel--get-buffer-bounds))))))))
758+
(if (derived-mode-p 'org-mode)
759+
(progn
760+
(require 'gptel-org)
761+
(gptel-org--save-state))
762+
(let ((print-escape-newlines t))
763+
(save-excursion
764+
(save-restriction
765+
(add-file-local-variable 'gptel-model gptel-model)
766+
(add-file-local-variable 'gptel--backend-name
767+
(gptel-backend-name gptel-backend))
768+
(unless (equal (default-value 'gptel-temperature) gptel-temperature)
769+
(add-file-local-variable 'gptel-temperature gptel-temperature))
770+
(unless (string= (default-value 'gptel--system-message)
771+
gptel--system-message)
772+
(add-file-local-variable 'gptel--system-message gptel--system-message))
773+
(when gptel-max-tokens
774+
(add-file-local-variable 'gptel-max-tokens gptel-max-tokens))
775+
(add-file-local-variable 'gptel--bounds (gptel--get-buffer-bounds)))))))
776776

777777

778778
;; Minor mode and UI
@@ -790,7 +790,8 @@ file."
790790
map)
791791
(if gptel-mode
792792
(progn
793-
(unless (memq major-mode '(org-mode markdown-mode text-mode))
793+
(unless (or (derived-mode-p 'org-mode 'markdown-mode)
794+
(eq major-mode 'text-mode))
794795
(gptel-mode -1)
795796
(user-error (format "`gptel-mode' is not supported in `%s'." major-mode)))
796797
(add-hook 'before-save-hook #'gptel--save-state nil t)
@@ -1194,9 +1195,9 @@ hook."
11941195
Currently only `org-mode' is handled.
11951196
11961197
BUFFER is the LLM interaction buffer."
1197-
(pcase (buffer-local-value 'major-mode buffer)
1198-
('org-mode (gptel--convert-markdown->org content))
1199-
(_ content)))
1198+
(if (with-current-buffer buffer (derived-mode-p 'org-mode))
1199+
(gptel--convert-markdown->org content)
1200+
content))
12001201

12011202
(defun gptel--url-get-response (info &optional callback)
12021203
"Fetch response to prompt in INFO from the LLM.

0 commit comments

Comments
 (0)