keys.go

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