woops i forgot stuff in last commit
This commit is contained in:
parent
8dd78c66b7
commit
7ecde7cd5a
4 changed files with 122 additions and 0 deletions
63
src/bin/emrec.rs
Normal file
63
src/bin/emrec.rs
Normal file
|
@ -0,0 +1,63 @@
|
|||
use core::time;
|
||||
use std::thread;
|
||||
|
||||
use easymacros::xwrap::{display, key, screen};
|
||||
|
||||
use x11::xlib;
|
||||
|
||||
use clap::Parser;
|
||||
|
||||
/// Macro recording module for easymacros. Outputs are partially compatible with xmacro.
|
||||
#[derive(Parser, Debug)]
|
||||
#[clap(author, version, about, long_about = None)]
|
||||
struct Args {
|
||||
/// The file to record the macro to. Defaults to writing to stdout.
|
||||
#[clap(value_parser, value_name = "output_file", value_hint = clap::ValueHint::FilePath)]
|
||||
output_file: Option<std::path::PathBuf>,
|
||||
/// Display to run the macro on. This uses the $DISPLAY environment variable by default.
|
||||
#[clap(short = 'D', long)]
|
||||
display: Option<String>,
|
||||
/// Max Delay in milliseconds for macro delays
|
||||
#[clap(short, long)]
|
||||
max_delay: Option<u64>,
|
||||
/// Allow delay capturing in recording output. If this flag is set, the program will ignore the max_delay.
|
||||
#[clap(short, long)]
|
||||
ignore_delay_capturing: bool,
|
||||
}
|
||||
|
||||
fn main() -> anyhow::Result<()> {
|
||||
let args = Args::parse();
|
||||
|
||||
let mut display =
|
||||
display::Display::open(args.display.clone()).expect("should be able to open to display");
|
||||
|
||||
let stop_key = get_stop_key(&mut display);
|
||||
|
||||
dbg!(stop_key);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn get_stop_key(display: &mut display::Display) -> key::Key {
|
||||
let root = display.default_root_window();
|
||||
|
||||
display
|
||||
.grab_keyboard(
|
||||
root,
|
||||
false,
|
||||
display::GrabMode::Sync,
|
||||
display::GrabMode::Sync,
|
||||
xlib::CurrentTime,
|
||||
)
|
||||
.expect("keyboard should be available to be grabbed");
|
||||
|
||||
println!("Press the key you want to use to stop recording the macro.");
|
||||
|
||||
let stop_key = loop {
|
||||
display.allow_events(display::EventMode::SyncPointer, xlib::CurrentTime);
|
||||
};
|
||||
|
||||
thread::sleep(time::Duration::from_secs(3));
|
||||
|
||||
todo!()
|
||||
}
|
39
src/xwrap/key.rs
Normal file
39
src/xwrap/key.rs
Normal file
|
@ -0,0 +1,39 @@
|
|||
use x11::xlib;
|
||||
|
||||
use super::{display, error};
|
||||
|
||||
use anyhow::Result;
|
||||
|
||||
pub use x11::keysym;
|
||||
|
||||
/// Stores a keycode
|
||||
#[derive(Debug)]
|
||||
pub struct Key {
|
||||
code: u32,
|
||||
}
|
||||
|
||||
impl Key {
|
||||
/// Creates a `Key` from a keycode and its related display connection.
|
||||
pub fn from_code(code: xlib::KeyCode, display: &display::Display) -> Result<Self> {
|
||||
let valid_range = display.keycodes()?;
|
||||
|
||||
if valid_range.contains(&code.into()) {
|
||||
Ok(Key { code: code.into() })
|
||||
} else {
|
||||
Err(error::XError::InvalidKeycodeError(code, valid_range).into())
|
||||
}
|
||||
}
|
||||
|
||||
/// Creates a `Key` from a keysym by converting it into a code internally.
|
||||
pub fn from_keysym(keysym: xlib::KeySym, display: &display::Display) -> Result<Option<Self>> {
|
||||
let valid_range = display.keycodes()?;
|
||||
|
||||
let code = unsafe { xlib::XKeysymToKeycode(display.ptr, keysym) };
|
||||
|
||||
Ok(if code == 0 {
|
||||
None
|
||||
} else {
|
||||
Some(Key { code: code.into() })
|
||||
})
|
||||
}
|
||||
}
|
15
src/xwrap/screen.rs
Normal file
15
src/xwrap/screen.rs
Normal file
|
@ -0,0 +1,15 @@
|
|||
use x11::xlib;
|
||||
|
||||
use super::display;
|
||||
|
||||
pub struct Screen {
|
||||
pub(super) ptr: *mut xlib::Screen,
|
||||
}
|
||||
|
||||
impl Screen {
|
||||
pub fn new(screen_nr: i32, display: &display::Display) -> Self {
|
||||
Self {
|
||||
ptr: unsafe { xlib::XScreenOfDisplay(display.ptr, screen_nr) },
|
||||
}
|
||||
}
|
||||
}
|
5
src/xwrap/window.rs
Normal file
5
src/xwrap/window.rs
Normal file
|
@ -0,0 +1,5 @@
|
|||
use x11::xlib;
|
||||
|
||||
pub struct Window {
|
||||
pub(super) wid: xlib::Window,
|
||||
}
|
Loading…
Reference in a new issue