keybinding.rs

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