48 releases

new 0.1.54 Dec 8, 2024
0.1.53 Dec 3, 2024
0.1.51 Nov 21, 2024
0.1.35 Oct 31, 2024

#141 in Operating systems

Download history 103/week @ 2024-09-26 636/week @ 2024-10-03 1253/week @ 2024-10-10 1080/week @ 2024-10-17 612/week @ 2024-10-24 867/week @ 2024-10-31 693/week @ 2024-11-07 222/week @ 2024-11-14 171/week @ 2024-11-21 274/week @ 2024-11-28 154/week @ 2024-12-05

893 downloads per month

MIT/Apache

495KB
6K SLoC



GitHub License dependencies crates.io

yaxi is a x11 library written from scratch

Key Features

  • Clean Interface - yaxi provides a clean interface, making it perfect for both beginners and experienced developers
  • Safety - yaxi has safe interface for x11 unlike many other x11 libraries
  • Not A Wrapper - yaxi is a pure rust implementation and is NOT a wrapper
  • No Dependencies - yaxi doesnt depend on any crates

Goals

  • Authorization
  • Requests and Replies
  • events (most)
  • Keycodes and Keysyms
  • Extensions (Xinerama, Xft, ...) (Only Xinerama Implemented So Far)
  • Clipboard Support
  • Comprehensive Documentation
  • Window Manager in yaxi (work in progress)

Example

This example opens a window and waits for a keyboard press before it quits:

use yaxi::window::{WindowArguments, ValuesBuilder, WindowKind};
use yaxi::proto::{Event, WindowClass, EventMask};
use yaxi::display;


fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut display = display::open(None)?;

    let mut root = display.default_root_window()?;

    let mut window = root.create_window(WindowArguments {
        depth: root.depth(),
        x: 5,
        y: 5,
        width: 80,
        height: 50,
        border_width: 15,
        class: WindowClass::InputOutput,
        visual: root.visual(),
        values: ValuesBuilder::new(vec![]),
    })?;

    window.select_input(&[EventMask::KeyPress, EventMask::KeyRelease])?;

    window.map(WindowKind::Window)?;

    let event = display.next_event()?;

    match event {
        Event::KeyEvent { kind, coordinates, window, root, subwindow, state, keycode, send_event } => {
            let window_copy = display.window_from_id(window)?;

            println!("window from id: {}, keycode: {}", window_copy.id(), keycode);
        },
        _ => {},
    }

    window.destroy(WindowKind::Window)?;

    Ok(())
}


License

Yaxi is licensed under the MIT License.

Dependencies