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