[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: delete-other-frames
From: |
martin rudalics |
Subject: |
Re: delete-other-frames |
Date: |
Wed, 24 Aug 2016 11:06:49 +0200 |
> IMO, amend the code.
[...]
> The latter, I think.
I have two versions to accomplish that: One based on calling
‘next-frame’ exhaustively ...
(defun delete-other-frames (&optional frame)
"Delete all frames on FRAME's terminal, except FRAME.
If FRAME uses another frame's minibuffer, the minibuffer frame is
left untouched. FRAME must be a live frame. FRAME nil or
omitted means use the selected frame."
(interactive)
(unless frame
(setq frame (selected-frame)))
(let ((minibuffer-frame (window-frame (minibuffer-window frame)))
(this (next-frame frame t))
next)
;; In a first round consider minibuffer-less frames only.
(while (not (eq this frame))
(setq next (next-frame this t))
(unless (eq (window-frame (minibuffer-window this)) this)
(delete-frame this))
(setq this next))
;; In a second round consider all remaining frames.
(setq this (next-frame frame t))
(while (not (eq this frame))
(setq next (next-frame this t))
(unless (eq this minibuffer-frame)
(delete-frame this))
(setq this next))))
... and a more conservative one using ‘frame-list’.
(defun delete-other-frames (&optional frame)
"Delete all frames on FRAME's terminal, except FRAME.
If FRAME uses another frame's minibuffer, the minibuffer frame is
left untouched. FRAME must be a live frame. FRAME nil or
omitted means use the selected frame."
(interactive)
(unless frame
(setq frame (selected-frame)))
(let ((terminal (frame-terminal frame))
(minibuffer-frame (window-frame (minibuffer-window frame)))
(frames (frame-list)))
;; Clean up candidate frames.
(dolist (this (prog1 frames (setq frames nil)))
(when (and (eq (frame-terminal this) terminal)
(not (eq this frame))
(not (eq this minibuffer-frame)))
(push this frames)))
;; In a first round consider minibuffer-less frames only.
(dolist (this frames)
(unless (eq (window-frame (minibuffer-window this)) this)
(delete-frame this)))
;; In a second round consider all remaining frames.
(dolist (this frames)
(when (frame-live-p this)
(delete-frame this)))))
If someone sees weaknesses with either of these approaches, please
tell me.
martin
- delete-other-frames, martin rudalics, 2016/08/23
- Re: delete-other-frames, Eli Zaretskii, 2016/08/23
- Re: delete-other-frames,
martin rudalics <=
- Re: delete-other-frames, martin rudalics, 2016/08/25
- Re: delete-other-frames, Eli Zaretskii, 2016/08/25
- Re: delete-other-frames, Richard Stallman, 2016/08/26
- RE: delete-other-frames, Drew Adams, 2016/08/27
- Re: delete-other-frames, Eli Zaretskii, 2016/08/27
- Re: delete-other-frames, Richard Stallman, 2016/08/27
- RE: delete-other-frames, Drew Adams, 2016/08/27
- Re: delete-other-frames, Eli Zaretskii, 2016/08/27