A Rust library for controlling i3-wm through its IPC interface
Rust Shell
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
examples
scripts Get new html for compare script Oct 8, 2015
src
.gitignore
.travis.yml
Cargo.toml
LICENSE.md
README.md

README.md

i3ipc-rs

Build Status

A Rust library for controlling i3-wm through its IPC interface.

Documentation

Usage

Add this to your Cargo.toml

[dependencies]
i3ipc = "0.4.2"

Messages:

extern crate i3ipc;
use i3ipc::I3Connection;

fn main() {
    // establish a connection to i3 over a unix socket
    let mut connection = I3Connection::connect().unwrap();

    // request and print the i3 version
    println!("{}", connection.get_version().unwrap().human_readable);

    // fullscreen the focused window
    connection.command("fullscreen").unwrap();
}

Events:

extern crate i3ipc;
use i3ipc::I3EventListener;
use i3ipc::Subscription;
use i3ipc::event::Event;

fn main() {
    // establish connection.
    let mut listener = I3EventListener::connect().unwrap();

    // subscribe to a couple events.
    let subs = [Subscription::Mode, Subscription::Binding];
    listener.subscribe(&subs).unwrap();

    // handle them
    for event in listener.listen() {
        match event.unwrap() {
            Event::ModeEvent(e) => println!("new mode: {}", e.change),
            Event::BindingEvent(e) => println!("user input triggered command: {}", e.binding.command),
            _ => unreachable!()
        }
    }
}

Status

This library was last updated for i3 version 4.11. It is generally forward compatible, but not backward compatible. Contributions are welcome!