keys.go

 1package filepicker
 2
 3import (
 4	"github.com/charmbracelet/bubbles/v2/key"
 5	"github.com/charmbracelet/crush/internal/tui/layout"
 6)
 7
 8// KeyMap defines keyboard bindings for dialog management.
 9type KeyMap struct {
10	Select,
11	Down,
12	Up,
13	Forward,
14	Backward,
15	Close key.Binding
16}
17
18func DefaultKeyMap() KeyMap {
19	return KeyMap{
20		Select: key.NewBinding(
21			key.WithKeys("enter"),
22			key.WithHelp("enter", "accept"),
23		),
24		Down: key.NewBinding(
25			key.WithKeys("down", "j"),
26			key.WithHelp("down/j", "move down"),
27		),
28		Up: key.NewBinding(
29			key.WithKeys("up", "k"),
30			key.WithHelp("up/k", "move up"),
31		),
32		Forward: key.NewBinding(
33			key.WithKeys("right", "l"),
34			key.WithHelp("right/l", "move forward"),
35		),
36		Backward: key.NewBinding(
37			key.WithKeys("left", "h"),
38			key.WithHelp("left/h", "move backward"),
39		),
40
41		Close: key.NewBinding(
42			key.WithKeys("esc"),
43			key.WithHelp("esc", "close/exit"),
44		),
45	}
46}
47
48// FullHelp implements help.KeyMap.
49func (k KeyMap) FullHelp() [][]key.Binding {
50	m := [][]key.Binding{}
51	slice := layout.KeyMapToSlice(k)
52	for i := 0; i < len(slice); i += 4 {
53		end := min(i+4, len(slice))
54		m = append(m, slice[i:end])
55	}
56	return m
57}
58
59// ShortHelp implements help.KeyMap.
60func (k KeyMap) ShortHelp() []key.Binding {
61	return []key.Binding{
62		key.NewBinding(
63			key.WithKeys("right", "l", "left", "h", "up", "k", "down", "j"),
64			key.WithHelp("↑↓←→", "navigate"),
65		),
66		k.Select,
67		k.Close,
68	}
69}