Compare commits

..

7 Commits

2 changed files with 70 additions and 10 deletions

View File

@ -22,25 +22,83 @@ impl From<Modifier> for u8 {
} }
} }
#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)] #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub enum Button { pub enum Button {
Mod(Modifier), Mod(Modifier),
Key(Key), Key(Key),
ModTap { keycode: Key, modifier: Modifier }, ModTap(Key, Modifier),
NextLayer, Compose2(CompShift, Key, CompShift, Key),
PrevLayer, Compose3(CompShift, Key, CompShift, Key, CompShift, Key),
Layer(LayerShift, LayerDir, u16),
None, None,
} }
/// Whether a key should be shift modified as part of a compose chain.
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum CompShift {
/// Do not shift the key.
#[default]
Lower,
/// Shift the key.
Upper,
/// Shift the key if shift is being held down.
Variable,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub enum LayerDir {
Left,
Right,
Up,
Down,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub enum LayerShift {
Move,
Peek,
}
impl Display for Button { impl Display for Button {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let cs = |cs: &CompShift| match cs {
CompShift::Lower => "",
CompShift::Upper => "",
CompShift::Variable => "⇧?",
};
match self { match self {
Button::Mod(modifier) => Debug::fmt(&modifier, f), Button::Mod(modifier) => Debug::fmt(&modifier, f),
Button::Key(keycode) => write!(f, "{keycode:?}"), Button::Key(key) => write!(f, "{key:?}"),
Button::ModTap { keycode, modifier } => write!(f, "{keycode:?}/{modifier:?}"), Button::ModTap(key, modifier) => write!(f, "{key:?}/{modifier}"),
Button::NextLayer => write!(f, ""), Button::Compose2(cs1, k1, cs2, k2) => {
Button::PrevLayer => write!(f, ""), write!(f, "⎄ {}{k1:?} {}{k2:?}", cs(cs1), cs(cs2))
}
Button::Compose3(cs1, k1, cs2, k2, cs3, k3) => {
write!(f, "⎄ {}{k1:?} {}{k2:?} {}{k3:?}", cs(cs1), cs(cs2), cs(cs3))
}
Button::Layer(..) => write!(f, "Lr"),
Button::None => write!(f, "Ø"), Button::None => write!(f, "Ø"),
} }
} }
} }
impl Display for Modifier {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let s = match self {
Modifier::LCtrl => "",
Modifier::LShift => "",
Modifier::LAlt => "",
Modifier::LMod => "",
Modifier::RCtrl => "",
Modifier::RShift => "",
Modifier::RAlt => "",
Modifier::RMod => "",
};
write!(f, "{s}")
}
}

View File

@ -2,6 +2,7 @@ use serde::{Deserialize, Serialize};
#[repr(u8)] #[repr(u8)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)] #[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
// https://usb.org/sites/default/files/hut1_3_0.pdf // https://usb.org/sites/default/files/hut1_3_0.pdf
pub enum Key { pub enum Key {
A = 0x04, A = 0x04,
@ -54,7 +55,8 @@ pub enum Key {
Return = 0x28, Return = 0x28,
Escape = 0x29, Escape = 0x29,
Delete = 0x2A, /// Keyboard DELETE (Backspace)
Backspace = 0x2A,
Tab = 0x2B, Tab = 0x2B,
/// Keyboard Spacebar /// Keyboard Spacebar
@ -111,7 +113,7 @@ pub enum Key {
/// Keyboard PageUp /// Keyboard PageUp
PageUp = 0x4B, PageUp = 0x4B,
/// Keyboard Delete Forward /// Keyboard Delete Forward
DeleteForward = 0x4C, Delete = 0x4C,
/// KeyboardEnd7 /// KeyboardEnd7
End = 0x4D, End = 0x4D,
/// Keyboard PageDown7 /// Keyboard PageDown7