keyflow 0.1.1

Cross-platform input simulation library for keyboard, mouse and hotkeys.
Documentation
use keyflow::prelude::*;
use std::sync::Arc;
use std::sync::atomic::{AtomicBool, Ordering};
use std::thread;
use std::time::Duration;

fn main() -> Result<()> {
    Keyflow::builder()
        .with_screen(Screen::default())
        .with_hotkeys()
        .initialize()?;

    let running = Arc::new(AtomicBool::new(true));
    let running_clone = running.clone();
    let save = Arc::new(AtomicBool::new(false));
    let save_clone = save.clone();

    // Register Ctrl+Q
    Keyflow::register_hotkey("quit", Hotkey::new(Key::Q).with_ctrl(), move || {
        running_clone.store(false, Ordering::Relaxed);
    })?;

    // Register Ctrl+S
    Keyflow::register_hotkey("save", Hotkey::new(Key::S).with_ctrl(), move || {
        save_clone.store(true, Ordering::Relaxed);
        println!("Ctrl+S pressed.");
    })?;

    let mut counter = 0;
    while running.load(Ordering::Relaxed) {
        thread::sleep(Duration::from_secs(1));
        counter += 1;

        if counter % 10 == 0 {
            println!("Running for {counter} seconds...");
        }

        if save.load(Ordering::Relaxed) {
            save.store(false, Ordering::Relaxed);
        }
    }

    println!("Quit hotkey was pressed.");

    Ok(())
}