Xmonad, como configurar uma grade de espaços de trabalho?

Xmonad, como configurar uma grade de espaços de trabalho?

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 nextWSfazer:

do
  x <- logCurrent
  if x /= "9" then nextWS else pure ()

informação relacionada