From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: martin rudalics Newsgroups: gmane.emacs.devel Subject: Re: delete-other-frames Date: Wed, 24 Aug 2016 11:06:49 +0200 Message-ID: <57BD63A9.8040502@gmx.at> References: <57BC072F.9070704@gmx.at> <83k2f7fugv.fsf@gnu.org> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable X-Trace: blaine.gmane.org 1472029639 29925 195.159.176.226 (24 Aug 2016 09:07:19 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Wed, 24 Aug 2016 09:07:19 +0000 (UTC) Cc: emacs-devel@gnu.org To: Eli Zaretskii Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Wed Aug 24 11:07:16 2016 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bcU9T-0007SJ-8c for ged-emacs-devel@m.gmane.org; Wed, 24 Aug 2016 11:07:15 +0200 Original-Received: from localhost ([::1]:50279 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bcU9Q-0003D9-GV for ged-emacs-devel@m.gmane.org; Wed, 24 Aug 2016 05:07:12 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:54098) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bcU9K-0003D0-7R for emacs-devel@gnu.org; Wed, 24 Aug 2016 05:07:07 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bcU9G-0007cf-5f for emacs-devel@gnu.org; Wed, 24 Aug 2016 05:07:06 -0400 Original-Received: from mout.gmx.net ([212.227.15.15]:55815) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bcU9F-0007a0-RQ; Wed, 24 Aug 2016 05:07:02 -0400 Original-Received: from [192.168.1.100] ([212.95.7.52]) by mail.gmx.com (mrgmx001) with ESMTPSA (Nemesis) id 0Lx8vJ-1b5Grj3NqT-016fKp; Wed, 24 Aug 2016 11:06:58 +0200 In-Reply-To: <83k2f7fugv.fsf@gnu.org> X-Provags-ID: V03:K0:a0C3QAQjo/LpGEdosGmvCjZf6wEi4sECt3zB3fhWziw38hwVnWC aGkonpQnOHYOUSvz8wXtiSGx05C6PZs89q1anPosL8PRuh7uap4HrdP1c2zPbRhu46leVgS xm5QE8RmQv0spLpCd3Q7Kej+tPK/FesG9HsEDy3rqDun79Xo50wTnymHA8h9lW4HJN89Ak4 AZAqDD/vClFiiof7tjsHA== X-UI-Out-Filterresults: notjunk:1;V01:K0:Fpa7uTMtdgk=:xmglgBCBd5u6rHwMVhKldr 94UJzzwOx9fCN5H3HOOkFncfXH8N3aDFURFUUjvsptuepa03ZLzmftxgS6NuEM9ehejz1VL1S YnHVZ3GnQv8BRMuiI/kiCBivwz4/o54O8C7EZcBZwzzKNppoxDG8P5cW+eovt2IjS1IFx3JnC 1rpp19svpC5RIGzcQ8okaFY+wEt0udD7QPG7IoXQjebhihIL0FswutNXeA6+IqMhJm6Ub6Z1d iKeX3St5a8HV5jtDxjwWUBfH/ZJ0oaGDxOd6qs/8M/Sj5E6fYoIjbauuHzQLpA0ixbYe4px03 2/5p+fN1i9TWOwzhtVSVopYoMd9mL4mIzrRD4F4hqvFtvotrd1sy4aWbJECkZ9OBpqdlUFL/I ZPPZGe7i0KA1qZoBTCZXgeqz9gmWIF69Fy+COTHtMzxQjtewf7ffa20XRepI6SWcNA3365Q9F 0XVztz6lCu345UM0cMmvfg1vKIO2eHH2Y0ku1V1E40GwF6x/J4EaTDBgJT/dnmE5YBvUFx9D1 5I0Zb3Bt3zwI+LUEaUPiazMuBMcJTLYUUj6oHmQCsAyhM+3xINvRMNindW1rTMXddFH9P4hP5 kdfvjEFloXqBxiroGoYcKBVHs+8CpnIzeB4vd+yuxundsNO+0KUGG1AfYDz4tXkXoNXmU5oUA q99YffPZQMKelNC2C6w+rlF5WvP7wXqT3NqGA9isdsf7FMFaBkGMlRXKLypuyWGSOuQD1m4Bb 2tVbbGcUsqbbpU+J6FDF3bOyy+fwl2MyeqJmumYU16EPPpC+vODb0z5zBT6BD+QJuP7hf2UN X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 212.227.15.15 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:206777 Archived-At: > IMO, amend the code. [...] > The latter, I think. I have two versions to accomplish that: One based on calling =E2=80=98next-frame=E2=80=99 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)))) =2E.. and a more conservative one using =E2=80=98frame-list=E2=80=99. (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