[][src]Crate i3_ipc

i3-ipc

Subscribing to events is easy:

use i3ipc_sync::{
    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 i3ipc_sync::{Connect, I3};
use std::io;

fn main() -> io::Result<()> {
    let mut i3 = I3::connect()?;
    let workspaces = i3.get_workspaces()?;
    println!("{:?}", workspaces);
    Ok(())
}

Modules

event
msg
reply

Structs

I3

Our connection type, we implement Connect for this

I3Stream

I3Stream will hold the underlying UnixStream that communicates with i3

I3Iter

I3 event iterator, after you're subscribed to events (with the subscribe method). The iterator will advance each iteration on receiving an Event. These are decoded using serde_json and returned

MsgResponse

Constants

MAGIC

Traits

Connect
I3IPC

Functions

decode_event
socket_path