Skip to main content

hyprshell_windows_lib/
keybinds.rs

1use config_lib::Windows;
2use core_lib::binds::{ExecBind, generate_transfer_socat};
3use core_lib::transfer::{CloseSwitch, ExternalTransferType, OpenSwitch};
4
5#[must_use]
6pub fn generate_open_keybinds(windows: &Windows) -> Vec<ExecBind> {
7    let mut binds = Vec::new();
8    if let Some(overview) = &windows.overview {
9        binds.push(ExecBind {
10            mods: vec![overview.modifier.to_str()],
11            key: overview.key.clone(),
12            exec: generate_transfer_socat(&ExternalTransferType::OpenOverview),
13            release: false,
14            desc: format!(
15                "Open Overview with {} + {}",
16                overview.modifier, overview.key
17            ),
18        });
19    }
20    if let Some(switch) = &windows.switch {
21        binds.push(ExecBind {
22            mods: vec![switch.modifier.to_str()],
23            key: switch.key.clone(),
24            exec: generate_transfer_socat(&ExternalTransferType::OpenSwitch(OpenSwitch {
25                reverse: false,
26            })),
27            release: false,
28            desc: format!("Open Switch with {} + {}", switch.modifier, switch.key),
29        });
30        binds.push(ExecBind {
31            mods: vec![switch.modifier.to_str()],
32            key: Box::from("grave"),
33            exec: generate_transfer_socat(&ExternalTransferType::OpenSwitch(OpenSwitch {
34                reverse: true,
35            })),
36            release: false,
37            desc: format!("Open Switch (reverse) with {} + `", switch.modifier),
38        });
39        binds.push(ExecBind {
40            mods: vec![switch.modifier.to_str(), "shift"],
41            key: switch.key.clone(),
42            exec: generate_transfer_socat(&ExternalTransferType::OpenSwitch(OpenSwitch {
43                reverse: true,
44            })),
45            release: false,
46            desc: format!(
47                "Open Switch (reverse) with {} + shift + {}",
48                switch.modifier, switch.key
49            ),
50        });
51        binds.push(ExecBind {
52            mods: vec![switch.modifier.to_str()],
53            key: switch.modifier.to_keysym_l().into(),
54            exec: generate_transfer_socat(&ExternalTransferType::CloseSwitch(CloseSwitch {
55                switch: true,
56            })),
57            release: true,
58            desc: format!(
59                "Close Switch (reverse) with {} + {}_l",
60                switch.modifier, switch.modifier,
61            ),
62        });
63        binds.push(ExecBind {
64            mods: vec![switch.modifier.to_str()],
65            key: switch.modifier.to_keysym_r().into(),
66            exec: generate_transfer_socat(&ExternalTransferType::CloseSwitch(CloseSwitch {
67                switch: true,
68            })),
69            release: true,
70            desc: format!(
71                "Close Switch (reverse) with {} + {}_r",
72                switch.modifier, switch.modifier,
73            ),
74        });
75        binds.push(ExecBind {
76            mods: vec!["SHIFT"],
77            key: Box::from("Shift_L"),
78            exec: generate_transfer_socat(&ExternalTransferType::CloseSwitch(CloseSwitch {
79                switch: true,
80            })),
81            release: true,
82            desc: "Close Switch (reverse) with shift + shift_l".to_string(),
83        });
84        binds.push(ExecBind {
85            mods: vec!["SHIFT"],
86            key: Box::from("Shift_R"),
87            exec: generate_transfer_socat(&ExternalTransferType::CloseSwitch(CloseSwitch {
88                switch: true,
89            })),
90            release: true,
91            desc: "Close Switch (reverse) with shift + shift_r".to_string(),
92        });
93    }
94
95    binds
96}