Я хочу иметь 9 рабочих областей в виде сетки. И перемещаться по ним с помощью клавиш со стрелками. Пока я могу перемещаться с помощью клавиш со стрелками, но я хочу избавиться от «обтекания». Например, если рабочая область 9 является текущей рабочей областью и я нажимаю стрелку ВВЕРХ, я оказываюсь на рабочей области 1 (должен оставаться на рабочей области 9). Это не должно быть проблемой для реализации, если есть способ получить текущую рабочую область.
Вот часть моего кода на данный момент:
myKeys = [
, ((myModMask , xK_Down), (switchWorkspace (-3))) -- prevWS
, ((myModMask , xK_Up), (switchWorkspace 3)) -- nextWS
, ((myModMask , xK_Left), prevWS)
, ((myModMask , xK_Right), nextWS)
]
switchWorkspace :: Int -> X ()
switchWorkspace d = wsBy d >>= windows . W.greedyView
wsBy :: Int -> X (WorkspaceId)
wsBy = findWorkspace C.getSortByIndex Next AnyWS
Я нашел этот код ниже, который может быть полезен, но не знаю, как "извлечь" результат или полезен ли результат? Как мне получить текущее рабочее пространство? Спасибо.
-- | Lookup the index of a workspace id in the user's config, return Nothing
-- if that workspace does not exist in the config.
getWsIndex :: X (WorkspaceId -> Maybe Int)
getWsIndex = do
spaces <- asks (workspaces . config)
return $ flip elemIndex spaces
решение1
Вы можете получить текущее рабочее пространство с помощьюlogCurrent
https://hackage.haskell.org/package/xmonad-contrib-0.15/docs/XMonad-Util-Loggers.html#v:logCurrent
Поэтому вместо того, чтобы nextWS
делать:
do
x <- logCurrent
if x /= "9" then nextWS else pure ()