1package chat
2
3import (
4 "github.com/charmbracelet/bubbles/v2/key"
5)
6
7type KeyMap struct {
8 NewSession key.Binding
9 FilePicker key.Binding
10 Cancel key.Binding
11 Tab key.Binding
12}
13
14func DefaultKeyMap() KeyMap {
15 return KeyMap{
16 NewSession: key.NewBinding(
17 key.WithKeys("ctrl+n"),
18 key.WithHelp("ctrl+n", "new session"),
19 ),
20 Cancel: key.NewBinding(
21 key.WithKeys("esc"),
22 key.WithHelp("esc", "cancel"),
23 ),
24 Tab: key.NewBinding(
25 key.WithKeys("tab"),
26 key.WithHelp("tab", "change focus"),
27 ),
28 FilePicker: key.NewBinding(
29 key.WithKeys("ctrl+f"),
30 key.WithHelp("ctrl+f", "select files to upload"),
31 ),
32 }
33}
34
35// KeyBindings implements layout.KeyMapProvider
36func (k KeyMap) KeyBindings() []key.Binding {
37 return []key.Binding{
38 k.NewSession,
39 k.FilePicker,
40 k.Cancel,
41 k.Tab,
42 }
43}
44
45// FullHelp implements help.KeyMap.
46func (k KeyMap) FullHelp() [][]key.Binding {
47 m := [][]key.Binding{}
48 slice := k.KeyBindings()
49 for i := 0; i < len(slice); i += 4 {
50 end := min(i+4, len(slice))
51 m = append(m, slice[i:end])
52 }
53 return m
54}
55
56// ShortHelp implements help.KeyMap.
57func (k KeyMap) ShortHelp() []key.Binding {
58 return []key.Binding{
59 k.Tab,
60 }
61}