keys.go

 1package init
 2
 3import (
 4	"github.com/charmbracelet/bubbles/v2/key"
 5	"github.com/charmbracelet/crush/internal/tui/layout"
 6)
 7
 8type KeyMap struct {
 9	ChangeSelection,
10	Select,
11	Y,
12	N,
13	Close key.Binding
14}
15
16func DefaultKeyMap() KeyMap {
17	return KeyMap{
18		ChangeSelection: key.NewBinding(
19			key.WithKeys("tab", "left", "right", "h", "l"),
20			key.WithHelp("tab/←/→", "toggle selection"),
21		),
22		Select: key.NewBinding(
23			key.WithKeys("enter"),
24			key.WithHelp("enter", "confirm"),
25		),
26		Y: key.NewBinding(
27			key.WithKeys("y"),
28			key.WithHelp("y", "yes"),
29		),
30		N: key.NewBinding(
31			key.WithKeys("n"),
32			key.WithHelp("n", "no"),
33		),
34		Close: key.NewBinding(
35			key.WithKeys("esc"),
36			key.WithHelp("esc", "cancel"),
37		),
38	}
39}
40
41// FullHelp implements help.KeyMap.
42func (k KeyMap) FullHelp() [][]key.Binding {
43	m := [][]key.Binding{}
44	slice := layout.KeyMapToSlice(k)
45	for i := 0; i < len(slice); i += 4 {
46		end := min(i+4, len(slice))
47		m = append(m, slice[i:end])
48	}
49	return m
50}
51
52// ShortHelp implements help.KeyMap.
53func (k KeyMap) ShortHelp() []key.Binding {
54	return []key.Binding{
55		k.ChangeSelection,
56		k.Select,
57		k.Close,
58	}
59}