1package status
2
3import (
4 "github.com/charmbracelet/bubbles/v2/key"
5 "github.com/charmbracelet/crush/internal/tui/layout"
6)
7
8type KeyMap struct {
9 Tab,
10 Commands,
11 Sessions,
12 Help key.Binding
13}
14
15func DefaultKeyMap(tabHelp string) KeyMap {
16 return KeyMap{
17 Tab: key.NewBinding(
18 key.WithKeys("tab"),
19 key.WithHelp("tab", tabHelp),
20 ),
21 Commands: key.NewBinding(
22 key.WithKeys("ctrl+p"),
23 key.WithHelp("ctrl+p", "commands"),
24 ),
25 Sessions: key.NewBinding(
26 key.WithKeys("ctrl+s"),
27 key.WithHelp("ctrl+s", "sessions"),
28 ),
29 Help: key.NewBinding(
30 key.WithKeys("ctrl+?", "ctrl+_", "ctrl+/"),
31 key.WithHelp("ctrl+?", "more"),
32 ),
33 }
34}
35
36// FullHelp implements help.KeyMap.
37func (k KeyMap) FullHelp() [][]key.Binding {
38 m := [][]key.Binding{}
39 slice := layout.KeyMapToSlice(k)
40 for i := 0; i < len(slice); i += 4 {
41 end := min(i+4, len(slice))
42 m = append(m, slice[i:end])
43 }
44 return m
45}
46
47// ShortHelp implements help.KeyMap.
48func (k KeyMap) ShortHelp() []key.Binding {
49 return []key.Binding{
50 k.Tab,
51 k.Commands,
52 k.Sessions,
53 k.Help,
54 }
55}