1package init
2
3import (
4 "github.com/charmbracelet/bubbles/v2/key"
5 "github.com/charmbracelet/crush/internal/tui/layout"
6)
7
8type KeyMap struct {
9 ChangeSelection,
10 Select,
11 Y,
12 N,
13 Close key.Binding
14}
15
16func DefaultKeyMap() KeyMap {
17 return KeyMap{
18 ChangeSelection: key.NewBinding(
19 key.WithKeys("tab", "left", "right", "h", "l"),
20 key.WithHelp("tab/←/→", "toggle selection"),
21 ),
22 Select: key.NewBinding(
23 key.WithKeys("enter"),
24 key.WithHelp("enter", "confirm"),
25 ),
26 Y: key.NewBinding(
27 key.WithKeys("y"),
28 key.WithHelp("y", "yes"),
29 ),
30 N: key.NewBinding(
31 key.WithKeys("n"),
32 key.WithHelp("n", "no"),
33 ),
34 Close: key.NewBinding(
35 key.WithKeys("esc"),
36 key.WithHelp("esc", "cancel"),
37 ),
38 }
39}
40
41// FullHelp implements help.KeyMap.
42func (k KeyMap) FullHelp() [][]key.Binding {
43 m := [][]key.Binding{}
44 slice := layout.KeyMapToSlice(k)
45 for i := 0; i < len(slice); i += 4 {
46 end := min(i+4, len(slice))
47 m = append(m, slice[i:end])
48 }
49 return m
50}
51
52// ShortHelp implements help.KeyMap.
53func (k KeyMap) ShortHelp() []key.Binding {
54 return []key.Binding{
55 k.ChangeSelection,
56 k.Select,
57 k.Close,
58 }
59}