1package sessions
 2
 3import (
 4	"github.com/charmbracelet/bubbles/v2/key"
 5)
 6
 7type KeyMap struct {
 8	Select,
 9	Next,
10	Previous,
11	Delete,
12	Close key.Binding
13}
14
15func DefaultKeyMap() KeyMap {
16	return KeyMap{
17		Select: key.NewBinding(
18			key.WithKeys("enter", "tab", "ctrl+y"),
19			key.WithHelp("enter", "confirm"),
20		),
21		Next: key.NewBinding(
22			key.WithKeys("down", "ctrl+n"),
23			key.WithHelp("↓", "next item"),
24		),
25		Previous: key.NewBinding(
26			key.WithKeys("up", "ctrl+p"),
27			key.WithHelp("↑", "previous item"),
28		),
29		Delete: key.NewBinding(
30			key.WithKeys("delete", "d"),
31			key.WithHelp("d/del", "delete session"),
32		),
33		Close: key.NewBinding(
34			key.WithKeys("esc"),
35			key.WithHelp("esc", "cancel"),
36		),
37	}
38}
39
40// KeyBindings implements layout.KeyMapProvider
41func (k KeyMap) KeyBindings() []key.Binding {
42	return []key.Binding{
43		k.Select,
44		k.Next,
45		k.Previous,
46		k.Delete,
47		k.Close,
48	}
49}
50
51// FullHelp implements help.KeyMap.
52func (k KeyMap) FullHelp() [][]key.Binding {
53	m := [][]key.Binding{}
54	slice := k.KeyBindings()
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		key.NewBinding(
66			key.WithKeys("down", "up"),
67			key.WithHelp("↑↓", "choose"),
68		),
69		k.Select,
70		k.Delete,
71		k.Close,
72	}
73}