use std::os::raw::c_uint;
#[derive(Clone, Debug, Default)]
pub enum Key {
#[default]
Unknown,
Backspace,
Enter,
Space,
Home,
End,
Delete,
Char(char),
LeftArrow,
RightArrow,
UpArrow,
DownArrow,
LShift,
RShift,
CapsLock,
CtrlC,
CtrlV,
}
impl Key {
pub fn from_c_ulong(keycode: c_uint, buffer: &[i8]) -> Key {
println!("key-{}", keycode);
match keycode {
22 => Key::Backspace,
36 => Key::Enter,
50 => Key::LShift,
62 => Key::RShift,
65 => Key::Space,
66 => Key::CapsLock,
104 => Key::Enter,
119 => Key::Delete,
110 => Key::Home,
111 => Key::UpArrow,
113 => Key::LeftArrow,
114 => Key::RightArrow,
115 => Key::End,
116 => Key::DownArrow,
_ => {
if buffer.len() == 0 { return Key::Unknown; }
let slice = buffer.iter().map(|x| *x as u8).collect::<Vec<_>>();
let char = String::from_utf8(slice).unwrap();
println!("输入字符: {:?}", char);
Key::Char(char.chars().next().unwrap())
}
}
}
}