Xmonad, ¿Cómo configurar una cuadrícula de espacios de trabajo?

Xmonad, ¿Cómo configurar una cuadrícula de espacios de trabajo?

Quiero tener 9 espacios de trabajo como una cuadrícula. Y para navegar por ellos usando las teclas de flecha. Hasta ahora puedo navegar con las teclas de flecha, pero quiero deshacerme del "envoltura". Por ejemplo, si el espacio de trabajo 9 es el espacio de trabajo actual y presiono la flecha ARRIBA, termino con el espacio de trabajo 1 (debería permanecer en el espacio de trabajo 9). Esto no debería ser un problema de implementar si hay una manera de obtener el espacio de trabajo actual.

Aquí está parte de mi código hasta ahora:

 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

Encontré este código a continuación que podría ser útil pero no sé cómo "extraer" el resultado o si el resultado es útil. ¿Cómo obtengo el espacio de trabajo actual? Gracias.

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

Respuesta1

Puede obtener el espacio de trabajo actual conlogCurrent

https://hackage.haskell.org/package/xmonad-contrib-0.15/docs/XMonad-Util-Loggers.html#v:logCurrent

Entonces en lugar de nextWShacer:

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

información relacionada