gptel-transient: save window state when ediff
* gptel-transient.el (gptel--suffix-rewrite-and-ediff): Save window configuration and restore it after rewriting+ediff.
This commit is contained in:
parent
d5b10c3d6d
commit
3af2650342
1 changed files with 17 additions and 7 deletions
|
@ -613,9 +613,17 @@ This uses the prompts in the variable
|
||||||
:key "E"
|
:key "E"
|
||||||
:description (lambda () (concat (gptel--refactor-or-rewrite) " and Ediff"))
|
:description (lambda () (concat (gptel--refactor-or-rewrite) " and Ediff"))
|
||||||
(interactive (list (transient-args transient-current-command)))
|
(interactive (list (transient-args transient-current-command)))
|
||||||
(let* ((prompt (buffer-substring-no-properties
|
(letrec ((prompt (buffer-substring-no-properties
|
||||||
(region-beginning) (region-end)))
|
(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... ")
|
(message "Waiting for response... ")
|
||||||
(gptel-request
|
(gptel-request
|
||||||
prompt
|
prompt
|
||||||
|
@ -630,12 +638,14 @@ This uses the prompts in the variable
|
||||||
(buffer-local-value 'major-mode gptel-buffer)))
|
(buffer-local-value 'major-mode gptel-buffer)))
|
||||||
(pcase-let ((`(,new-buf ,new-beg ,new-end)
|
(pcase-let ((`(,new-buf ,new-beg ,new-end)
|
||||||
(with-current-buffer (get-buffer-create "*gptel-rewrite-Region.B-*")
|
(with-current-buffer (get-buffer-create "*gptel-rewrite-Region.B-*")
|
||||||
(erase-buffer)
|
(let ((inhibit-read-only t))
|
||||||
(funcall buffer-mode)
|
(erase-buffer)
|
||||||
(insert response)
|
(funcall buffer-mode)
|
||||||
(goto-char (point-min))
|
(insert response)
|
||||||
(list (current-buffer) (point-min) (point-max)))))
|
(goto-char (point-min))
|
||||||
|
(list (current-buffer) (point-min) (point-max))))))
|
||||||
(require 'ediff)
|
(require 'ediff)
|
||||||
|
(add-hook 'ediff-quit-hook gptel--ediff-restore)
|
||||||
(apply
|
(apply
|
||||||
#'ediff-regions-internal
|
#'ediff-regions-internal
|
||||||
(get-buffer (ediff-make-cloned-buffer gptel-buffer "-Region.A-"))
|
(get-buffer (ediff-make-cloned-buffer gptel-buffer "-Region.A-"))
|
||||||
|
|
Loading…
Add table
Reference in a new issue