keymap.go

  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}
 17
 18// DefaultKeyMap returns the default key map.
 19func DefaultKeyMap() *KeyMap {
 20	km := new(KeyMap)
 21
 22	km.Quit = key.NewBinding(
 23		key.WithKeys(
 24			"q",
 25			"ctrl+c",
 26		),
 27		key.WithHelp(
 28			"q",
 29			"quit",
 30		),
 31	)
 32
 33	km.Up = key.NewBinding(
 34		key.WithKeys(
 35			"up",
 36			"k",
 37		),
 38		key.WithHelp(
 39			"↑",
 40			"up",
 41		),
 42	)
 43
 44	km.Down = key.NewBinding(
 45		key.WithKeys(
 46			"down",
 47			"j",
 48		),
 49		key.WithHelp(
 50			"↓",
 51			"down",
 52		),
 53	)
 54
 55	km.UpDown = key.NewBinding(
 56		key.WithKeys(
 57			"up",
 58			"down",
 59			"k",
 60			"j",
 61		),
 62		key.WithHelp(
 63			"↑↓",
 64			"navigate",
 65		),
 66	)
 67
 68	km.LeftRight = key.NewBinding(
 69		key.WithKeys(
 70			"left",
 71			"h",
 72			"right",
 73			"l",
 74		),
 75		key.WithHelp(
 76			"←→",
 77			"navigate",
 78		),
 79	)
 80
 81	km.Arrows = key.NewBinding(
 82		key.WithKeys(
 83			"up",
 84			"right",
 85			"down",
 86			"left",
 87			"k",
 88			"j",
 89			"h",
 90			"l",
 91		),
 92		key.WithHelp(
 93			"↑←↓→",
 94			"navigate",
 95		),
 96	)
 97
 98	km.Select = key.NewBinding(
 99		key.WithKeys(
100			"enter",
101		),
102		key.WithHelp(
103			"enter",
104			"select",
105		),
106	)
107
108	km.Section = key.NewBinding(
109		key.WithKeys(
110			"tab",
111			"shift+tab",
112		),
113		key.WithHelp(
114			"tab",
115			"section",
116		),
117	)
118
119	km.Back = key.NewBinding(
120		key.WithKeys(
121			"esc",
122		),
123		key.WithHelp(
124			"esc",
125			"back",
126		),
127	)
128
129	return km
130}