diff --git a/crates/story/src/kbd_story.rs b/crates/story/src/kbd_story.rs index 90370116..45281759 100644 --- a/crates/story/src/kbd_story.rs +++ b/crates/story/src/kbd_story.rs @@ -49,6 +49,8 @@ impl Render for KbdStory { .gap_2() .child(Kbd::new(Keystroke::parse("cmd-shift-p").unwrap())) .child(Kbd::new(Keystroke::parse("cmd-ctrl-t").unwrap())) + .child(Kbd::new(Keystroke::parse("cmd--").unwrap())) + .child(Kbd::new(Keystroke::parse("cmd-+").unwrap())) .child(Kbd::new(Keystroke::parse("escape").unwrap())) .child(Kbd::new(Keystroke::parse("backspace").unwrap())) .child(Kbd::new(Keystroke::parse("/").unwrap())) diff --git a/crates/ui/src/kbd.rs b/crates/ui/src/kbd.rs index 09195f08..3bd423ab 100644 --- a/crates/ui/src/kbd.rs +++ b/crates/ui/src/kbd.rs @@ -107,74 +107,68 @@ impl Kbd { } let mut keys = String::new(); - - for key in key.key.split("-") { - if parts.len() > 0 && keys.len() > 0 { - keys.push_str(DIVIDER); - } - - match key { - #[cfg(target_os = "macos")] - "ctrl" => keys.push('⌃'), - #[cfg(not(target_os = "macos"))] - "ctrl" => keys.push_str("Ctrl"), - #[cfg(target_os = "macos")] - "alt" => keys.push('⌥'), - #[cfg(not(target_os = "macos"))] - "alt" => keys.push_str("Alt"), - #[cfg(target_os = "macos")] - "shift" => keys.push('⇧'), - #[cfg(not(target_os = "macos"))] - "shift" => keys.push_str("Shift"), - #[cfg(target_os = "macos")] - "cmd" => keys.push('⌘'), - #[cfg(not(target_os = "macos"))] - "cmd" => keys.push_str("Win"), - #[cfg(target_os = "macos")] - "space" => keys.push_str("Space"), - #[cfg(target_os = "macos")] - "backspace" => keys.push('⌫'), - #[cfg(not(target_os = "macos"))] - "backspace" => keys.push_str("Backspace"), - #[cfg(target_os = "macos")] - "delete" => keys.push('⌫'), - #[cfg(not(target_os = "macos"))] - "delete" => keys.push_str("Delete"), - #[cfg(target_os = "macos")] - "escape" => keys.push('⎋'), - #[cfg(not(target_os = "macos"))] - "escape" => keys.push_str("Esc"), - #[cfg(target_os = "macos")] - "enter" => keys.push('⏎'), - #[cfg(not(target_os = "macos"))] - "enter" => keys.push_str("Enter"), - "pagedown" => keys.push_str("Page Down"), - "pageup" => keys.push_str("Page Up"), - #[cfg(target_os = "macos")] - "left" => keys.push('←'), - #[cfg(not(target_os = "macos"))] - "left" => keys.push_str("Left"), - #[cfg(target_os = "macos")] - "right" => keys.push('→'), - #[cfg(not(target_os = "macos"))] - "right" => keys.push_str("Right"), - #[cfg(target_os = "macos")] - "up" => keys.push('↑'), - #[cfg(not(target_os = "macos"))] - "up" => keys.push_str("Up"), - #[cfg(target_os = "macos")] - "down" => keys.push('↓'), - #[cfg(not(target_os = "macos"))] - "down" => keys.push_str("Down"), - _ => { - if key.len() == 1 { - keys.push_str(&key.to_uppercase()); + let key_str = key.key.as_str(); + match key_str { + #[cfg(target_os = "macos")] + "ctrl" => keys.push('⌃'), + #[cfg(not(target_os = "macos"))] + "ctrl" => keys.push_str("Ctrl"), + #[cfg(target_os = "macos")] + "alt" => keys.push('⌥'), + #[cfg(not(target_os = "macos"))] + "alt" => keys.push_str("Alt"), + #[cfg(target_os = "macos")] + "shift" => keys.push('⇧'), + #[cfg(not(target_os = "macos"))] + "shift" => keys.push_str("Shift"), + #[cfg(target_os = "macos")] + "cmd" => keys.push('⌘'), + #[cfg(not(target_os = "macos"))] + "cmd" => keys.push_str("Win"), + #[cfg(target_os = "macos")] + "space" => keys.push_str("Space"), + #[cfg(target_os = "macos")] + "backspace" => keys.push('⌫'), + #[cfg(not(target_os = "macos"))] + "backspace" => keys.push_str("Backspace"), + #[cfg(target_os = "macos")] + "delete" => keys.push('⌫'), + #[cfg(not(target_os = "macos"))] + "delete" => keys.push_str("Delete"), + #[cfg(target_os = "macos")] + "escape" => keys.push('⎋'), + #[cfg(not(target_os = "macos"))] + "escape" => keys.push_str("Esc"), + #[cfg(target_os = "macos")] + "enter" => keys.push('⏎'), + #[cfg(not(target_os = "macos"))] + "enter" => keys.push_str("Enter"), + "pagedown" => keys.push_str("Page Down"), + "pageup" => keys.push_str("Page Up"), + #[cfg(target_os = "macos")] + "left" => keys.push('←'), + #[cfg(not(target_os = "macos"))] + "left" => keys.push_str("Left"), + #[cfg(target_os = "macos")] + "right" => keys.push('→'), + #[cfg(not(target_os = "macos"))] + "right" => keys.push_str("Right"), + #[cfg(target_os = "macos")] + "up" => keys.push('↑'), + #[cfg(not(target_os = "macos"))] + "up" => keys.push_str("Up"), + #[cfg(target_os = "macos")] + "down" => keys.push('↓'), + #[cfg(not(target_os = "macos"))] + "down" => keys.push_str("Down"), + _ => { + if key_str.len() == 1 { + keys.push_str(&key_str.to_uppercase()); + } else { + if let Some(first_char) = key_str.chars().next() { + keys.push_str(&format!("{}{}", first_char.to_uppercase(), &key_str[1..])); } else { - if let Some(first_char) = key.chars().next() { - keys.push_str(&format!("{}{}", first_char.to_uppercase(), &key[1..])); - } else { - keys.push_str(&key); - } + keys.push_str(&key_str); } } } @@ -224,6 +218,8 @@ mod tests { if cfg!(target_os = "macos") { assert_eq!(Kbd::format(&Keystroke::parse("cmd-a").unwrap()), "⌘A"); + assert_eq!(Kbd::format(&Keystroke::parse("cmd--").unwrap()), "⌘-"); + assert_eq!(Kbd::format(&Keystroke::parse("cmd-+").unwrap()), "⌘+"); assert_eq!(Kbd::format(&Keystroke::parse("cmd-enter").unwrap()), "⌘⏎"); assert_eq!( Kbd::format(&Keystroke::parse("secondary-f12").unwrap()),