keybinding.rs

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