Xmonad,如何设置工作区网格?

Xmonad,如何设置工作区网格?

我想将 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 ()

相关内容