yaxi

Crates.ioyaxi
lib.rsyaxi
version0.1.47
sourcesrc
created_at2024-10-02 14:21:47.117572
updated_at2024-11-10 18:21:36.831007
descriptionA rust implementation of the x11 protocol
homepage
repositoryhttps://github.com/proxin187/yaxi
max_upload_size
id1394117
size424,399
Prox (proxin187)

documentation

README



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.

Commit count: 122

cargo fmt