unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: martin rudalics <rudalics@gmx.at>
To: Lars Ingebrigtsen <larsi@gnus.org>
Cc: 45688@debbugs.gnu.org
Subject: bug#45688: 28.0.50; New action for display-buffer?
Date: Mon, 11 Jan 2021 19:23:23 +0100	[thread overview]
Message-ID: <b9059f39-b3af-3ec7-c0ee-d1a493a3a2f5@gmx.at> (raw)
In-Reply-To: <87turnh6u8.fsf@gnus.org>

[-- Attachment #1: Type: text/plain, Size: 726 bytes --]

 > 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

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: split-window-quit-restore.diff --]
[-- Type: text/x-patch; name="split-window-quit-restore.diff", Size: 2338 bytes --]

diff --git a/lisp/window.el b/lisp/window.el
index a6cdd4dec2..8651d7502f 100644
--- 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-window)))
+
+      (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)

  reply	other threads:[~2021-01-11 18:23 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-06 12:02 bug#45688: 28.0.50; New action for display-buffer? Lars Ingebrigtsen
2021-01-06 13:36 ` martin rudalics
2021-01-06 14:09   ` Lars Ingebrigtsen
2021-01-06 15:52     ` martin rudalics
2021-01-07 11:45       ` Lars Ingebrigtsen
2021-01-07 13:18         ` martin rudalics
2021-01-07 14:47           ` Lars Ingebrigtsen
2021-01-07 15:17             ` martin rudalics
2021-01-07 15:35             ` martin rudalics
2021-01-07 15:49               ` Lars Ingebrigtsen
2021-01-07 16:54                 ` martin rudalics
2021-01-06 15:45 ` Eli Zaretskii
2021-01-06 17:20   ` Lars Ingebrigtsen
2021-01-06 18:17     ` Eli Zaretskii
2021-01-07 11:40       ` Lars Ingebrigtsen
2021-01-07 13:17         ` martin rudalics
2021-01-07 15:39           ` Lars Ingebrigtsen
2021-01-07 16:54             ` martin rudalics
2021-01-10 11:24               ` Lars Ingebrigtsen
2021-01-10 16:05                 ` martin rudalics
2021-01-10 16:14                   ` martin rudalics
2021-01-11 14:43                     ` Lars Ingebrigtsen
2021-01-11 18:23                       ` martin rudalics [this message]
2021-01-11 18:55                         ` martin rudalics
2021-01-19  3:20                           ` Lars Ingebrigtsen
2021-01-11 19:05                         ` Lars Ingebrigtsen
2021-01-12  9:06                           ` martin rudalics
2021-01-19  3:26                             ` Lars Ingebrigtsen
2021-01-20  8:08                               ` martin rudalics
2021-01-20 16:34                                 ` Lars Ingebrigtsen
2021-01-20 17:11                                   ` martin rudalics
2021-01-19 17:50                             ` Juri Linkov
2021-01-20  8:09                               ` martin rudalics
2021-01-20 21:45                                 ` Juri Linkov
2021-01-25 19:03                                   ` martin rudalics
2021-01-25 20:08                                     ` Juri Linkov
2021-01-26 15:57                                       ` martin rudalics
2021-01-27  9:38                                         ` Juri Linkov
2021-01-28  9:40                                           ` martin rudalics
2021-10-03 18:12                                         ` Juri Linkov
2021-10-04  8:28                                           ` martin rudalics
2021-10-04 17:31                                             ` Juri Linkov
2021-10-05  6:43                                               ` Lars Ingebrigtsen
2021-10-05  8:10                                               ` martin rudalics
2021-10-05 16:49                                                 ` Juri Linkov
2021-10-06  7:41                                                   ` martin rudalics
2021-10-06 17:45                                               ` Juri Linkov
2021-10-13  8:36                                                 ` martin rudalics
2021-01-11 14:45                   ` Lars Ingebrigtsen
2021-01-07 18:43         ` Juri Linkov
2021-01-08  8:31           ` martin rudalics
2021-01-10 11:26             ` Lars Ingebrigtsen
2021-01-12 18:36               ` Juri Linkov
2021-01-19 17:52                 ` Juri Linkov
2021-01-25 20:10                   ` Juri Linkov
2021-01-26 15:57                     ` martin rudalics
2021-01-27  9:35                       ` Juri Linkov
2021-01-28  9:40                         ` martin rudalics
2021-01-28 18:46                           ` Juri Linkov
2021-01-29  7:51                             ` martin rudalics
2021-01-06 17:41 ` Juri Linkov
2021-01-06 18:28   ` Drew Adams
2021-01-06 18:47   ` martin rudalics

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=b9059f39-b3af-3ec7-c0ee-d1a493a3a2f5@gmx.at \
    --to=rudalics@gmx.at \
    --cc=45688@debbugs.gnu.org \
    --cc=larsi@gnus.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).