keys.go

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