GNU bug report logs - #32825
27.0.50; Deterministic window management

Previous Next

Package: emacs;

Reported by: Juri Linkov <juri <at> linkov.net>

Date: Mon, 24 Sep 2018 19:15:02 UTC

Severity: minor

Tags: moreinfo

Found in version 27.0.50

Fixed in version 29.0.50

Done: Juri Linkov <juri <at> linkov.net>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: martin rudalics <rudalics <at> gmx.at>
To: Juri Linkov <juri <at> linkov.net>
Cc: Michael Heerdegen <michael_heerdegen <at> web.de>, 32825 <at> debbugs.gnu.org
Subject: bug#32825: 27.0.50; Deterministic window management
Date: Tue, 04 Dec 2018 09:32:37 +0100
> Another reason why this urgently needs to be fixed using
> 'display-buffer-below-selected' with 'window-height' is that
> for example visiting a gpg file that fails to decrypt displays
> the *Backtrace* buffer with (file-error "Opening input file" "Can't decrypt"
> in another window that hides another essential buffer *Error*
> (with explanation of the error raised while decrypting)
> displayed in the same window.  But using 'display-buffer-below-selected'
> both essential buffers will be displayed in separate windows.

So what should we do?  I earlier proposed a 'min-height' entry like in
the code below.  Would that suffice?  If so, would we use the same for
'display-buffer-pop-up-window' and 'display-buffer-at-bottom'?  Should
we check the window below (if we "use" but do not "reuse" it) if it's
high enough?  I think we should provide exact semantics for any such
'min-height' entry so we can easily tell which action functions should
check it.

(defun display-buffer-below-selected (buffer alist)
  "Try displaying BUFFER in a window below the selected window.
If there is a window below the selected one and that window
already displays BUFFER, use that window.  Otherwise, try to
create a new window below the selected one and show BUFFER there.
If that attempt fails as well and there is a non-dedicated window
below the selected one, use that window."
  (let ((min-height (cdr (assq 'min-height alist)))
    window)
    (or (and (setq window (window-in-direction 'below))
         (eq buffer (window-buffer window))
         (window--display-buffer buffer window 'reuse alist))
    (and (not (frame-parameter nil 'unsplittable))
         (or (not (numberp min-height))
         (window-sizable-p nil (- min-height)))
         (let ((split-height-threshold 0)
           split-width-threshold)
           (setq window (window--try-to-split-window
                             (selected-window) alist)))
         (window--display-buffer
          buffer window 'window alist display-buffer-mark-dedicated))
    (and (setq window (window-in-direction 'below))
         (not (window-dedicated-p window))
         (window--display-buffer
          buffer window 'reuse alist display-buffer-mark-dedicated)))))

martin




This bug report was last modified 3 years and 24 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.