hyprshell_core_lib/binds/
generate.rs1use crate::binds::structs::ExecBind;
2use crate::config::Modifier;
3use anyhow::bail;
4
5pub fn generate_bind_kill(kill_bind: &str) -> anyhow::Result<ExecBind> {
6 let a = kill_bind
7 .split(',')
8 .map(str::trim)
9 .filter(|s| !s.is_empty())
10 .collect::<Vec<_>>();
11 let mods = match a.first() {
12 Some(s) => {
13 let mut parsed_mods = Vec::new();
14 for m in s.split('+') {
15 let mod_parsed: anyhow::Result<Modifier> = match m.to_ascii_lowercase().as_str() {
16 "alt" => Ok(Modifier::Alt),
17 "ctrl" | "control" => Ok(Modifier::Ctrl),
18 "super" | "win" => Ok(Modifier::Super),
19 "shift" => Ok(Modifier::Shift),
20 _ => bail!("Unknown modifier: {}", m),
21 };
22 parsed_mods.push(mod_parsed?);
23 }
24 parsed_mods
25 }
26 None => bail!("No mods specified"),
27 };
28 let key = match a.get(1) {
29 Some(s) => Box::from(*s),
30 None => bail!("No key provided in bind: {}", kill_bind),
31 };
32
33 let bind = ExecBind {
34 key,
35 mods,
36 on_release: true,
37 exec: "pkill hyprshell".into(),
38 };
39 Ok(bind)
40}