keybinding.rs

 1use gpui::NoAction;
 2use gpui::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    fn render(&mut self, _cx: &mut ViewContext<Self>) -> impl IntoElement {
17        let all_modifier_permutations = ["ctrl", "alt", "cmd", "shift"].into_iter().permutations(2);
18
19        Story::container()
20            .child(Story::title_for::<KeyBinding>())
21            .child(Story::label("Single Key"))
22            .child(KeyBinding::new(binding("Z")))
23            .child(Story::label("Single Key with Modifier"))
24            .child(
25                div()
26                    .flex()
27                    .gap_3()
28                    .child(KeyBinding::new(binding("ctrl-c")))
29                    .child(KeyBinding::new(binding("alt-c")))
30                    .child(KeyBinding::new(binding("cmd-c")))
31                    .child(KeyBinding::new(binding("shift-c"))),
32            )
33            .child(Story::label("Single Key with Modifier (Permuted)"))
34            .child(
35                div().flex().flex_col().children(
36                    all_modifier_permutations
37                        .chunks(4)
38                        .into_iter()
39                        .map(|chunk| {
40                            div()
41                                .flex()
42                                .gap_4()
43                                .py_3()
44                                .children(chunk.map(|permutation| {
45                                    KeyBinding::new(binding(&*(permutation.join("-") + "-x")))
46                                }))
47                        }),
48                ),
49            )
50            .child(Story::label("Single Key with All Modifiers"))
51            .child(KeyBinding::new(binding("ctrl-alt-cmd-shift-z")))
52            .child(Story::label("Chord"))
53            .child(KeyBinding::new(binding("a z")))
54            .child(Story::label("Chord with Modifier"))
55            .child(KeyBinding::new(binding("ctrl-a shift-z")))
56            .child(KeyBinding::new(binding("fn-s")))
57    }
58}