pkg/tui/keys.go 2.3 K raw
1
// Package tui holds bubbletea helpers shared by andromeda Go apps.
2
package tui
3
4
import "charm.land/bubbles/v2/key"
5
6
// KeyMap is the default keybinding set used by the andromeda Go TUIs.
7
type KeyMap struct {
8
	Open        key.Binding
9
	Back        key.Binding
10
	Quit        key.Binding
11
	Create      key.Binding
12
	Edit        key.Binding
13
	ExtEdit     key.Binding
14
	Delete      key.Binding
15
	Copy        key.Binding
16
	CopyLink    key.Binding
17
	OpenBrowser key.Binding
18
	Refresh     key.Binding
19
	ToggleWrap  key.Binding
20
	Help        key.Binding
21
	ScrollUp    key.Binding
22
	ScrollDown  key.Binding
23
}
24
25
// DefaultKeys returns the canonical key map shared across apps.
26
func DefaultKeys() KeyMap {
27
	return KeyMap{
28
		Open:        key.NewBinding(key.WithKeys("enter", "l"), key.WithHelp("⏎/l", "open")),
29
		Back:        key.NewBinding(key.WithKeys("h", "esc"), key.WithHelp("h/esc", "back")),
30
		Quit:        key.NewBinding(key.WithKeys("q", "ctrl+c"), key.WithHelp("q", "quit")),
31
		Create:      key.NewBinding(key.WithKeys("c"), key.WithHelp("c", "create")),
32
		Edit:        key.NewBinding(key.WithKeys("e"), key.WithHelp("e", "edit")),
33
		ExtEdit:     key.NewBinding(key.WithKeys("E"), key.WithHelp("E", "$EDITOR")),
34
		Delete:      key.NewBinding(key.WithKeys("d"), key.WithHelp("d", "delete")),
35
		Copy:        key.NewBinding(key.WithKeys("y"), key.WithHelp("y", "copy text")),
36
		CopyLink:    key.NewBinding(key.WithKeys("Y"), key.WithHelp("Y", "copy link")),
37
		OpenBrowser: key.NewBinding(key.WithKeys("o"), key.WithHelp("o", "browser")),
38
		Refresh:     key.NewBinding(key.WithKeys("r"), key.WithHelp("r", "refresh")),
39
		ToggleWrap:  key.NewBinding(key.WithKeys("ctrl+w"), key.WithHelp("⌃w", "wrap")),
40
		Help:        key.NewBinding(key.WithKeys("?"), key.WithHelp("?", "help")),
41
		ScrollUp:    key.NewBinding(key.WithKeys("up", "k"), key.WithHelp("↑/k", "up")),
42
		ScrollDown:  key.NewBinding(key.WithKeys("down", "j"), key.WithHelp("↓/j", "down")),
43
	}
44
}
45
46
func (k KeyMap) ShortHelp() []key.Binding {
47
	return []key.Binding{k.Open, k.Create, k.Edit, k.Delete, k.Help, k.Quit}
48
}
49
50
func (k KeyMap) FullHelp() [][]key.Binding {
51
	return [][]key.Binding{
52
		{k.Open, k.Back, k.Create, k.Edit},
53
		{k.ExtEdit, k.Delete, k.Copy, k.CopyLink},
54
		{k.OpenBrowser, k.Refresh, k.ToggleWrap, k.Help},
55
		{k.ScrollUp, k.ScrollDown, k.Quit},
56
	}
57
}