1package tui
2
3import (
4 "github.com/charmbracelet/bubbles/v2/key"
5 "github.com/opencode-ai/opencode/internal/tui/layout"
6)
7
8type KeyMap struct {
9 Logs key.Binding
10 Quit key.Binding
11 Help key.Binding
12 Commands key.Binding
13 Sessions key.Binding
14 FilePicker key.Binding
15}
16
17func DefaultKeyMap() KeyMap {
18 return KeyMap{
19 Logs: key.NewBinding(
20 key.WithKeys("ctrl+l"),
21 key.WithHelp("ctrl+l", "logs"),
22 ),
23 Quit: key.NewBinding(
24 key.WithKeys("ctrl+c"),
25 key.WithHelp("ctrl+c", "quit"),
26 ),
27
28 Help: key.NewBinding(
29 key.WithKeys("ctrl+_"),
30 key.WithHelp("ctrl+?", "toggle help"),
31 ),
32 Commands: key.NewBinding(
33 key.WithKeys("ctrl+p"),
34 key.WithHelp("ctrl+p", "commands"),
35 ),
36 Sessions: key.NewBinding(
37 key.WithKeys("ctrl+s"),
38 key.WithHelp("ctrl+s", "sessions"),
39 ),
40 FilePicker: key.NewBinding(
41 key.WithKeys("ctrl+f"),
42 key.WithHelp("ctrl+f", "select files to upload"),
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}