Reset 'gnus-current-window-configuration' on edit-form exit.

* lisp/gnus/gnus.el: New variable gnus-prev-cwc.
* lisp/gnus/gnus-art.el (gnus-article-edit-mode):
New local variable gnus-prev-cwc.
(gnus-article-edit-article):  Store original
gnus-current-window-configuration as gnus-prev-cwc.
(gnus-article-edit-done, gnus-article-edit-exit): Restore
gnus-current-window-configuration from gnus-prev-cwc.
* lisp/gnus/gnus-eform.el (gnus-edit-form-mode):
New local variable gnus-prev-cwc.
(gnus-edit-form):  Store original
gnus-current-window-configuration as gnus-prev-cwc.
(gnus-edit-form-done, gnus-edit-form-exit): Restore
gnus-current-window-configuration from gnus-prev-cwc.
This commit is contained in:
Andrew G Cohen 2023-03-09 16:05:31 +08:00
parent 9acfb7662c
commit 2c9ea31999
3 changed files with 20 additions and 7 deletions

View file

@ -7390,6 +7390,7 @@ This is an extended text-mode.
\\{gnus-article-edit-mode-map}"
(make-local-variable 'gnus-article-edit-done-function)
(make-local-variable 'gnus-prev-winconf)
(make-local-variable 'gnus-prev-cwc)
(setq-local font-lock-defaults '(message-font-lock-keywords t))
(setq-local mail-header-separator "")
(setq-local gnus-article-edit-mode t)
@ -7420,7 +7421,8 @@ groups."
(defun gnus-article-edit-article (start-func exit-func &optional quiet)
"Start editing the contents of the current article buffer."
(let ((winconf (current-window-configuration)))
(let ((winconf (current-window-configuration))
(cwc gnus-current-window-configuration))
(set-buffer gnus-article-buffer)
(let ((message-auto-save-directory
;; Don't associate the article buffer with a draft file.
@ -7431,6 +7433,7 @@ groups."
(gnus-configure-windows 'edit-article)
(setq gnus-article-edit-done-function exit-func)
(setq gnus-prev-winconf winconf)
(setq gnus-prev-cwc cwc)
(unless quiet
(gnus-message 6 "C-c C-c to end edits"))))
@ -7440,7 +7443,8 @@ groups."
(let ((func gnus-article-edit-done-function)
(buf (current-buffer))
(start (window-start))
(winconf gnus-prev-winconf))
(winconf gnus-prev-winconf)
(cwc gnus-prev-cwc))
(widen) ;; Widen it in case that users narrowed the buffer.
(funcall func arg)
(set-buffer buf)
@ -7458,6 +7462,7 @@ groups."
(set-text-properties (point-min) (point-max) nil)
(gnus-article-mode)
(set-window-configuration winconf)
(setq gnus-current-window-configuration cwc)
(set-buffer buf)
(set-window-start (get-buffer-window buf) start)
(set-window-point (get-buffer-window buf) (point)))
@ -7479,10 +7484,12 @@ groups."
(erase-buffer)
(if (gnus-buffer-live-p gnus-original-article-buffer)
(insert-buffer-substring gnus-original-article-buffer))
(let ((winconf gnus-prev-winconf))
(let ((winconf gnus-prev-winconf)
(cwc gnus-prev-cwc))
(kill-all-local-variables)
(gnus-article-mode)
(set-window-configuration winconf)
(setq gnus-current-window-configuration cwc)
;; Tippy-toe some to make sure that point remains where it was.
(with-current-buffer curbuf
(set-window-start (get-buffer-window (current-buffer)) window-start)

View file

@ -70,17 +70,20 @@ It is a slightly enhanced `lisp-data-mode'.
(when (gnus-visual-p 'group-menu 'menu)
(gnus-edit-form-make-menu-bar))
(make-local-variable 'gnus-edit-form-done-function)
(make-local-variable 'gnus-prev-winconf))
(make-local-variable 'gnus-prev-winconf)
(make-local-variable 'gnus-prev-cwc))
(defun gnus-edit-form (form documentation exit-func &optional layout)
"Edit FORM in a new buffer.
Call EXIT-FUNC on exit. Display DOCUMENTATION in the beginning
of the buffer.
The optional LAYOUT overrides the `edit-form' window layout."
(let ((winconf (current-window-configuration)))
(let ((winconf (current-window-configuration))
(cwc gnus-current-window-configuration))
(set-buffer (gnus-get-buffer-create gnus-edit-form-buffer))
(gnus-configure-windows (or layout 'edit-form))
(gnus-edit-form-mode)
(setq gnus-prev-cwc cwc)
(setq gnus-prev-winconf winconf)
(setq gnus-edit-form-done-function exit-func)
(erase-buffer)
@ -113,9 +116,11 @@ The optional LAYOUT overrides the `edit-form' window layout."
(defun gnus-edit-form-exit ()
"Kill the current buffer."
(interactive nil gnus-edit-form-mode)
(let ((winconf gnus-prev-winconf))
(let ((winconf gnus-prev-winconf)
(cwc gnus-prev-cwc))
(kill-buffer (current-buffer))
(set-window-configuration winconf)))
(set-window-configuration winconf)
(setq gnus-current-window-configuration cwc)))
(provide 'gnus-eform)

View file

@ -2445,6 +2445,7 @@ are always t.")
;; Save window configuration.
(defvar gnus-prev-winconf nil)
(defvar gnus-prev-cwc nil)
(defvar gnus-reffed-article-number nil)