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}