aboutsummaryrefslogtreecommitdiff
path: root/niri-config/src
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-03-22 10:36:19 +0400
committerIvan Molodetskikh <yalterz@gmail.com>2024-03-22 10:36:19 +0400
commita0c8c39b06e672c633e09f3751d46fa8fed4f3a4 (patch)
tree3aab3194216623e64dd0feac99f967aecd6723da /niri-config/src
parent977f1487c22b5d30051939b9572b99a31a9775ff (diff)
downloadniri-a0c8c39b06e672c633e09f3751d46fa8fed4f3a4.tar.gz
niri-a0c8c39b06e672c633e09f3751d46fa8fed4f3a4.tar.bz2
niri-a0c8c39b06e672c633e09f3751d46fa8fed4f3a4.zip
Make binds accept wheel names
Diffstat (limited to 'niri-config/src')
-rw-r--r--niri-config/src/lib.rs54
1 files changed, 41 insertions, 13 deletions
diff --git a/niri-config/src/lib.rs b/niri-config/src/lib.rs
index 937df0ad..1bf0ac2d 100644
--- a/niri-config/src/lib.rs
+++ b/niri-config/src/lib.rs
@@ -724,10 +724,19 @@ pub struct Bind {
#[derive(Debug, PartialEq, Eq, Clone, Copy, Hash)]
pub struct Key {
- pub keysym: Keysym,
+ pub trigger: Trigger,
pub modifiers: Modifiers,
}
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Hash)]
+pub enum Trigger {
+ Keysym(Keysym),
+ WheelDown,
+ WheelUp,
+ WheelLeft,
+ WheelRight,
+}
+
bitflags! {
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct Modifiers : u8 {
@@ -1499,12 +1508,23 @@ impl FromStr for Key {
}
}
- let keysym = keysym_from_name(key, KEYSYM_CASE_INSENSITIVE);
- if keysym.raw() == KEY_NoSymbol {
- return Err(miette!("invalid key: {key}"));
- }
+ let trigger = if key.eq_ignore_ascii_case("WheelDown") {
+ Trigger::WheelDown
+ } else if key.eq_ignore_ascii_case("WheelUp") {
+ Trigger::WheelUp
+ } else if key.eq_ignore_ascii_case("WheelLeft") {
+ Trigger::WheelLeft
+ } else if key.eq_ignore_ascii_case("WheelRight") {
+ Trigger::WheelRight
+ } else {
+ let keysym = keysym_from_name(key, KEYSYM_CASE_INSENSITIVE);
+ if keysym.raw() == KEY_NoSymbol {
+ return Err(miette!("invalid key: {key}"));
+ }
+ Trigger::Keysym(keysym)
+ };
- Ok(Key { keysym, modifiers })
+ Ok(Key { trigger, modifiers })
}
}
@@ -1712,6 +1732,7 @@ mod tests {
Mod+Comma { consume-window-into-column; }
Mod+1 { focus-workspace 1; }
Mod+Shift+E { quit skip-confirmation=true; }
+ Mod+WheelDown { focus-workspace-down; }
}
debug {
@@ -1895,53 +1916,60 @@ mod tests {
binds: Binds(vec![
Bind {
key: Key {
- keysym: Keysym::t,
+ trigger: Trigger::Keysym(Keysym::t),
modifiers: Modifiers::COMPOSITOR,
},
action: Action::Spawn(vec!["alacritty".to_owned()]),
},
Bind {
key: Key {
- keysym: Keysym::q,
+ trigger: Trigger::Keysym(Keysym::q),
modifiers: Modifiers::COMPOSITOR,
},
action: Action::CloseWindow,
},
Bind {
key: Key {
- keysym: Keysym::h,
+ trigger: Trigger::Keysym(Keysym::h),
modifiers: Modifiers::COMPOSITOR | Modifiers::SHIFT,
},
action: Action::FocusMonitorLeft,
},
Bind {
key: Key {
- keysym: Keysym::l,
+ trigger: Trigger::Keysym(Keysym::l),
modifiers: Modifiers::COMPOSITOR | Modifiers::SHIFT | Modifiers::CTRL,
},
action: Action::MoveWindowToMonitorRight,
},
Bind {
key: Key {
- keysym: Keysym::comma,
+ trigger: Trigger::Keysym(Keysym::comma),
modifiers: Modifiers::COMPOSITOR,
},
action: Action::ConsumeWindowIntoColumn,
},
Bind {
key: Key {
- keysym: Keysym::_1,
+ trigger: Trigger::Keysym(Keysym::_1),
modifiers: Modifiers::COMPOSITOR,
},
action: Action::FocusWorkspace(1),
},
Bind {
key: Key {
- keysym: Keysym::e,
+ trigger: Trigger::Keysym(Keysym::e),
modifiers: Modifiers::COMPOSITOR | Modifiers::SHIFT,
},
action: Action::Quit(true),
},
+ Bind {
+ key: Key {
+ trigger: Trigger::WheelDown,
+ modifiers: Modifiers::COMPOSITOR,
+ },
+ action: Action::FocusWorkspaceDown,
+ },
]),
debug: DebugConfig {
render_drm_device: Some(PathBuf::from("/dev/dri/renderD129")),