Root cause of "can jump one way across monitors but not back" on a
desk with a rotated monitor: both columns.lua's own edge-crossing and
the fallback this adds go through Hyprland's focusmonitor/movewindow
mon: -1/+1, which cycle through Hyprland's internal monitor *list
order* — not actual spatial position. A monitor's transform swaps its
logical width/height (same math as monitor-manager's logical_width/
logical_height) but doesn't reorder that list, so list order and
physical left-to-right order can silently diverge once one monitor is
rotated — confirmed with the reported layout (main 3840x2160 normal +
rotated 1920x1080 to its right): jumping right resolved correctly,
jumping back left did not.
scripts/monitor-adjacent replaces the index cycling with real spatial
adjacency: it sorts monitors by logical bounding-box center each time
and dispatches focusmonitor/movewindow to the actual next/prev monitor
in the requested screen direction. Verified against the exact reported
monitor layout (simulated, transform=1 on the right monitor) — both
directions now resolve to the correct monitor.
Wired in two places (Super+,/. is untouched, still index-cycling, by
request):
- columns.lua's edge-crossing (off the left/right edge of the column
strip already flowed onto the next monitor; now via spatial lookup)
- hypr-nav's scrolling-layout perpendicular "no neighbour" case, as a
new fallback: regular directional movement (Super+hjkl) that
previously just stopped at the edge of a monitor now spills onto
whichever monitor is spatially in that direction, same as columns.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TLz6HWsXCwzQ97LrLt2em6
|
||
|---|---|---|
| .. | ||
| hyprland | ||
| hyprlua | ||
| niri | ||
| sway | ||
| migrate-hyprland-to-hyprlua.sh | ||