aboutsummaryrefslogtreecommitdiff
path: root/src/config.rs
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-04-14 01:04:51 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-04-14 01:04:51 +0300
commitedaa3a1a092763cb25fd9e21772c95ee56a75a15 (patch)
tree88d54f6a3aa2a43c1c6dd4c7aaabd78ddfc03466 /src/config.rs
parent5ae1cea94bcd77c8a75abfbe6c996e5cf2a91ab7 (diff)
fix unify app key normalization for enhanced keyboard reporting
Diffstat (limited to 'src/config.rs')
-rw-r--r--src/config.rs49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/config.rs b/src/config.rs
index 0e841b0d..7a317204 100644
--- a/src/config.rs
+++ b/src/config.rs
@@ -531,6 +531,7 @@ impl Config {
binding: (KeyCode, KeyModifiers),
field: &str,
) -> Option<String> {
+ let binding = crate::input::normalize_app_key_binding(binding.0, binding.1, None);
self.seen
.insert((scope, binding.0, binding.1), field.to_string())
}
@@ -540,6 +541,7 @@ impl Config {
scope: BindingScope,
binding: (KeyCode, KeyModifiers),
) -> Option<&str> {
+ let binding = crate::input::normalize_app_key_binding(binding.0, binding.1, None);
self.seen
.get(&(scope, binding.0, binding.1))
.map(String::as_str)
@@ -551,6 +553,7 @@ impl Config {
binding: (KeyCode, KeyModifiers),
field: &str,
) {
+ let binding = crate::input::normalize_app_key_binding(binding.0, binding.1, None);
self.seen
.entry((scope, binding.0, binding.1))
.or_insert_with(|| field.to_string());
@@ -1655,6 +1658,52 @@ rename_tab = "g"
}
#[test]
+ fn duplicate_shifted_symbol_binding_is_rejected_after_normalization() {
+ let toml = r#"
+[keys]
+new_workspace = "?"
+rename_workspace = "shift+/"
+"#;
+ let config: Config = toml::from_str(toml).unwrap();
+ let diagnostics = config.collect_diagnostics();
+ let kb = config.keybinds();
+
+ assert!(diagnostics.iter().any(|d| {
+ d.contains("duplicate keybinding")
+ && d.contains("keys.rename_workspace")
+ && d.contains("keys.new_workspace")
+ }));
+ assert_eq!(
+ kb.new_workspace,
+ (KeyCode::Char('?'), KeyModifiers::empty())
+ );
+ assert_eq!(
+ kb.rename_workspace,
+ (KeyCode::Char('n'), KeyModifiers::SHIFT)
+ );
+ assert_eq!(kb.rename_workspace_label, "shift+n");
+ }
+
+ #[test]
+ fn custom_command_conflicting_with_shifted_symbol_reserved_key_is_disabled() {
+ let toml = r#"
+[[keys.command]]
+key = "shift+/"
+command = "echo hi"
+"#;
+ let config: Config = toml::from_str(toml).unwrap();
+ let diagnostics = config.collect_diagnostics();
+ let kb = config.keybinds();
+
+ assert!(diagnostics.iter().any(|d| {
+ d.contains("duplicate custom keybinding")
+ && d.contains("keys.command[0].key")
+ && d.contains("navigate.keybind_help")
+ }));
+ assert!(kb.custom_commands.is_empty());
+ }
+
+ #[test]
fn custom_command_keybinds_parse_from_toml() {
let toml = r#"
[[keys.command]]