Copyright | (c) Nelson Elhage <nelhage@mit.edu> |
---|---|
License | BSD |
Maintainer | Nelson Elhage <nelhage@mit.edu> |
Stability | unstable |
Portability | unportable |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
Manipulate screens ordered by physical location instead of ID
Synopsis
- newtype PhysicalScreen = P Int
- getScreen :: ScreenComparator -> PhysicalScreen -> X (Maybe ScreenId)
- viewScreen :: ScreenComparator -> PhysicalScreen -> X ()
- sendToScreen :: ScreenComparator -> PhysicalScreen -> X ()
- onNextNeighbour :: ScreenComparator -> (WorkspaceId -> WindowSet -> WindowSet) -> X ()
- onPrevNeighbour :: ScreenComparator -> (WorkspaceId -> WindowSet -> WindowSet) -> X ()
- horizontalScreenOrderer :: ScreenComparator
- verticalScreenOrderer :: ScreenComparator
- newtype ScreenComparator = ScreenComparator ((ScreenId, Rectangle) -> (ScreenId, Rectangle) -> Ordering)
- getScreenIdAndRectangle :: Screen i l a ScreenId ScreenDetail -> (ScreenId, Rectangle)
- screenComparatorById :: (ScreenId -> ScreenId -> Ordering) -> ScreenComparator
- screenComparatorByRectangle :: (Rectangle -> Rectangle -> Ordering) -> ScreenComparator
- rescreen :: ScreenComparator -> X ()
Usage
This module allows you name Xinerama screens from XMonad using their
physical location relative to each other (as reported by Xinerama),
rather than their ScreenID
s, which are arbitrarily determined by
your X server and graphics hardware.
You can specify how to order the screen by giving a ScreenComparator. To create a screen comparator you can use screenComparatorByRectangle or screenComparatorByScreenId. The default ScreenComparator orders screens by the upper-left-most corner, from top-to-bottom and then left-to-right.
Example usage in your xmonad.hs
file:
import XMonad.Actions.PhysicalScreens import Data.Default
, ((modMask, xK_a), onPrevNeighbour def W.view) , ((modMask, xK_o), onNextNeighbour def W.view) , ((modMask .|. shiftMask, xK_a), onPrevNeighbour def W.shift) , ((modMask .|. shiftMask, xK_o), onNextNeighbour def W.shift)
-- -- mod-{w,e,r}, Switch to physical/Xinerama screens 1, 2, or 3 -- mod-shift-{w,e,r}, Move client to screen 1, 2, or 3 -- [((modm .|. mask, key), f sc) | (key, sc) <- zip [xK_w, xK_e, xK_r] [0..] , (f, mask) <- [(viewScreen def, 0), (sendToScreen def, shiftMask)]]
For detailed instructions on editing your key bindings, see the tutorial.
newtype PhysicalScreen Source #
The type of the index of a screen by location
Instances
getScreen :: ScreenComparator -> PhysicalScreen -> X (Maybe ScreenId) Source #
Translate a physical screen index to a ScreenId
viewScreen :: ScreenComparator -> PhysicalScreen -> X () Source #
Switch to a given physical screen
sendToScreen :: ScreenComparator -> PhysicalScreen -> X () Source #
Send the active window to a given physical screen
onNextNeighbour :: ScreenComparator -> (WorkspaceId -> WindowSet -> WindowSet) -> X () Source #
Apply operation on a WindowSet with the WorkspaceId of the next screen in the physical order as parameter.
onPrevNeighbour :: ScreenComparator -> (WorkspaceId -> WindowSet -> WindowSet) -> X () Source #
Apply operation on a WindowSet with the WorkspaceId of the previous screen in the physical order as parameter.
horizontalScreenOrderer :: ScreenComparator Source #
orders screens by the upper-left-most corner, from left-to-right
verticalScreenOrderer :: ScreenComparator Source #
orders screens by the upper-left-most corner, from top-to-bottom
newtype ScreenComparator Source #
A ScreenComparator allow to compare two screen based on their coordonate and Xinerama Id
Instances
Default ScreenComparator Source # | The default ScreenComparator orders screens by the upper-left-most corner, from top-to-bottom |
Defined in XMonad.Actions.PhysicalScreens def :: ScreenComparator # |
getScreenIdAndRectangle :: Screen i l a ScreenId ScreenDetail -> (ScreenId, Rectangle) Source #
screenComparatorById :: (ScreenId -> ScreenId -> Ordering) -> ScreenComparator Source #
Compare screen only by their Xinerama id
screenComparatorByRectangle :: (Rectangle -> Rectangle -> Ordering) -> ScreenComparator Source #
Compare screen only by their coordonate
rescreen :: ScreenComparator -> X () Source #
An alternative to rescreen
that avoids reshuffling
the workspaces if the number of screens doesn't change and only their
locations do. Useful for users of xrandr --setmonitor
.
See setRescreenWorkspacesHook
, which lets you
replace the builtin rescreen handler.