From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: martin rudalics Newsgroups: gmane.emacs.bugs Subject: bug#45688: 28.0.50; New action for display-buffer? Date: Mon, 11 Jan 2021 19:23:23 +0100 Message-ID: References: <87im8a1dff.fsf@gnus.org> <83y2h6133r.fsf@gnu.org> <8735ze0yp7.fsf@gnus.org> <83o8i20w1f.fsf@gnu.org> <87lfd5yny9.fsf@gnus.org> <87o8i03gem.fsf@gnus.org> <528b7d6b-403a-ffef-b0a0-4a0b6d92bec8@gmx.at> <87turpvxv0.fsf@gnus.org> <87turnh6u8.fsf@gnus.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------F31D7A4D2398D283E065F2C5" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="24960"; mail-complaints-to="usenet@ciao.gmane.io" Cc: 45688@debbugs.gnu.org To: Lars Ingebrigtsen Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Mon Jan 11 19:24:18 2021 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 1kz1rT-0006Ig-Um for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 11 Jan 2021 19:24:16 +0100 Original-Received: from localhost ([::1]:57246 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz1rS-0003Jy-T7 for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 11 Jan 2021 13:24:14 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:38914) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz1rG-0003Hr-Ej for bug-gnu-emacs@gnu.org; Mon, 11 Jan 2021 13:24:03 -0500 Original-Received: from debbugs.gnu.org ([209.51.188.43]:46680) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz1rG-0001Sq-7c for bug-gnu-emacs@gnu.org; Mon, 11 Jan 2021 13:24:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1kz1rG-0001VZ-4C for bug-gnu-emacs@gnu.org; Mon, 11 Jan 2021 13:24:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: martin rudalics Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 11 Jan 2021 18:24:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 45688 X-GNU-PR-Package: emacs Original-Received: via spool by 45688-submit@debbugs.gnu.org id=B45688.16103894185763 (code B ref 45688); Mon, 11 Jan 2021 18:24:02 +0000 Original-Received: (at 45688) by debbugs.gnu.org; 11 Jan 2021 18:23:38 +0000 Original-Received: from localhost ([127.0.0.1]:58226 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kz1qr-0001Ut-UY for submit@debbugs.gnu.org; Mon, 11 Jan 2021 13:23:38 -0500 Original-Received: from mout.gmx.net ([212.227.17.22]:42103) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kz1qp-0001Uc-84 for 45688@debbugs.gnu.org; Mon, 11 Jan 2021 13:23:37 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1610389408; bh=mgGHafDVz5ejemjkKMFhVHVS9y26wBApw2AfsMTxXKc=; h=X-UI-Sender-Class:Subject:To:Cc:References:From:Date:In-Reply-To; b=Y+1P1LdoQgq6XKKd+H7/3OdhG7d0ZXvbDDK6E3KACykL3yMv1o1sci2SFj16ECSCM y7r6dN34VZhXVHfDui13EPKi8XTyNdgonwkvYIaqwzgKfckLqQH/LR5w/nq/zN5ePU mgp+FWQNmj0nXTR9AHVsleiWpg4xw5NfnvzoDr1g= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Original-Received: from [192.168.1.100] ([212.95.5.67]) by mail.gmx.com (mrgmx104 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MSc1B-1kWogL1CPp-00StCY; Mon, 11 Jan 2021 19:23:28 +0100 In-Reply-To: <87turnh6u8.fsf@gnus.org> Content-Language: en-US X-Provags-ID: V03:K1:1xr8veRxZbc2tADHeSrpYSrIT3aZlTzXIAumlEj2Z1s98NvvmX9 ATwplSpkedvo1YGTYNCvo7jK791a+nawvFu7rIjH5AWCQuYZQV6MMzK9ttMIcRgTw90YmQj srgFEsLMcJw0bVlHFGKmV0trJsR7+rSkR9HD2BqUVELcOdZKRklaxdvYRU7s//NBrJr57aI ODAWpaTYs3B7Um//X5ufg== X-UI-Out-Filterresults: notjunk:1;V03:K0:HtmXS1Mg8+4=:7JLW/v5EInF6Mw8dkk156Z L2X1HWpqQMsvNthRaFvN5CSf2YLVjafjq9uyvwP4Owq5DD6N5l1TDZZ9iZjW3Cx4hH1Gc9lYi q9/zBuhrp11d4BX1csDQ2dzAHrxF7iBoMKlG7SA+BYPxdPgBT/izd+MZWZvSv/hoxt3fcP/Lv K5p9ms2HJ7DfdziJgEYFDn447aLaQVT1sxqL9k3p8838gbsa60pQoS1V2LlQ5o+ieu+ibNBOq wbJgsa8ASA5BS5l86683KAFjy8XbrtrkWyu7tsL3AEEl70cZsB7bqVUhmg5vB27LZD9zr19b3 cl+jHP94B8ZhREr2oymtABevXYaFhJiZ8AOpFKe4q87Nt2D9YVNzUrWz2uvDQtSVQzOEMd8ke DcbvK7hUONpLeCRrdJdazGMovMTGB5Km+XoOFRUWx5d4qGWvkbf5KoGBGHbwlh7LRcz4wqacY 1sylrNd/CMRgMTHgEqkSg6v1GrrXnZl4rvuOGYLXUjf/ixDbSWYtfuCzOv3waoWzjFaXz9we3 Wrn9rJLdEIsJkvushnDrPyf/kc1phx/4gS5+6VkwxCycBjVVn9mZS5n7SEf+TdjZc34waVUcS Ym8HDGLQtITWaqJA1Kw94FF0kVFdIMQyPXWs2iexJcqLQfKvPpg7JgzJUHo80RJf76HFFZrs4 MPX/51cMiOoIZwxrWritu2noGWEM4Up9XOwsNXgHDIvr3xdCmWlXfqC8CA7uSOrGUy8+X+DKN 2/GbKN5NUCkMXBrDk0tIpFKg0MW259JjdDD0pAWwLnKbWQrIIEdhQO/B04uML4XfNQsaTX+P 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:197731 Archived-At: This is a multi-part message in MIME format. --------------F31D7A4D2398D283E065F2C5 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit > I put some messaging in that code, and it is indeed that bit that does > the resizing. > > Here's a reproducer from emacs -Q: > > (progn > (setq display-buffer-alist '((".*" display-buffer-use-least-recent-window))) > (pop-to-buffer "file1") > (pop-to-buffer "file2") > (split-window-below) > (pop-to-buffer "file3")) > > I end up with the following, and file3 in an oddly large window. So you have been splicing in a 'split-window-below' between those calls. Why didn't you tell me before? 'split-window-below' copies the 'quit-restore' parameter to the new window and that's what you get. Let's try to clean up the height value when copying the 'quit-restore' parameter as attached. martin --------------F31D7A4D2398D283E065F2C5 Content-Type: text/x-patch; name="split-window-quit-restore.diff" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="split-window-quit-restore.diff" diff --git a/lisp/window.el b/lisp/window.el index a6cdd4dec2..8651d7502f 100644 =2D-- a/lisp/window.el +++ b/lisp/window.el @@ -5528,6 +5528,24 @@ split-window-keep-point :type 'boolean :group 'windows) +(defun window--split-window-quit-restore (old-window new-window) + "Copy 'quit-restore' parameter to new window after splitting. +OLD-WINDOW is the window that was split, NEW-WINDOW is the new +window. This cleans up any height value that could be used to +restore the old height of NEW-WINDOW in a later invocation of +`display-buffer'." + (let* ((quit-restore (window-parameter old-window 'quit-restore)) + (quad (nth 1 quit-restore))) + (when quit-restore + (when (and (listp quad) (integerp (nth 3 quad))) + ;; nth 3 of quad is the old-window height of OLD-WINDOW. This + ;; value is meaningless in NEW-WINDOW so set it to the present + ;; height of NEW-WINDOW. + (setq quit-restore (copy-tree quit-restore)) + (rplaca (cdddr (nth 1 quit-restore)) (window-total-height new-win= dow))) + + (set-window-parameter new-window 'quit-restore quit-restore)))) + (defun split-window-below (&optional size) "Split the selected window into two windows, one above the other. The selected window is above. The newly split-off window is @@ -5575,9 +5593,7 @@ split-window-below (set-window-point new-window old-point) (select-window new-window)))) ;; Always copy quit-restore parameter in interactive use. - (let ((quit-restore (window-parameter old-window 'quit-restore))) - (when quit-restore - (set-window-parameter new-window 'quit-restore quit-restore))) + (window--split-window-quit-restore old-window new-window) new-window)) (defalias 'split-window-vertically 'split-window-below) @@ -5604,9 +5620,7 @@ split-window-right (error "Size of new window too small")) (setq new-window (split-window nil size t)) ;; Always copy quit-restore parameter in interactive use. - (let ((quit-restore (window-parameter old-window 'quit-restore))) - (when quit-restore - (set-window-parameter new-window 'quit-restore quit-restore))) + (window--split-window-quit-restore old-window new-window) new-window)) (defalias 'split-window-horizontally 'split-window-right) --------------F31D7A4D2398D283E065F2C5--