[XMonad] Make goToNextScreen cycle through more than 2 monitors

This commit is contained in:
Ivan Malison 2017-04-15 23:01:26 -07:00
parent bf635bbba8
commit 5931b6c722
No known key found for this signature in database
GPG Key ID: 62530EFBE99DC2F8

View File

@ -697,12 +697,28 @@ shiftToNextScreen ws =
shiftToNextScreenX = windows shiftToNextScreen shiftToNextScreenX = windows shiftToNextScreen
getNextScreen ws =
minimumBy compareScreen candidates
where currentId = W.screen $ W.current ws
otherScreens = W.visible ws
largerId = filter ((> currentId) . W.screen) $ otherScreens
compareScreen a b = compare (W.screen a) (W.screen b)
candidates =
case largerId of
[] -> W.current ws:otherScreens -- Ensure a value will be selected
_ -> largerId
goToNextScreen ws = goToNextScreen ws =
case W.visible ws of if screenEq nextScreen currScreen then ws
newVisible:rest -> ws { W.current = newVisible else ws { W.current = nextScreen
, W.visible = W.current ws:rest , W.visible = currScreen : trimmedVisible
} }
_ -> ws where
currScreen = W.current ws
nextScreen = getNextScreen ws
screenEq a b = W.screen a == W.screen b
trimmedVisible =
(filter (screenEq nextScreen) $ W.visible ws)
goToNextScreenX = windows goToNextScreen goToNextScreenX = windows goToNextScreen