keybinding.rs

 1use gpui::NoAction;
 2use gpui::Render;
 3use itertools::Itertools;
 4use story::Story;
 5
 6use crate::{prelude::*, KeyBinding};
 7
 8pub struct KeybindingStory;
 9
10pub fn binding(key: &str) -> gpui::KeyBinding {
11    gpui::KeyBinding::new(key, NoAction {}, None)
12}
13
14impl Render for KeybindingStory {
15    fn render(&mut self, _cx: &mut ViewContext<Self>) -> impl IntoElement {
16        let all_modifier_permutations = ["ctrl", "alt", "cmd", "shift"].into_iter().permutations(2);
17
18        Story::container()
19            .child(Story::title_for::<KeyBinding>())
20            .child(Story::label("Single Key"))
21            .child(KeyBinding::new(binding("Z")))
22            .child(Story::label("Single Key with Modifier"))
23            .child(
24                div()
25                    .flex()
26                    .gap_3()
27                    .child(KeyBinding::new(binding("ctrl-c")))
28                    .child(KeyBinding::new(binding("alt-c")))
29                    .child(KeyBinding::new(binding("cmd-c")))
30                    .child(KeyBinding::new(binding("shift-c"))),
31            )
32            .child(Story::label("Single Key with Modifier (Permuted)"))
33            .child(
34                div().flex().flex_col().children(
35                    all_modifier_permutations
36                        .chunks(4)
37                        .into_iter()
38                        .map(|chunk| {
39                            div()
40                                .flex()
41                                .gap_4()
42                                .py_3()
43                                .children(chunk.map(|permutation| {
44                                    KeyBinding::new(binding(&(permutation.join("-") + "-x")))
45                                }))
46                        }),
47                ),
48            )
49            .child(Story::label("Single Key with All Modifiers"))
50            .child(KeyBinding::new(binding("ctrl-alt-cmd-shift-z")))
51            .child(Story::label("Chord"))
52            .child(KeyBinding::new(binding("a z")))
53            .child(Story::label("Chord with Modifier"))
54            .child(KeyBinding::new(binding("ctrl-a shift-z")))
55            .child(KeyBinding::new(binding("fn-s")))
56            .child(Story::label("Single Key with All Modifiers (Linux)"))
57            .child(
58                KeyBinding::new(binding("ctrl-alt-cmd-shift-z"))
59                    .platform_style(PlatformStyle::Linux),
60            )
61            .child(Story::label("Chord (Linux)"))
62            .child(KeyBinding::new(binding("a z")).platform_style(PlatformStyle::Linux))
63            .child(Story::label("Chord with Modifier (Linux)"))
64            .child(KeyBinding::new(binding("ctrl-a shift-z")).platform_style(PlatformStyle::Linux))
65            .child(KeyBinding::new(binding("fn-s")).platform_style(PlatformStyle::Linux))
66            .child(Story::label("Single Key with All Modifiers (Windows)"))
67            .child(
68                KeyBinding::new(binding("ctrl-alt-cmd-shift-z"))
69                    .platform_style(PlatformStyle::Windows),
70            )
71            .child(Story::label("Chord (Windows)"))
72            .child(KeyBinding::new(binding("a z")).platform_style(PlatformStyle::Windows))
73            .child(Story::label("Chord with Modifier (Windows)"))
74            .child(
75                KeyBinding::new(binding("ctrl-a shift-z")).platform_style(PlatformStyle::Windows),
76            )
77            .child(KeyBinding::new(binding("fn-s")).platform_style(PlatformStyle::Windows))
78    }
79}