From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Juri Linkov Newsgroups: gmane.emacs.bugs Subject: bug#51883: 29.0.50; Command to get accidentally deleted frames back Date: Fri, 14 Jan 2022 10:12:25 +0200 Organization: LINKOV.NET Message-ID: <861r1aoi9i.fsf@mail.linkov.net> References: <87czn1gfb1.fsf@web.de> <227d35a5bcbeda91dd8b@heytings.org> <83fsrhztvn.fsf@gnu.org> <87lf19g529.fsf@web.de> <838rx9zs9r.fsf@gnu.org> <87h7bxg2d8.fsf@web.de> <835ysdzq4s.fsf@gnu.org> <87czmlg1rz.fsf@web.de> <227d35a5bc25a5f57453@heytings.org> <87zgppekxe.fsf@web.de> <227d35a5bcdae0a85f4d@heytings.org> <87v90dekii.fsf@web.de> <227d35a5bc14f7b3c75c@heytings.org> <87r1b1ejif.fsf@web.de> <227d35a5bc16d5c159ac@heytings.org> <87fsrg8ep4.fsf@web.de> <87bl22n7ut.fsf@web.de> <877dcqn5kx.fsf@web.de> <86h7bur9yi.fsf@mail.linkov.net> <864k68ujbx.fsf@mail.linkov.net> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="24814"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (x86_64-pc-linux-gnu) Cc: Gregory Heytings , 51883@debbugs.gnu.org To: Michael Heerdegen Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Fri Jan 14 09:20:44 2022 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1n8HpD-0006JZ-Ki for geb-bug-gnu-emacs@m.gmane-mx.org; Fri, 14 Jan 2022 09:20:43 +0100 Original-Received: from localhost ([::1]:50232 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n8HpC-0006vW-2A for geb-bug-gnu-emacs@m.gmane-mx.org; Fri, 14 Jan 2022 03:20:42 -0500 Original-Received: from eggs.gnu.org ([209.51.188.92]:34872) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n8HoY-0006sh-Uy for bug-gnu-emacs@gnu.org; Fri, 14 Jan 2022 03:20:02 -0500 Original-Received: from debbugs.gnu.org ([209.51.188.43]:42533) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1n8HoY-0002lr-Ji for bug-gnu-emacs@gnu.org; Fri, 14 Jan 2022 03:20:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1n8HoY-0006gj-Eb for bug-gnu-emacs@gnu.org; Fri, 14 Jan 2022 03:20:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Juri Linkov Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 14 Jan 2022 08:20:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 51883 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 51883-submit@debbugs.gnu.org id=B51883.164214838925655 (code B ref 51883); Fri, 14 Jan 2022 08:20:02 +0000 Original-Received: (at 51883) by debbugs.gnu.org; 14 Jan 2022 08:19:49 +0000 Original-Received: from localhost ([127.0.0.1]:35430 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1n8HoL-0006fh-8y for submit@debbugs.gnu.org; Fri, 14 Jan 2022 03:19:49 -0500 Original-Received: from relay1-d.mail.gandi.net ([217.70.183.193]:48041) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1n8HoF-0006fM-0Q for 51883@debbugs.gnu.org; Fri, 14 Jan 2022 03:19:47 -0500 Original-Received: (Authenticated sender: juri@linkov.net) by relay1-d.mail.gandi.net (Postfix) with ESMTPSA id 7320124000A; Fri, 14 Jan 2022 08:19:34 +0000 (UTC) In-Reply-To: <864k68ujbx.fsf@mail.linkov.net> (Juri Linkov's message of "Thu, 13 Jan 2022 10:32:34 +0200") X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:224161 Archived-At: --=-=-= Content-Type: text/plain >>> Oh - and the tab-bar - Juri had mentioned it - do we have to do anything >>> special about it? In my tests your patch restored the tab-bar correctly >>> I think. >> >> I'm waiting when the Gregory's patch will be pushed to master >> to start testing the tab-bar with it :-) > > I guess Gregory has no access to the repo, so I've tested that > restoring the tab-bar works correctly, and pushed to master. I tried to use this, but undelete-frame-mode in the File menu makes no sense: when you mistakenly deleted a frame, you want to undelete it immediately, so you open the File menu, and see the message "No way, you can't undelete the deleted frame, because you were careless and not enabled a special mode". So the most useful case for this feature is to get the accidentally deleted frame back, and it fails to do this. Instead, it allows undeleting 16 frames in a special mode. Is there really a human that can delete 16 frames, and then remember what was on the 16th frame back? Rereading this thread indicates that the only concern about enabling this by default was the memory footprint for remembering 16 frames. OTOH, this feature is really useful for remembering 1 frame. So this is what should be enabled by default: --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=undelete-frame-max.patch diff --git a/lisp/frame.el b/lisp/frame.el index 599ffe591a..b82a4ae26f 100644 --- a/lisp/frame.el +++ b/lisp/frame.el @@ -2529,6 +2529,12 @@ delete-other-frames (if iconify (iconify-frame this) (delete-frame this))) (setq this next)))) +(defcustom undelete-frame-max 1 + "Maximum number of frames deleted with `delete-frame'." + :type 'integer + :group 'frames + :version "29.1") + (eval-when-compile (require 'frameset)) (defvar undelete-frame--deleted-frames nil @@ -2536,7 +2542,7 @@ undelete-frame--deleted-frames (defun undelete-frame--handle-delete-frame (frame) "Save the configuration of frames deleted with `delete-frame'. -Only the 16 most recently deleted frames are saved." +Only the `undelete-frame-max' most recently deleted frames are saved." (when (frame-live-p frame) (setq undelete-frame--deleted-frames (cons @@ -2555,26 +2561,18 @@ undelete-frame--handle-delete-frame (cons '(display . :never) frameset-filter-alist)))) undelete-frame--deleted-frames)) - (if (> (length undelete-frame--deleted-frames) 16) + (if (> (length undelete-frame--deleted-frames) undelete-frame-max) (setq undelete-frame--deleted-frames (butlast undelete-frame--deleted-frames))))) -(define-minor-mode undelete-frame-mode - "Enable the `undelete-frame' command." - :group 'frames - :global t - (if undelete-frame-mode - (add-hook 'delete-frame-functions - #'undelete-frame--handle-delete-frame -75) - (remove-hook 'delete-frame-functions - #'undelete-frame--handle-delete-frame) - (setq undelete-frame--deleted-frames nil))) +(add-hook 'delete-frame-functions + #'undelete-frame--handle-delete-frame -75) (defun undelete-frame (&optional arg) "Undelete a frame deleted with `delete-frame'. Without a prefix argument, undelete the most recently deleted frame. -With a numerical prefix argument ARG between 1 and 16, where 1 is +With a numerical prefix argument ARG between 1 and `undelete-frame-max', where 1 is most recently deleted frame, undelete the ARGth deleted frame. When called from Lisp, returns the new frame." (interactive "P") @@ -2586,7 +2584,7 @@ undelete-frame (frames (frame-list)) (frameset (nth (1- number) undelete-frame--deleted-frames)) (graphic (display-graphic-p))) - (if (not (<= 1 number 16)) + (if (not (<= 1 number undelete-frame-max)) (user-error "%d is not a valid deleted frame number argument" number) (if (not frameset) --=-=-=--