1package commands
2
3import (
4 "github.com/charmbracelet/bubbles/v2/key"
5)
6
7type CommandsDialogKeyMap struct {
8 Select,
9 Next,
10 Previous,
11 Tab,
12 Close key.Binding
13}
14
15func DefaultCommandsDialogKeyMap() CommandsDialogKeyMap {
16 return CommandsDialogKeyMap{
17 Select: key.NewBinding(
18 key.WithKeys("enter", "ctrl+y"),
19 key.WithHelp("enter", "confirm"),
20 ),
21 Next: key.NewBinding(
22 key.WithKeys("down", "ctrl+n"),
23 key.WithHelp("↓", "next item"),
24 ),
25 Previous: key.NewBinding(
26 key.WithKeys("up", "ctrl+p"),
27 key.WithHelp("↑", "previous item"),
28 ),
29 Tab: key.NewBinding(
30 key.WithKeys("tab"),
31 key.WithHelp("tab", "switch selection"),
32 ),
33 Close: key.NewBinding(
34 key.WithKeys("esc", "alt+esc"),
35 key.WithHelp("esc", "cancel"),
36 ),
37 }
38}
39
40// KeyBindings implements layout.KeyMapProvider
41func (k CommandsDialogKeyMap) KeyBindings() []key.Binding {
42 return []key.Binding{
43 k.Select,
44 k.Next,
45 k.Previous,
46 k.Tab,
47 k.Close,
48 }
49}
50
51// FullHelp implements help.KeyMap.
52func (k CommandsDialogKeyMap) FullHelp() [][]key.Binding {
53 m := [][]key.Binding{}
54 slice := k.KeyBindings()
55 for i := 0; i < len(slice); i += 4 {
56 end := min(i+4, len(slice))
57 m = append(m, slice[i:end])
58 }
59 return m
60}
61
62// ShortHelp implements help.KeyMap.
63func (k CommandsDialogKeyMap) ShortHelp() []key.Binding {
64 return []key.Binding{
65 k.Tab,
66 key.NewBinding(
67 key.WithKeys("down", "up"),
68 key.WithHelp("↑↓", "choose"),
69 ),
70 k.Select,
71 k.Close,
72 }
73}
74
75type ArgumentsDialogKeyMap struct {
76 Confirm key.Binding
77 Next key.Binding
78 Previous key.Binding
79 Paste key.Binding
80 Close key.Binding
81}
82
83func DefaultArgumentsDialogKeyMap() ArgumentsDialogKeyMap {
84 return ArgumentsDialogKeyMap{
85 Confirm: key.NewBinding(
86 key.WithKeys("enter"),
87 key.WithHelp("enter", "confirm"),
88 ),
89
90 Next: key.NewBinding(
91 key.WithKeys("tab", "down"),
92 key.WithHelp("tab/↓", "next"),
93 ),
94 Previous: key.NewBinding(
95 key.WithKeys("shift+tab", "up"),
96 key.WithHelp("shift+tab/↑", "previous"),
97 ),
98 Paste: key.NewBinding(
99 key.WithKeys("ctrl+v"),
100 key.WithHelp("ctrl+v", "paste"),
101 ),
102 Close: key.NewBinding(
103 key.WithKeys("esc", "alt+esc"),
104 key.WithHelp("esc", "cancel"),
105 ),
106 }
107}
108
109// KeyBindings implements layout.KeyMapProvider
110func (k ArgumentsDialogKeyMap) KeyBindings() []key.Binding {
111 return []key.Binding{
112 k.Confirm,
113 k.Next,
114 k.Previous,
115 k.Paste,
116 k.Close,
117 }
118}
119
120// FullHelp implements help.KeyMap.
121func (k ArgumentsDialogKeyMap) FullHelp() [][]key.Binding {
122 m := [][]key.Binding{}
123 slice := k.KeyBindings()
124 for i := 0; i < len(slice); i += 4 {
125 end := min(i+4, len(slice))
126 m = append(m, slice[i:end])
127 }
128 return m
129}
130
131// ShortHelp implements help.KeyMap.
132func (k ArgumentsDialogKeyMap) ShortHelp() []key.Binding {
133 return []key.Binding{
134 k.Confirm,
135 k.Next,
136 k.Previous,
137 k.Paste,
138 k.Close,
139 }
140}