Skip to content

Instantly share code, notes, and snippets.

@Stovoy
Created June 21, 2021 13:35
Show Gist options
  • Save Stovoy/7f21768993237582b05d87f45b525331 to your computer and use it in GitHub Desktop.
Save Stovoy/7f21768993237582b05d87f45b525331 to your computer and use it in GitHub Desktop.
use rdev::{simulate, grab, Event, EventType, Key};
static mut SIMULATED: u32 = 0;
fn main() {
if let Err(error) = grab(callback) {
println!("Error: {:?}", error)
}
}
fn callback(event: Event) -> Option<Event> {
unsafe {
match event.event_type {
EventType::KeyPress(Key::DownArrow) => {
if (SIMULATED & 1) > 0 {
SIMULATED &= !1;
Some(event)
} else {
None
}
},
EventType::KeyPress(Key::LeftArrow) => {
if (SIMULATED & 2) > 0 {
SIMULATED &= !2;
Some(event)
} else {
None
}
},
EventType::KeyPress(Key::RightArrow) => {
if (SIMULATED & 4) > 0 {
SIMULATED &= !4;
Some(event)
} else {
None
}
},
EventType::KeyPress(Key::UpArrow) => {
if (SIMULATED & 8) > 0 {
SIMULATED &= !8;
Some(event)
} else {
None
}
},
EventType::KeyPress(Key::Unknown(84)) => {
simulate(&EventType::KeyPress(Key::DownArrow)).unwrap();
SIMULATED |= 1;
None
},
EventType::KeyRelease(Key::Unknown(84)) => {
simulate(&EventType::KeyRelease(Key::DownArrow)).unwrap();
None
},
EventType::KeyPress(Key::Unknown(83)) => {
simulate(&EventType::KeyPress(Key::LeftArrow)).unwrap();
SIMULATED |= 2;
None
},
EventType::KeyRelease(Key::Unknown(83)) => {
simulate(&EventType::KeyRelease(Key::LeftArrow)).unwrap();
None
},
EventType::KeyPress(Key::Unknown(85)) => {
simulate(&EventType::KeyPress(Key::RightArrow)).unwrap();
SIMULATED |= 4;
None
},
EventType::KeyRelease(Key::Unknown(85)) => {
simulate(&EventType::KeyRelease(Key::RightArrow)).unwrap();
None
},
EventType::KeyPress(Key::Unknown(87)) => {
simulate(&EventType::KeyPress(Key::UpArrow)).unwrap();
SIMULATED |= 8;
None
},
EventType::KeyRelease(Key::Unknown(87)) => {
simulate(&EventType::KeyRelease(Key::UpArrow)).unwrap();
None
},
_ => Some(event),
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment