chiasma-0.2.0.0: lib/Chiasma/Command/Session.hs
module Chiasma.Command.Session where
import Control.Monad.Free.Class (MonadFree)
import Chiasma.Codec.Data (Session(Session))
import Chiasma.Data.Ident (Ident, identText)
import Chiasma.Data.TmuxId (SessionId)
import Chiasma.Data.TmuxThunk (TmuxThunk)
import qualified Chiasma.Monad.Tmux as Tmux (read, unsafeReadOne, write)
sameId :: SessionId -> Session -> Bool
sameId target (Session i) = target == i
sessions :: MonadFree TmuxThunk m => m [Session]
sessions =
Tmux.read "list-sessions" []
doesSessionExist :: MonadFree TmuxThunk m => SessionId -> m Bool
doesSessionExist sessionId =
any (sameId sessionId) <$> sessions
existingSessionId :: MonadFree TmuxThunk m => SessionId -> m (Maybe SessionId)
existingSessionId sessionId = do
exists <- doesSessionExist sessionId
return $ if exists then Just sessionId else Nothing
newSession :: MonadFree TmuxThunk m => Ident -> m Session
newSession name =
Tmux.unsafeReadOne "new-session" ["-s", identText name, "-P"]
activateSession :: MonadFree TmuxThunk m => Int -> m ()
activateSession sessionId =
Tmux.write "send-keys" ["-t", "%1", "'tmux switch-client -t \\$" <> show sessionId <> "'", "enter"]