XMonad не может использовать все три экрана в качестве единого рабочего пространства, но вы этого не хотите. Я думаю, вам просто нужно знать, как лучше ориентироваться на экранах. У меня есть настройка, которая мне очень нравится, и вы можете увидеть файл конфигурации для этой настройки в разделе XMonad на Haskell Wiki. Все, что я покажу, будет исходить из материала в моем собственном конфиге на моей машине (хотя это не обязательно то, что находится на той странице, на которую я ссылаюсь).
Есть две библиотеки xmonad-contrib, которые делают многоголовую навигацию не только сносной, но и замечательной находкой, и это CycleWS и TagWindows.
CycleWS позволяет циклически перемещаться по рабочим областям на разных физических экранах (с prevScreen и nextScreen), а также позволяет легко перемещать окна между экранами (с помощью shiftPrevScreen и shiftNextScreen). Это означает, что, несмотря на то, что у вас есть разные рабочие области на каждом экране, они могут совместно использовать окна между ними. Если вы не хотите, чтобы одно окно охватывало каждый экран, то у вас все в порядке. Вот как мой xmonad.hs использует команды CycleWS:
-- Alt + Ctrl Left / Right makes the view go left and right
, ((altMask .|. controlMask, xK_Left ), prevScreen >> windowCenter)
, ((altMask .|. controlMask, xK_Right ), nextScreen >> windowCenter)
, ((altMask .|. controlMask, xK_Down ), shiftPrevScreen)
, ((altMask .|. controlMask, xK_Up ), shiftNextScreen)
, ((altMask .|. controlMask .|. shiftMask, xK_Down ), shiftPrevScreen >> prevScreen >> windowCenter)
, ((altMask .|. controlMask .|. shiftMask, xK_Up ), shiftNextScreen >> nextScreen >> windowCenter)
[Примечание: windowCenter = warpToWindow (1% 6) (1% 6)]
TagWindows - это классно, особенно функция viewOnScreen, которая позволяет вам вызывать любую программу с тегами на любом из ваших экранов прямо вперед, хотя мне пришлось немного взломать, чтобы мне это понравилось. Вот ключи, которые я использую:
, ((myModMask, xK_g ), tagPrompt defaultXPConfig (withFocused . addTag))
, ((myModMask .|. shiftMask, xK_g ), tagDelPrompt defaultXPConfig)
, ((altMask, xK_g ), tagPrompt defaultXPConfig (`withTaggedGlobalP` gotoWindow))
И здесь определена функция gotoWindow:
-- Warning: This gotoWindow function assumes you made your workspaces
-- with the 'withScreens' function from XMonad.Layout.IndependentScreens
gotoWindow :: Window -> WindowSet -> WindowSet
gotoWindow window ws = case S.findTag window ws of
Just i -> viewOnScreen (screenIdFromTag i) i ws
Nothing -> ws
where
screenIdFromTag :: WorkspaceId -> ScreenId
screenIdFromTag = S . read . takeWhile (/= '_')
И это должно позволить вам закрепить многоголовую удивительность в вашем конфигурационном файле XMonad. Не стесняйтесь задавать мне больше вопросов в комментариях, если у вас есть какие-либо. Надеюсь, это поможет.