keys.go

 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}