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.