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