summaryrefslogtreecommitdiff
path: root/internal/tui/common/keys.go
blob: 1111def4122c96a31a175c4abcd05b234c95e7e3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package common

import "github.com/charmbracelet/bubbles/key"

// KeyMap groups all key bindings shared by TUI screens.
type KeyMap struct {
	Tab      key.Binding
	ShiftTab key.Binding
	One      key.Binding
	Two      key.Binding
	Three    key.Binding
	Four     key.Binding
	Five     key.Binding
	Six      key.Binding
	Export   key.Binding
	Quit     key.Binding
	Help     key.Binding
	Enter    key.Binding
	Esc      key.Binding
	Refresh  key.Binding
}

// Keys contains the default shared key map.
var Keys = DefaultKeyMap()

// DefaultKeyMap builds the default key bindings used by models.
func DefaultKeyMap() KeyMap {
	return KeyMap{
		Tab:      key.NewBinding(key.WithKeys("tab"), key.WithHelp("tab", "next tab")),
		ShiftTab: key.NewBinding(key.WithKeys("shift+tab"), key.WithHelp("shift+tab", "prev tab")),
		One:      key.NewBinding(key.WithKeys("1"), key.WithHelp("1", "overview")),
		Two:      key.NewBinding(key.WithKeys("2"), key.WithHelp("2", "syscalls")),
		Three:    key.NewBinding(key.WithKeys("3"), key.WithHelp("3", "files")),
		Four:     key.NewBinding(key.WithKeys("4"), key.WithHelp("4", "processes")),
		Five:     key.NewBinding(key.WithKeys("5"), key.WithHelp("5", "latency")),
		Six:      key.NewBinding(key.WithKeys("6"), key.WithHelp("6", "gaps")),
		Export:   key.NewBinding(key.WithKeys("e"), key.WithHelp("e", "export")),
		Quit:     key.NewBinding(key.WithKeys("q", "ctrl+c"), key.WithHelp("q", "quit")),
		Help:     key.NewBinding(key.WithKeys("?"), key.WithHelp("?", "help")),
		Enter:    key.NewBinding(key.WithKeys("enter"), key.WithHelp("enter", "select")),
		Esc:      key.NewBinding(key.WithKeys("esc"), key.WithHelp("esc", "back")),
		Refresh:  key.NewBinding(key.WithKeys("r"), key.WithHelp("r", "refresh")),
	}
}

// DashboardShortHelp returns compact bindings for dashboard help bars.
func (k KeyMap) DashboardShortHelp() []key.Binding {
	bindings := []key.Binding{k.Tab, k.ShiftTab}
	if help := k.Export.Help(); help.Key != "" || help.Desc != "" {
		bindings = append(bindings, k.Export)
	}
	bindings = append(bindings, k.Help, k.Quit)
	return bindings
}

// DashboardFullHelp returns grouped bindings for dashboard overlays.
func (k KeyMap) DashboardFullHelp() [][]key.Binding {
	controls := []key.Binding{k.Tab, k.ShiftTab}
	if help := k.Export.Help(); help.Key != "" || help.Desc != "" {
		controls = append(controls, k.Export)
	}
	controls = append(controls, k.Refresh, k.Help, k.Quit)

	return [][]key.Binding{
		{k.One, k.Two, k.Three, k.Four, k.Five, k.Six},
		controls,
		{
			key.NewBinding(key.WithKeys("left/right"), key.WithHelp("left/right", "tab")),
			key.NewBinding(key.WithKeys("h/l"), key.WithHelp("h/l", "tab")),
			key.NewBinding(key.WithKeys("j/k"), key.WithHelp("j/k", "scroll")),
			key.NewBinding(key.WithKeys("up/down"), key.WithHelp("up/down", "scroll")),
		},
	}
}

// PickerShortHelp returns compact bindings for the PID picker.
func (k KeyMap) PickerShortHelp() []key.Binding {
	return []key.Binding{k.Enter, k.Refresh, k.Esc}
}