module XMonad.Util.ClickableWorkspaces (
clickablePP,
clickableWrap,
) where
import XMonad.Prelude ((<&>), (>=>))
import XMonad
import XMonad.Hooks.StatusBar.PP (xmobarAction, PP(..))
import XMonad.Util.WorkspaceCompare (getSortByIndex)
import qualified XMonad.StackSet as W
import Data.List (elemIndex)
clickableWrap :: Int -> String -> String
clickableWrap :: Int -> WorkspaceId -> WorkspaceId
clickableWrap Int
i = WorkspaceId -> WorkspaceId -> WorkspaceId -> WorkspaceId
xmobarAction (WorkspaceId
"xdotool set_desktop " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> WorkspaceId
show Int
i) WorkspaceId
"1"
getWsIndex :: X (WorkspaceId -> Maybe Int)
getWsIndex :: X (WorkspaceId -> Maybe Int)
getWsIndex = do
WorkspaceSort
wSort <- X WorkspaceSort
getSortByIndex
[WorkspaceId]
spaces <- forall s (m :: * -> *) a. MonadState s m => (s -> a) -> m a
gets (forall a b. (a -> b) -> [a] -> [b]
map forall i l a. Workspace i l a -> i
W.tag forall b c a. (b -> c) -> (a -> b) -> a -> c
. WorkspaceSort
wSort forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall i l a s sd. StackSet i l a s sd -> [Workspace i l a]
W.workspaces forall b c a. (b -> c) -> (a -> b) -> a -> c
. XState -> WindowSet
windowset)
forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ forall a b c. (a -> b -> c) -> b -> a -> c
flip forall a. Eq a => a -> [a] -> Maybe Int
elemIndex [WorkspaceId]
spaces
getClickable :: X (String -> WindowSpace -> String)
getClickable :: X (WorkspaceId -> WindowSpace -> WorkspaceId)
getClickable = X (WorkspaceId -> Maybe Int)
getWsIndex forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> \WorkspaceId -> Maybe Int
idx WorkspaceId
s WindowSpace
w -> forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. a -> a
id Int -> WorkspaceId -> WorkspaceId
clickableWrap (WorkspaceId -> Maybe Int
idx (forall i l a. Workspace i l a -> i
W.tag WindowSpace
w)) WorkspaceId
s
clickablePP :: PP -> X PP
clickablePP :: PP -> X PP
clickablePP PP
pp = X (WorkspaceId -> WindowSpace -> WorkspaceId)
getClickable forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> \WorkspaceId -> WindowSpace -> WorkspaceId
ren -> PP
pp{ ppRename :: WorkspaceId -> WindowSpace -> WorkspaceId
ppRename = PP -> WorkspaceId -> WindowSpace -> WorkspaceId
ppRename PP
pp forall (m :: * -> *) a b c.
Monad m =>
(a -> m b) -> (b -> m c) -> a -> m c
>=> WorkspaceId -> WindowSpace -> WorkspaceId
ren }