11个重大版本

0.16.0 2022年12月31日
0.15.0 2022年7月5日
0.14.0 2021年12月10日
0.13.0 2021年11月4日
0.5.0 2019年4月21日

#9 in #window-event

37 个月下载量
用于 3 crates

MIT 协议

41KB
884 行代码

i3-ipc (同步)

Crate API

一个同步的i3 IPC库。关于异步,请参见tokio-i3ipc

订阅

订阅事件非常简单

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(())
}

获取

获取信息同样简单,使用任何 get_* 方法或 run_command 向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(())
}

依赖

~0.6–1.4MB
~32K SLoC