summaryrefslogtreecommitdiff
path: root/internal/tui/common/keys.go
blob: 92d946c913c82c104f31679aa56f4b7e76f03f7a (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
80
81
82
83
84
85
86
87
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
	Seven    key.Binding
	DirGroup 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", "lat+gaps")),
		Six:      key.NewBinding(key.WithKeys("6"), key.WithHelp("6", "stream")),
		Seven:    key.NewBinding(key.WithKeys("7"), key.WithHelp("7", "stream")),
		DirGroup: key.NewBinding(key.WithKeys("d"), key.WithHelp("d", "dir group")),
		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.DirGroup, k.Refresh, k.Help, k.Quit)

	return [][]key.Binding{
		{k.One, k.Two, k.Three, k.Four, k.Five, k.Six},
		controls,
		{
			helpTextBinding("left/right", "tab"),
			helpTextBinding("h/l", "tab"),
			helpTextBinding("j/k", "scroll"),
			helpTextBinding("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}
}

func helpTextBinding(keyText, desc string) key.Binding {
	return key.NewBinding(key.WithHelp(keyText, desc))
}