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

相關內容