Popularity
5.0
Declining
Activity
0.0
Stable
5
3
4

Monthly Downloads: 9
Programming language: Haskell
License: BSD 3-clause "New" or "Revised" License
Tags: Lib    
Latest version: v0.2.0.0
Add another 'Lib' Package

README

i3ipc

Build Status

Haskell type-safe bindings for working with i3 using it's unix socket IPC. Sway is supposed to be protocl compatible with i3, I've included a function to bind to sway's socket also.

Subscribing

Subscribe to events:

import qualified I3IPC.Subscribe         as Sub
import           I3IPC                   ( subscribe )
import           Control.Monad.IO.Class

-- will print all events
main :: IO ()
main = liftIO $ subscribe print [Sub.Workspace, Sub.Window]

An example of explicitly matching on some events and printing their fields:

import qualified I3IPC.Subscribe               as Sub
import           I3IPC.Event
import           I3IPC                         ( subscribe )
import           Control.Monad.IO.Class

main :: IO ()
main = liftIO $ subscribe handle [Sub.Workspace, Sub.Window]
 where
  handle :: MonadIO m => Either String Event -> m ()
  handle (Right evt) = case evt of
    Workspace WorkspaceEvent { wrk_current } -> print wrk_current
    Window WindowEvent { win_container } -> print win_container
    _ -> error "No other event types"
  handle (Left err) = error err

Sending Messages

Sending Messages to i3:

import           I3IPC              ( connecti3
                                    , getWorkspaces
                                    )
import           Control.Monad.IO.Class                                    

main :: IO ()
main = do
    soc <- liftIO $ connecti3
    print $ getWorkspaces soc

Alternatively, you can ignore the convenience functions and construct these messages yourself:

import qualified I3IPC.Message     as Msg
import           I3IPC              ( connecti3
                                    , receiveMsg
                                    )
import           Control.Monad.IO.Class                                    

main :: IO ()
main = do
    soc <- liftIO $ connecti3
    print $ Msg.sendMsg soc Msg.Workspaces >> receiveMsg soc

Community

I'm happy to take PRs or suggestions, or simply fix issues for this library.