keymap.go

 1// Package viewport provides a component for rendering a viewport in a Bubble
 2// Tea.
 3package viewport
 4
 5import "github.com/charmbracelet/bubbles/v2/key"
 6
 7// KeyMap defines the keybindings for the viewport. Note that you don't
 8// necessary need to use keybindings at all; the viewport can be controlled
 9// programmatically with methods like Model.LineDown(1). See the GoDocs for
10// details.
11type KeyMap struct {
12	PageDown     key.Binding
13	PageUp       key.Binding
14	HalfPageUp   key.Binding
15	HalfPageDown key.Binding
16	Down         key.Binding
17	Up           key.Binding
18	Left         key.Binding
19	Right        key.Binding
20}
21
22// DefaultKeyMap returns a set of pager-like default keybindings.
23func DefaultKeyMap() KeyMap {
24	return KeyMap{
25		PageDown: key.NewBinding(
26			key.WithKeys("pgdown", "space", "f"),
27			key.WithHelp("f/pgdn", "page down"),
28		),
29		PageUp: key.NewBinding(
30			key.WithKeys("pgup", "b"),
31			key.WithHelp("b/pgup", "page up"),
32		),
33		HalfPageUp: key.NewBinding(
34			key.WithKeys("u", "ctrl+u"),
35			key.WithHelp("u", "½ page up"),
36		),
37		HalfPageDown: key.NewBinding(
38			key.WithKeys("d", "ctrl+d"),
39			key.WithHelp("d", "½ page down"),
40		),
41		Up: key.NewBinding(
42			key.WithKeys("up", "k"),
43			key.WithHelp("↑/k", "up"),
44		),
45		Down: key.NewBinding(
46			key.WithKeys("down", "j"),
47			key.WithHelp("↓/j", "down"),
48		),
49		Left: key.NewBinding(
50			key.WithKeys("left", "h"),
51			key.WithHelp("←/h", "move left"),
52		),
53		Right: key.NewBinding(
54			key.WithKeys("right", "l"),
55			key.WithHelp("→/l", "move right"),
56		),
57	}
58}