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