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

관련 정보