Subject: bug#73627: closed (Re: bug#73627: 29.3; window-main-window: Discrepancy between behaviour and docstring)

From: [email-masked] (GNU bug Tracking System)
Date: Sun, 20 Oct 2024 08:36:02 +0000

Your bug report

#73627: 29.3; window-main-window: Discrepancy between behaviour and docstring

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
73627: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=73627
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#73627: 29.3; window-main-window: Discrepancy between behaviour and docstring
From: martin rudalics <[email-masked]>
To: Eli Zaretskii <[email-masked]>
Cc: [email-masked], [email-masked]
Date: Sun, 20 Oct 2024 10:34:47 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

Version: 31.1
> Installed on master.

Closing this bug, martin

Subject: 29.3; window-main-window: Discrepancy between behaviour and docstring
From: "Nussbaum Ferdinand" <[email-masked]>
To: "[email-masked]" <[email-masked]>
Date: Fri, 4 Oct 2024 15:09:18 +0000
List-Id: <debbugs-submit.debbugs.gnu.org>

To reproduce from emacs -Q, evaluate in the scratch buffer:

(display-buffer-in-side-window
  (get-scratch-buffer-create)
  '((side . left)))
(split-window (frame-root-window) nil 'below)
(window-main-window)

Observe that (window-main-window) returns the selected window. However, the
window that was created by splitting below is not a side window, and it does not
descend from the selected window. This contradicts part of the docstring of
window-main-window:

"If FRAME has no side windows, return FRAME's root window. Otherwise, return
either an internal non-side window such that all other non-side windows on FRAME
descend from it, or the single live non-side window of FRAME."

Splitting a frame's root window in the presence of side windows seems to often
lead to such discrepancies. I have observed such behaviour in the packages hydra
(on ELPA, in its lv-window function), and shell-pop (from another package
archive).

Related to that: Is the following supposed to be an invariant for each frame,
and should it be considered a bug when packages violate it?

Invariant:
There exists a window MAIN such that for all live windows WIN (other than MAIN)
we have: WIN descends from MAIN if and only if it is not a side window.

This is something I assumed and was surprised to see violated.

Best,
Ferdinand