diff --git a/crates/gpui/src/platform/linux/keyboard.rs b/crates/gpui/src/platform/linux/keyboard.rs index ca4778b2aa74fdc05cf044393329e6eaf3748323..81f362b306d411586a77b98040587a7cc4521512 100644 --- a/crates/gpui/src/platform/linux/keyboard.rs +++ b/crates/gpui/src/platform/linux/keyboard.rs @@ -198,7 +198,7 @@ fn insert_letters_if_missing( let keycode = Keycode::new(*scan_code as u32); let key = scan_code.to_str(); if !inserted.contains(key) { - code_to_key.insert(keycode, key.to_string()); + code_to_key.insert(keycode, key.to_owned()); } } } @@ -343,6 +343,61 @@ impl LinuxScanCodes { LinuxScanCodes::IntlRo => "unknown", } } + + #[cfg(test)] + fn to_shifted(&self) -> &str { + match self { + LinuxScanCodes::A => "a", + LinuxScanCodes::B => "b", + LinuxScanCodes::C => "c", + LinuxScanCodes::D => "d", + LinuxScanCodes::E => "e", + LinuxScanCodes::F => "f", + LinuxScanCodes::G => "g", + LinuxScanCodes::H => "h", + LinuxScanCodes::I => "i", + LinuxScanCodes::J => "j", + LinuxScanCodes::K => "k", + LinuxScanCodes::L => "l", + LinuxScanCodes::M => "m", + LinuxScanCodes::N => "n", + LinuxScanCodes::O => "o", + LinuxScanCodes::P => "p", + LinuxScanCodes::Q => "q", + LinuxScanCodes::R => "r", + LinuxScanCodes::S => "s", + LinuxScanCodes::T => "t", + LinuxScanCodes::U => "u", + LinuxScanCodes::V => "v", + LinuxScanCodes::W => "w", + LinuxScanCodes::X => "x", + LinuxScanCodes::Y => "y", + LinuxScanCodes::Z => "z", + LinuxScanCodes::Digit0 => ")", + LinuxScanCodes::Digit1 => "!", + LinuxScanCodes::Digit2 => "@", + LinuxScanCodes::Digit3 => "#", + LinuxScanCodes::Digit4 => "$", + LinuxScanCodes::Digit5 => "%", + LinuxScanCodes::Digit6 => "^", + LinuxScanCodes::Digit7 => "&", + LinuxScanCodes::Digit8 => "*", + LinuxScanCodes::Digit9 => "(", + LinuxScanCodes::Backquote => "~", + LinuxScanCodes::Minus => "_", + LinuxScanCodes::Equal => "+", + LinuxScanCodes::LeftBracket => "{", + LinuxScanCodes::RightBracket => "}", + LinuxScanCodes::Backslash => "|", + LinuxScanCodes::Semicolon => ":", + LinuxScanCodes::Quote => "\"", + LinuxScanCodes::Comma => "<", + LinuxScanCodes::Period => ">", + LinuxScanCodes::Slash => "?", + LinuxScanCodes::IntlBackslash => "unknown", + LinuxScanCodes::IntlRo => "unknown", + } + } } #[cfg(all(test, any(feature = "wayland", feature = "x11")))] @@ -388,8 +443,21 @@ mod tests { continue; } let keycode = xkbcommon::xkb::Keycode::new(scan_code as u32); - let key = mapper.get_key(keycode, &mut crate::Modifiers::default()); - assert_eq!(key, Some(scan_code.to_str().to_string())); + let key = mapper + .get_key(keycode, &mut crate::Modifiers::default()) + .unwrap(); + assert_eq!(key.as_str(), scan_code.to_str()); + + let shifted_key = mapper + .get_key( + keycode, + &mut crate::Modifiers { + shift: true, + ..Default::default() + }, + ) + .unwrap(); + assert_eq!(shifted_key.as_str(), scan_code.to_shifted()); } } }