Commit e1a45c26 authored by Eric Abrahamsen's avatar Eric Abrahamsen

New option for making Gnus window layouts atomic

* lisp/gnus/gnus-win.el (gnus-use-atomic-windows): New boolean
  customization option.
  (gnus-configure-windows): When removing old window layouts, check
  for and remove atomicity.
  (gnus-configure-windows): When gnus-use-atomic-windows is non-nil,
  make Gnus window layouts atomic.
* doc/misc/gnus.texi (Window Layout): Document.
parent 14e7c01f
Pipeline #3249 passed with stage
in 53 minutes and 46 seconds
......@@ -22923,6 +22923,14 @@ window is displayed vertically next to another window, you may also want
to fiddle with @code{gnus-tree-minimize-window} to avoid having the
windows resized.
Lastly, it's possible to make Gnus window layouts ``atomic''
(@xref{Atomic Windows, , Atomic Windows, elisp, The GNU Emacs Lisp
Reference Manual}) by setting @code{gnus-use-atomic-windows} to
@code{t}. This will ensure that pop-up buffers (e.g. help or
completion buffers), will appear below or to the side of the entire
Gnus window layout and not, for example, squashed between the summary
and article buffers.
@subsection Window Configuration Names
Here's a list of most of the currently known window configurations,
......@@ -1031,6 +1031,11 @@ Of course it will still find it if you have it in '~/.ecompleterc'.
** Gnus
+++
*** New option 'gnus-use-atomic-windows' makes Gnus window layouts
atomic. See the "Atomic Windows" section of the Elisp manual for
details.
+++
*** There's a new value for 'gnus-article-date-headers',
'combined-local-lapsed', which will show both the time (in the local
......
......@@ -39,6 +39,11 @@
:group 'gnus-windows
:type 'boolean)
(defcustom gnus-use-atomic-windows t
"If non-nil, Gnus' window compositions will be atomic."
:type 'boolean
:version "27.1")
(defcustom gnus-window-min-width 2
"Minimum width of Gnus buffers."
:group 'gnus-windows
......@@ -402,6 +407,15 @@ See the Gnus manual for an explanation of the syntax used.")
(unless (gnus-buffer-live-p nntp-server-buffer)
(nnheader-init-server-buffer))
;; Remove all 'window-atom parameters, as we're going to blast
;; and recreate the window layout.
(when (window-parameter nil 'window-atom)
(let ((root (window-atom-root)))
(walk-window-subtree
(lambda (win)
(set-window-parameter win 'window-atom nil))
root t)))
;; Either remove all windows or just remove all Gnus windows.
(let ((frame (selected-frame)))
(unwind-protect
......@@ -423,6 +437,13 @@ See the Gnus manual for an explanation of the syntax used.")
(set-buffer nntp-server-buffer)
(gnus-configure-frame split)
(run-hooks 'gnus-configure-windows-hook)
;; If we're using atomic windows, and the current frame has
;; multiple windows, make them atomic.
(when (and gnus-use-atomic-windows
(window-parent (selected-window)))
(window-make-atom (window-parent (selected-window))))
(when gnus-window-frame-focus
(select-frame-set-input-focus
(window-frame gnus-window-frame-focus)))))))))
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment