branch: elpa/gptel
commit 95a5716aa250d6321b17691abb035aa8acefbfbb
Author: Karthik Chikmagalur <karthikchikmaga...@gmail.com>
Commit: Karthik Chikmagalur <karthikchikmaga...@gmail.com>

    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.
---
 gptel-curl.el |  6 ++---
 gptel.el      | 87 ++++++++++++++++++++++++++++++-----------------------------
 2 files changed, 46 insertions(+), 47 deletions(-)

diff --git a/gptel-curl.el b/gptel-curl.el
index 7b7d790821..2d4c8ee969 100644
--- a/gptel-curl.el
+++ b/gptel-curl.el
@@ -135,10 +135,8 @@ the response is inserted into the current buffer after 
point."
                                        (if stream
                                            #'gptel-curl--stream-insert-response
                                          #'gptel--insert-response))
-                         :transformer (when (eq (buffer-local-value
-                                                 'major-mode
-                                                 (plist-get info :buffer))
-                                                'org-mode)
+                         :transformer (when (with-current-buffer (plist-get 
info :buffer)
+                                              (derived-mode-p 'org-mode))
                                         (gptel--stream-convert-markdown->org)))
                    info))
       (if stream
diff --git a/gptel.el b/gptel.el
index a83d2a0b73..10a79f92ff 100644
--- a/gptel.el
+++ b/gptel.el
@@ -727,27 +727,27 @@ Valid JSON unless NO-JSON is t."
 (defun gptel--restore-state ()
   "Restore gptel state when turning on `gptel-mode'."
   (when (buffer-file-name)
-    (pcase major-mode
-      ('org-mode
-       (require 'gptel-org)
-       (gptel-org--restore-state))
-      (_ (when gptel--bounds
-           (mapc (pcase-lambda (`(,beg . ,end))
-                         (put-text-property beg end 'gptel 'response))
-                 gptel--bounds)
-           (message "gptel chat restored."))
-         (when gptel--backend-name
-           (if-let ((backend (alist-get
-                              gptel--backend-name gptel--known-backends
-                              nil nil #'equal)))
-               (setq-local gptel-backend backend)
-             (message
-               (substitute-command-keys
-                (concat
-                 "Could not activate gptel backend \"%s\"!  "
-                 "Switch backends with \\[universal-argument] \\[gptel-send]"
-                 " before using gptel."))
-               gptel--backend-name)))))))
+    (if (derived-mode-p 'org-mode)
+        (progn
+          (require 'gptel-org)
+          (gptel-org--restore-state))
+      (when gptel--bounds
+        (mapc (pcase-lambda (`(,beg . ,end))
+                (put-text-property beg end 'gptel 'response))
+              gptel--bounds)
+        (message "gptel chat restored."))
+      (when gptel--backend-name
+        (if-let ((backend (alist-get
+                           gptel--backend-name gptel--known-backends
+                           nil nil #'equal)))
+            (setq-local gptel-backend backend)
+          (message
+           (substitute-command-keys
+            (concat
+             "Could not activate gptel backend \"%s\"!  "
+             "Switch backends with \\[universal-argument] \\[gptel-send]"
+             " before using gptel."))
+           gptel--backend-name))))))
 
 (defun gptel--save-state ()
   "Write the gptel state to the buffer.
@@ -755,24 +755,24 @@ Valid JSON unless NO-JSON is t."
 This saves chat metadata when writing the buffer to disk.  To
 restore a chat session, turn on `gptel-mode' after opening the
 file."
-  (pcase major-mode
-    ('org-mode
-     (require 'gptel-org)
-     (gptel-org--save-state))
-    (_ (let ((print-escape-newlines t))
-         (save-excursion
-           (save-restriction
-             (add-file-local-variable 'gptel-model gptel-model)
-             (add-file-local-variable 'gptel--backend-name
-                                      (gptel-backend-name gptel-backend))
-             (unless (equal (default-value 'gptel-temperature) 
gptel-temperature)
-               (add-file-local-variable 'gptel-temperature gptel-temperature))
-             (unless (string= (default-value 'gptel--system-message)
-                              gptel--system-message)
-               (add-file-local-variable 'gptel--system-message 
gptel--system-message))
-             (when gptel-max-tokens
-               (add-file-local-variable 'gptel-max-tokens gptel-max-tokens))
-             (add-file-local-variable 'gptel--bounds 
(gptel--get-buffer-bounds))))))))
+  (if (derived-mode-p 'org-mode)
+      (progn
+        (require 'gptel-org)
+        (gptel-org--save-state))
+    (let ((print-escape-newlines t))
+      (save-excursion
+        (save-restriction
+          (add-file-local-variable 'gptel-model gptel-model)
+          (add-file-local-variable 'gptel--backend-name
+                                   (gptel-backend-name gptel-backend))
+          (unless (equal (default-value 'gptel-temperature) gptel-temperature)
+            (add-file-local-variable 'gptel-temperature gptel-temperature))
+          (unless (string= (default-value 'gptel--system-message)
+                           gptel--system-message)
+            (add-file-local-variable 'gptel--system-message 
gptel--system-message))
+          (when gptel-max-tokens
+            (add-file-local-variable 'gptel-max-tokens gptel-max-tokens))
+          (add-file-local-variable 'gptel--bounds 
(gptel--get-buffer-bounds)))))))
 
 
 ;; Minor mode and UI
@@ -790,7 +790,8 @@ file."
     map)
   (if gptel-mode
       (progn
-        (unless (memq major-mode '(org-mode markdown-mode text-mode))
+        (unless (or (derived-mode-p 'org-mode 'markdown-mode)
+                    (eq major-mode 'text-mode))
           (gptel-mode -1)
           (user-error (format "`gptel-mode' is not supported in `%s'." 
major-mode)))
         (add-hook 'before-save-hook #'gptel--save-state nil t)
@@ -1194,9 +1195,9 @@ hook."
 Currently only `org-mode' is handled.
 
 BUFFER is the LLM interaction buffer."
-  (pcase (buffer-local-value 'major-mode buffer)
-    ('org-mode (gptel--convert-markdown->org content))
-    (_ content)))
+  (if (with-current-buffer buffer (derived-mode-p 'org-mode))
+      (gptel--convert-markdown->org content)
+    content))
 
 (defun gptel--url-get-response (info &optional callback)
   "Fetch response to prompt in INFO from the LLM.

Reply via email to