hyprshell_core_lib/binds/
generate.rs

1use 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}