Skip to content

Commit 9c9665d

Browse files
committed
fix(whkd): bind rwin by default when binding win
This commit ensures that `VKey::RWIN` is registered alongside with `VKey::LWIN` when specifying a `win` as a modifier. This is required because `win-hotkeys` doesn't handle lwin and rwin the same way that it handles shift, alt and ctrl.
1 parent 7d2bea0 commit 9c9665d

File tree

2 files changed

+34
-3
lines changed

2 files changed

+34
-3
lines changed

core/src/lib.rs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,33 @@ pub struct Whkdrc {
1010
pub pause_hook: Option<String>,
1111
}
1212

13+
impl Whkdrc {
14+
pub fn add_rwin_bindings(&mut self) {
15+
let mut rwin_bindings = vec![];
16+
for binding in &mut self.bindings {
17+
if let Some(i) = binding.keys.iter().position(|key| key == "win") {
18+
let mut rwin_binding = binding.clone();
19+
rwin_binding.keys[i] = "rwin".to_string();
20+
rwin_bindings.push(rwin_binding);
21+
}
22+
}
23+
self.bindings.extend(rwin_bindings);
24+
25+
let mut rwin_app_bindings = vec![];
26+
for binding in &mut self.app_bindings {
27+
if let Some(i) = binding.0.iter().position(|key| key == "win") {
28+
let mut rwin_binding = binding.clone();
29+
rwin_binding.0[i] = "rwin".to_string();
30+
for app_binding in &mut rwin_binding.1 {
31+
app_binding.keys[i] = "rwin".to_string();
32+
}
33+
rwin_app_bindings.push(rwin_binding);
34+
}
35+
}
36+
self.app_bindings.extend(rwin_app_bindings);
37+
}
38+
}
39+
1340
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
1441
pub enum Shell {
1542
Cmd,

src/main.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@ lazy_static! {
3737
},
3838
);
3939
home.push("whkdrc");
40-
whkd_parser::load(&home).unwrap_or_else(|_| panic!("could not load whkdrc from {home:?}"))
40+
let mut parsed = whkd_parser::load(&home).unwrap_or_else(|_| panic!("could not load whkdrc from {home:?}"));
41+
parsed.add_rwin_bindings();
42+
parsed
4143
};
4244
static ref SESSION_STDIN: Mutex<Option<ChildStdin>> = Mutex::new(None);
4345
}
@@ -173,8 +175,10 @@ fn main() -> Result<()> {
173175
let whkdrc = cli.config.map_or_else(
174176
|| WHKDRC.clone(),
175177
|config| {
176-
whkd_parser::load(&config)
177-
.unwrap_or_else(|_| panic!("could not load whkdrc from {config:?}"))
178+
let mut parsed = whkd_parser::load(&config)
179+
.unwrap_or_else(|_| panic!("could not load whkdrc from {config:?}"));
180+
parsed.add_rwin_bindings();
181+
parsed
178182
},
179183
);
180184

0 commit comments

Comments
 (0)