libxev-sys 0.0.1-rc.2

Low-level FFI bindings to libxev (built from vendored sources via Zig).
const std = @import("std");
const xev = @import("xev");

pub fn main() !void {
    // Initialize the loop state. Notice we can use a stack-allocated
    // value here. We can even pass around the loop by value! The loop
    // will contain all of our "completions" (watches).
    var loop = try xev.Loop.init(.{});
    defer loop.deinit();

    // Initialize a completion and a watcher. A completion is the actual
    // thing a loop does for us, and a watcher is a high-level structure
    // to help make it easier to use completions.
    var c: xev.Completion = undefined;
    const timer = try xev.Timer.init();
    timer.run(&loop, &c, 1, void, null, timerCallback);

    // Run the loop until there are no more completions.
    try loop.run(.until_done);
}

fn timerCallback(
    _: ?*void,
    _: *xev.Loop,
    _: *xev.Completion,
    result: xev.Timer.RunError!void,
) xev.CallbackAction {
    _ = result catch unreachable;
    return .disarm;
}