keys.go

 1package permissions
 2
 3import (
 4	"github.com/charmbracelet/bubbles/v2/key"
 5	"github.com/charmbracelet/crush/internal/tui/layout"
 6)
 7
 8type KeyMap struct {
 9	Left,
10	Right,
11	Tab,
12	Select,
13	Allow,
14	AllowSession,
15	Deny key.Binding
16}
17
18func DefaultKeyMap() KeyMap {
19	return KeyMap{
20		Left: key.NewBinding(
21			key.WithKeys("left", "h"),
22			key.WithHelp("←", "previous"),
23		),
24		Right: key.NewBinding(
25			key.WithKeys("right", "l"),
26			key.WithHelp("→", "next"),
27		),
28		Tab: key.NewBinding(
29			key.WithKeys("tab"),
30			key.WithHelp("tab", "switch"),
31		),
32		Allow: key.NewBinding(
33			key.WithKeys("a", "ctrl+a"),
34			key.WithHelp("a", "allow"),
35		),
36		AllowSession: key.NewBinding(
37			key.WithKeys("s", "ctrl+s"),
38			key.WithHelp("s", "allow session"),
39		),
40		Deny: key.NewBinding(
41			key.WithKeys("d", "ctrl+d"),
42			key.WithHelp("d", "deny"),
43		),
44		Select: key.NewBinding(
45			key.WithKeys("enter", "tab", "ctrl+y"),
46			key.WithHelp("enter", "confirm"),
47		),
48	}
49}
50
51// FullHelp implements help.KeyMap.
52func (k KeyMap) FullHelp() [][]key.Binding {
53	m := [][]key.Binding{}
54	slice := layout.KeyMapToSlice(k)
55	for i := 0; i < len(slice); i += 4 {
56		end := min(i+4, len(slice))
57		m = append(m, slice[i:end])
58	}
59	return m
60}
61
62// ShortHelp implements help.KeyMap.
63func (k KeyMap) ShortHelp() []key.Binding {
64	return []key.Binding{
65		k.Allow,
66		k.AllowSession,
67		k.Deny,
68		k.Select,
69	}
70}