[−][src]Crate i3_ipc
i3-ipc
Subscribing to events is easy:
use i3_ipc::{ event::{Event, Subscribe}, I3Stream, }; use std::io; fn main() -> io::Result<()> { let mut i3 = I3Stream::conn_sub(&[Subscribe::Window, Subscribe::Workspace])?; for e in i3.listen() { match e? { Event::Workspace(ev) => println!("workspace change event {:?}", ev), Event::Window(ev) => println!("window event {:?}", ev), Event::Output(ev) => println!("output event {:?}", ev), Event::Mode(ev) => println!("mode event {:?}", ev), Event::BarConfig(ev) => println!("bar config update {:?}", ev), Event::Binding(ev) => println!("binding event {:?}", ev), Event::Shutdown(ev) => println!("shutdown event {:?}", ev), Event::Tick(ev) => println!("tick event {:?}", ev), } } Ok(()) }
Getting information is equally easy, use any get_*
method or run_command
to send a message to i3:
use i3_ipc::{Connect, I3}; use std::io; fn main() -> io::Result<()> { let mut i3 = I3::connect()?; let workspaces = i3.get_workspaces()?; println!("{:?}", workspaces); Ok(()) }
Modules
event | For subscribing and receiving events, each struct matches a particular
|
msg | For sending messages to i3 |
reply | Contains structs for deserializing messages from i3 |
Structs
I3 | Our connection type, we implement |
I3Stream |
|
I3Iter | I3 event iterator, after you're subscribed to events (with the |
MsgResponse | Instead of returning an enum, we're returning a struct containing the |
Constants
MAGIC |
Traits
Connect | Types implementing this are provided a connect function and return a stream |
I3Protocol | |
I3IPC | Trait containing methods to encode and decode message from i3 |
Functions
decode_event | Given an event type and payload this function will deserialize the proper struct |
socket_path | get socket path from i3 |