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. Не стесняйтесь задавать мне больше вопросов в комментариях, если у вас есть какие-либо. Надеюсь, это поможет.