summaryrefslogtreecommitdiff
path: root/lisp/gnus/gnus-win.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/gnus/gnus-win.el')
-rw-r--r--lisp/gnus/gnus-win.el59
1 files changed, 26 insertions, 33 deletions
diff --git a/lisp/gnus/gnus-win.el b/lisp/gnus/gnus-win.el
index 4df6b039a4c..e6906e99bb2 100644
--- a/lisp/gnus/gnus-win.el
+++ b/lisp/gnus/gnus-win.el
@@ -24,10 +24,11 @@
;;; Code:
-(eval-when-compile (require 'cl))
+(eval-when-compile (require 'cl-lib))
(require 'gnus)
(require 'gnus-util)
+(require 'seq)
(defgroup gnus-windows nil
"Window configuration."
@@ -269,7 +270,7 @@ See the Gnus manual for an explanation of the syntax used.")
(error "Invalid buffer type: %s" type))
(let ((buf (gnus-get-buffer-create
(gnus-window-to-buffer-helper buffer))))
- (when (buffer-name buf)
+ (when (buffer-live-p buf)
(cond
((eq buf (window-buffer (selected-window)))
(set-buffer buf))
@@ -284,7 +285,7 @@ See the Gnus manual for an explanation of the syntax used.")
;; from a hard-dedicated frame, it creates (and
;; configures) a new frame, leaving the dedicated frame alone.
(pop-to-buffer buf))
- (t (switch-to-buffer buf)))))
+ (t (pop-to-buffer-same-window buf)))))
(when (memq 'frame-focus split)
(setq gnus-window-frame-focus window))
;; We return the window if it has the `point' spec.
@@ -312,7 +313,7 @@ See the Gnus manual for an explanation of the syntax used.")
;; Select the frame in question and do more splits there.
(select-frame frame)
(setq fresult (or (gnus-configure-frame (elt subs i)) fresult))
- (incf i))
+ (cl-incf i))
;; Select the frame that has the selected buffer.
(when fresult
(select-frame (window-frame fresult)))))
@@ -344,7 +345,7 @@ See the Gnus manual for an explanation of the syntax used.")
((eq type 'vertical)
(setq s (max s window-min-height))))
(setcar (cdar comp-subs) s)
- (incf total s)))
+ (cl-incf total s)))
;; Take care of the "1.0" spec.
(if rest
(setcar (cdr rest) (- len total))
@@ -429,20 +430,13 @@ See the Gnus manual for an explanation of the syntax used.")
(defun gnus-delete-windows-in-gnusey-frames ()
"Do a `delete-other-windows' in all frames that have Gnus windows."
(let ((buffers (gnus-buffers)))
- (mapcar
- (lambda (frame)
- (unless (eq (cdr (assq 'minibuffer
- (frame-parameters frame)))
- 'only)
- (select-frame frame)
- (let (do-delete)
- (walk-windows
- (lambda (window)
- (when (memq (window-buffer window) buffers)
- (setq do-delete t))))
- (when do-delete
- (delete-other-windows)))))
- (frame-list))))
+ (dolist (frame (frame-list))
+ (unless (eq (frame-parameter frame 'minibuffer) 'only)
+ (select-frame frame)
+ (when (get-window-with-predicate
+ (lambda (window)
+ (memq (window-buffer window) buffers)))
+ (delete-other-windows))))))
(defun gnus-all-windows-visible-p (split)
"Say whether all buffers in SPLIT are currently visible.
@@ -490,11 +484,10 @@ should have point."
(nth 1 (window-edges window)))
(defun gnus-remove-some-windows ()
- (let ((buffers (gnus-buffers))
- buf bufs lowest-buf lowest)
+ (let (bufs lowest-buf lowest)
(save-excursion
;; Remove windows on all known Gnus buffers.
- (while (setq buf (pop buffers))
+ (dolist (buf (gnus-buffers))
(when (get-buffer-window buf)
(push buf bufs)
(pop-to-buffer buf)
@@ -505,19 +498,19 @@ should have point."
(when lowest-buf
(pop-to-buffer lowest-buf)
(set-buffer nntp-server-buffer))
- (mapcar (lambda (b) (delete-windows-on b t))
- (delq lowest-buf bufs)))))
+ (dolist (b (delq lowest-buf bufs))
+ (delete-windows-on b t)))))
(defun gnus-get-buffer-window (buffer &optional frame)
- (cond ((and (null gnus-use-frames-on-any-display)
- (memq frame '(t 0 visible)))
- (car
- (let ((frames (frames-on-display-list)))
- (gnus-remove-if (lambda (win) (not (memq (window-frame win)
- frames)))
- (get-buffer-window-list buffer nil frame)))))
- (t
- (get-buffer-window buffer frame))))
+ "Return a window currently displaying BUFFER, or nil if none.
+Like `get-buffer-window', but respecting
+`gnus-use-frames-on-any-display'."
+ (if (and (not gnus-use-frames-on-any-display)
+ (memq frame '(t 0 visible)))
+ (let ((frames (frames-on-display-list)))
+ (seq-find (lambda (win) (memq (window-frame win) frames))
+ (get-buffer-window-list buffer nil frame)))
+ (get-buffer-window buffer frame)))
(provide 'gnus-win)