keys.go

 1package filepicker
 2
 3import (
 4	"github.com/charmbracelet/bubbles/v2/key"
 5	"github.com/opencode-ai/opencode/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	InsertCWD,
16	Close key.Binding
17}
18
19func DefaultKeyMap() KeyMap {
20	return KeyMap{
21		Select: key.NewBinding(
22			key.WithKeys("enter"),
23			key.WithHelp("enter", "accept"),
24		),
25		Down: key.NewBinding(
26			key.WithKeys("down", "j"),
27			key.WithHelp("down/j", "move down"),
28		),
29		Up: key.NewBinding(
30			key.WithKeys("up", "k"),
31			key.WithHelp("up/k", "move up"),
32		),
33		Forward: key.NewBinding(
34			key.WithKeys("right", "l"),
35			key.WithHelp("right/l", "move forward"),
36		),
37		Backward: key.NewBinding(
38			key.WithKeys("left", "h"),
39			key.WithHelp("left/h", "move backward"),
40		),
41		InsertCWD: key.NewBinding(
42			key.WithKeys("i"),
43			key.WithHelp("i", "manual path input"),
44		),
45		Close: key.NewBinding(
46			key.WithKeys("esc"),
47			key.WithHelp("esc", "close/exit"),
48		),
49	}
50}
51
52// FullHelp implements help.KeyMap.
53func (k KeyMap) FullHelp() [][]key.Binding {
54	m := [][]key.Binding{}
55	slice := layout.KeyMapToSlice(k)
56	for i := 0; i < len(slice); i += 4 {
57		end := min(i+4, len(slice))
58		m = append(m, slice[i:end])
59	}
60	return m
61}
62
63// ShortHelp implements help.KeyMap.
64func (k KeyMap) ShortHelp() []key.Binding {
65	return []key.Binding{
66		k.InsertCWD,
67		key.NewBinding(
68			key.WithHelp("↑↓←→", "navigate"),
69		),
70		k.Select,
71		k.Close,
72	}
73}