emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/gptel 3af2650342 170/273: gptel-transient: save window sta


From: ELPA Syncer
Subject: [nongnu] elpa/gptel 3af2650342 170/273: gptel-transient: save window state when ediff
Date: Wed, 1 May 2024 10:02:19 -0400 (EDT)

branch: elpa/gptel
commit 3af265034260a35adb310305d363142d874db01e
Author: Karthik Chikmagalur <karthikchikmagalur@gmail.com>
Commit: Karthik Chikmagalur <karthikchikmagalur@gmail.com>

    gptel-transient: save window state when ediff
    
    * gptel-transient.el (gptel--suffix-rewrite-and-ediff): Save
    window configuration and restore it after rewriting+ediff.
---
 gptel-transient.el | 24 +++++++++++++++++-------
 1 file changed, 17 insertions(+), 7 deletions(-)

diff --git a/gptel-transient.el b/gptel-transient.el
index 5fce0956b4..9b2b5ecf14 100644
--- a/gptel-transient.el
+++ b/gptel-transient.el
@@ -613,9 +613,17 @@ This uses the prompts in the variable
   :key "E"
   :description (lambda () (concat (gptel--refactor-or-rewrite) " and Ediff"))
   (interactive (list (transient-args transient-current-command)))
-  (let* ((prompt (buffer-substring-no-properties
+  (letrec ((prompt (buffer-substring-no-properties
                   (region-beginning) (region-end)))
-         (gptel--system-message gptel--rewrite-message))
+           (gptel--system-message gptel--rewrite-message)
+           ;; TODO: Technically we should save the window config at the time
+           ;; `ediff-setup-hook' runs, but this will do for now.
+           (cwc (current-window-configuration))
+           (gptel--ediff-restore
+            (lambda ()
+              (when (window-configuration-p cwc)
+                (set-window-configuration cwc))
+              (remove-hook 'ediff-quit-hook gptel--ediff-restore))))
     (message "Waiting for response... ")
     (gptel-request
      prompt
@@ -630,12 +638,14 @@ This uses the prompts in the variable
                  (buffer-local-value 'major-mode gptel-buffer)))
            (pcase-let ((`(,new-buf ,new-beg ,new-end)
                         (with-current-buffer (get-buffer-create 
"*gptel-rewrite-Region.B-*")
-                          (erase-buffer)
-                          (funcall buffer-mode)
-                          (insert response)
-                          (goto-char (point-min))
-                          (list (current-buffer) (point-min) (point-max)))))
+                          (let ((inhibit-read-only t))
+                            (erase-buffer)
+                            (funcall buffer-mode)
+                            (insert response)
+                            (goto-char (point-min))
+                            (list (current-buffer) (point-min) (point-max))))))
              (require 'ediff)
+             (add-hook 'ediff-quit-hook gptel--ediff-restore)
              (apply
               #'ediff-regions-internal
               (get-buffer (ediff-make-cloned-buffer gptel-buffer "-Region.A-"))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]