| Crates.io | i3_ipc |
| lib.rs | i3_ipc |
| version | 0.16.0 |
| created_at | 2019-04-13 02:28:02.013666+00 |
| updated_at | 2022-12-31 00:41:34.01328+00 |
| description | For communicating with i3 over it's IPC interface synchronously |
| homepage | |
| repository | https://github.com/leshow/tokio-i3ipc/tree/master/i3-ipc |
| max_upload_size | |
| id | 127566 |
| size | 15,429 |
A synchronous i3 IPC library. For async see tokio-i3ipc.
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(())
}