Quero ter 9 espaços de trabalho como uma grade. E para navegar por eles usando as teclas de seta. Até agora consigo navegar com as teclas de seta, mas quero me livrar do "envoltório". Por exemplo, se o espaço de trabalho 9 for o espaço de trabalho atual e eu pressionar a seta PARA CIMA, acabo com o espaço de trabalho 1 (deve permanecer no espaço de trabalho 9). Isso não deve ser problema de implementação se houver uma maneira de obter o espaço de trabalho atual.
Aqui está um pouco do meu código até agora:
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
Encontrei este código abaixo que pode ser útil mas não sei como "extrair" o resultado ou se o resultado é útil? Como obtenho o espaço de trabalho atual? Obrigado.
-- | 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
Responder1
Você pode obter o espaço de trabalho atual comlogCurrent
https://hackage.haskell.org/package/xmonad-contrib-0.15/docs/XMonad-Util-Loggers.html#v:logCurrent
Então, em vez de nextWS
fazer:
do
x <- logCurrent
if x /= "9" then nextWS else pure ()