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