summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Whitton <spwhitton@spwhitton.name>2024-03-30 21:51:44 +0800
committerSean Whitton <spwhitton@spwhitton.name>2024-03-30 21:51:44 +0800
commit387f0ea016747eb41203c20ec8a109fd23c6e123 (patch)
tree676a3507492c5ba57a2e84d6fa1f7209e8b241d3
parent0ce54e6590ff697e1fb44f5684d0ab3e90160d12 (diff)
downloaddotfiles-387f0ea016747eb41203c20ec8a109fd23c6e123.tar.gz
exclude Gnus summary & article splits from toggling
-rw-r--r--.emacs.d/init.el70
1 files changed, 37 insertions, 33 deletions
diff --git a/.emacs.d/init.el b/.emacs.d/init.el
index 4a0c7daf..15ecc557 100644
--- a/.emacs.d/init.el
+++ b/.emacs.d/init.el
@@ -2179,39 +2179,43 @@ Useful after resizing the frame."
(frame-size-changed-p frame)
(= (count-windows nil frame) 2))
(with-selected-frame frame
- (let ((width (frame-width))
- (this-edges (window-edges (selected-window)))
- (next-edges (window-edges (next-window))))
- (when (or (and (< width split-width-threshold)
- (/= (car this-edges) (car next-edges)))
- (and (>= width split-width-threshold)
- (/= (cadr this-edges) (cadr next-edges))))
- (cl-flet ((window-info (window)
- (cons (window-buffer window)
- (cons (window-prev-buffers window)
- (window-next-buffers window))))
- (set-window-info (window info)
- (set-window-buffer window (car info))
- (set-window-prev-buffers window (cadr info))
- (set-window-next-buffers window (cddr info))))
- (let ((this-info (window-info (selected-window)))
- (next-info (window-info (next-window))))
- ;; Ensure we start with a fresh window.
- (split-window)
- (other-window 1)
- (delete-other-windows)
-
- (if (and (<= (car this-edges) (car next-edges))
- (<= (cadr this-edges) (cadr next-edges)))
- ;; Want to use `pop-to-buffer' for the second window s.t. my
- ;; rule for REPLs in `display-buffer-alist' takes effect.
- (progn (set-window-info (selected-window) this-info)
- (save-selected-window
- (pop-to-buffer (car next-info))
- (set-window-info (selected-window) next-info)))
- (set-window-info (selected-window) next-info)
- (pop-to-buffer (car this-info))
- (set-window-info (selected-window) this-info)))))))))
+ (cl-labels ((toggleable-window-p (window)
+ (with-current-buffer (window-buffer window)
+ (not (derived-mode-p 'gnus-summary-mode))))
+ (window-info (window)
+ (and (toggleable-window-p window)
+ (cons (window-buffer window)
+ (cons (window-prev-buffers window)
+ (window-next-buffers window)))))
+ (set-window-info (window info)
+ (set-window-buffer window (car info))
+ (set-window-prev-buffers window (cadr info))
+ (set-window-next-buffers window (cddr info))))
+ (when-let* ((this-info (window-info (selected-window)))
+ (next-info (window-info (next-window)))
+ (width (frame-width))
+ (this-edges (window-edges (selected-window)))
+ (next-edges (window-edges (next-window))))
+ (when (or (and (< width split-width-threshold)
+ (/= (car this-edges) (car next-edges)))
+ (and (>= width split-width-threshold)
+ (/= (cadr this-edges) (cadr next-edges))))
+ ;; Ensure we start with a fresh window.
+ (split-window)
+ (other-window 1)
+ (delete-other-windows)
+
+ (if (and (<= (car this-edges) (car next-edges))
+ (<= (cadr this-edges) (cadr next-edges)))
+ ;; Want to use `pop-to-buffer' for the second window s.t. my
+ ;; rule for REPLs in `display-buffer-alist' takes effect.
+ (progn (set-window-info (selected-window) this-info)
+ (save-selected-window
+ (pop-to-buffer (car next-info))
+ (set-window-info (selected-window) next-info)))
+ (set-window-info (selected-window) next-info)
+ (pop-to-buffer (car this-info))
+ (set-window-info (selected-window) this-info))))))))
(add-to-list 'window-size-change-functions
#'spw/maybe-toggle-split-after-resize)