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