1package commands
2
3import (
4 "github.com/charmbracelet/bubbles/v2/key"
5 "github.com/charmbracelet/crush/internal/tui/layout"
6)
7
8type CommandsDialogKeyMap struct {
9 Select,
10 Next,
11 Previous,
12 Tab,
13 Close key.Binding
14}
15
16func DefaultCommandsDialogKeyMap() CommandsDialogKeyMap {
17 return CommandsDialogKeyMap{
18 Select: key.NewBinding(
19 key.WithKeys("enter", "ctrl+y"),
20 key.WithHelp("enter", "confirm"),
21 ),
22 Next: key.NewBinding(
23 key.WithKeys("down", "ctrl+n"),
24 key.WithHelp("↓", "next item"),
25 ),
26 Previous: key.NewBinding(
27 key.WithKeys("up", "ctrl+p"),
28 key.WithHelp("↑", "previous item"),
29 ),
30 Tab: key.NewBinding(
31 key.WithKeys("tab"),
32 key.WithHelp("tab", "switch selection"),
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 CommandsDialogKeyMap) 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 CommandsDialogKeyMap) ShortHelp() []key.Binding {
54 return []key.Binding{
55 k.Tab,
56 key.NewBinding(
57 key.WithKeys("down", "up"),
58 key.WithHelp("↑↓", "choose"),
59 ),
60 k.Select,
61 k.Close,
62 }
63}
64
65type ArgumentsDialogKeyMap struct {
66 Confirm key.Binding
67 Next key.Binding
68 Previous key.Binding
69}
70
71func DefaultArgumentsDialogKeyMap() ArgumentsDialogKeyMap {
72 return ArgumentsDialogKeyMap{
73 Confirm: key.NewBinding(
74 key.WithKeys("enter"),
75 key.WithHelp("enter", "confirm"),
76 ),
77
78 Next: key.NewBinding(
79 key.WithKeys("tab", "down"),
80 key.WithHelp("tab/↓", "next"),
81 ),
82 Previous: key.NewBinding(
83 key.WithKeys("shift+tab", "up"),
84 key.WithHelp("shift+tab/↑", "previous"),
85 ),
86 }
87}
88
89// FullHelp implements help.KeyMap.
90func (k ArgumentsDialogKeyMap) FullHelp() [][]key.Binding {
91 m := [][]key.Binding{}
92 slice := layout.KeyMapToSlice(k)
93 for i := 0; i < len(slice); i += 4 {
94 end := min(i+4, len(slice))
95 m = append(m, slice[i:end])
96 }
97 return m
98}
99
100// ShortHelp implements help.KeyMap.
101func (k ArgumentsDialogKeyMap) ShortHelp() []key.Binding {
102 return []key.Binding{
103 k.Confirm,
104 k.Next,
105 k.Previous,
106 }
107}