1package keymap
2
3import "github.com/charmbracelet/bubbles/key"
4
5// KeyMap is a map of key bindings for the UI.
6type KeyMap struct {
7 Quit key.Binding
8 Up key.Binding
9 Down key.Binding
10 UpDown key.Binding
11 LeftRight key.Binding
12 Arrows key.Binding
13 Select key.Binding
14 Section key.Binding
15 Back key.Binding
16 PrevPage key.Binding
17 NextPage key.Binding
18 Help key.Binding
19
20 SelectItem key.Binding
21 BackItem key.Binding
22}
23
24// DefaultKeyMap returns the default key map.
25func DefaultKeyMap() *KeyMap {
26 km := new(KeyMap)
27
28 km.Quit = key.NewBinding(
29 key.WithKeys(
30 "q",
31 "ctrl+c",
32 ),
33 key.WithHelp(
34 "q",
35 "quit",
36 ),
37 )
38
39 km.Up = key.NewBinding(
40 key.WithKeys(
41 "up",
42 "k",
43 ),
44 key.WithHelp(
45 "↑",
46 "up",
47 ),
48 )
49
50 km.Down = key.NewBinding(
51 key.WithKeys(
52 "down",
53 "j",
54 ),
55 key.WithHelp(
56 "↓",
57 "down",
58 ),
59 )
60
61 km.UpDown = key.NewBinding(
62 key.WithKeys(
63 "up",
64 "down",
65 "k",
66 "j",
67 ),
68 key.WithHelp(
69 "↑↓",
70 "navigate",
71 ),
72 )
73
74 km.LeftRight = key.NewBinding(
75 key.WithKeys(
76 "left",
77 "h",
78 "right",
79 "l",
80 ),
81 key.WithHelp(
82 "←→",
83 "navigate",
84 ),
85 )
86
87 km.Arrows = key.NewBinding(
88 key.WithKeys(
89 "up",
90 "right",
91 "down",
92 "left",
93 "k",
94 "j",
95 "h",
96 "l",
97 ),
98 key.WithHelp(
99 "↑←↓→",
100 "navigate",
101 ),
102 )
103
104 km.Select = key.NewBinding(
105 key.WithKeys(
106 "enter",
107 ),
108 key.WithHelp(
109 "enter",
110 "select",
111 ),
112 )
113
114 km.Section = key.NewBinding(
115 key.WithKeys(
116 "tab",
117 "shift+tab",
118 ),
119 key.WithHelp(
120 "tab",
121 "section",
122 ),
123 )
124
125 km.Back = key.NewBinding(
126 key.WithKeys(
127 "esc",
128 ),
129 key.WithHelp(
130 "esc",
131 "back",
132 ),
133 )
134
135 km.PrevPage = key.NewBinding(
136 key.WithKeys(
137 "pgup",
138 "b",
139 "u",
140 ),
141 key.WithHelp(
142 "pgup",
143 "prev page",
144 ),
145 )
146
147 km.NextPage = key.NewBinding(
148 key.WithKeys(
149 "pgdown",
150 "f",
151 "d",
152 ),
153 key.WithHelp(
154 "pgdn",
155 "next page",
156 ),
157 )
158
159 km.Help = key.NewBinding(
160 key.WithKeys(
161 "?",
162 ),
163 key.WithHelp(
164 "?",
165 "toggle help",
166 ),
167 )
168
169 km.SelectItem = key.NewBinding(
170 key.WithKeys(
171 "l",
172 "right",
173 ),
174 key.WithHelp(
175 "→",
176 "select",
177 ),
178 )
179
180 km.BackItem = key.NewBinding(
181 key.WithKeys(
182 "h",
183 "left",
184 ),
185 key.WithHelp(
186 "←",
187 "back",
188 ),
189 )
190
191 return km
192}