-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathhelp.go
More file actions
93 lines (83 loc) · 1.74 KB
/
help.go
File metadata and controls
93 lines (83 loc) · 1.74 KB
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
88
89
90
91
92
93
package tui
import (
"fmt"
"github.com/charmbracelet/bubbles/help"
"github.com/charmbracelet/bubbles/key"
tea "github.com/charmbracelet/bubbletea"
"os"
)
type HelpModel struct {
Keys DefaultKeyMap
Model help.Model
lastKey string
Quitting bool
}
func NewHelpModel(isShortHelp bool) HelpModel {
if isShortHelp {
return HelpModel{
Keys: DefaultShortKeys,
Model: help.New(),
}
} else {
return HelpModel{
Keys: DefaultKeys,
Model: help.New(),
}
}
}
func (m *HelpModel) Init() tea.Cmd {
return nil
}
func (m *HelpModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
switch msg := msg.(type) {
case tea.WindowSizeMsg:
// If we set a width on the Help menu it can gracefully truncate
// its view as needed.
m.Model.Width = msg.Width
case tea.KeyMsg:
switch {
case key.Matches(msg, m.Keys.Up):
m.lastKey = "↑"
case key.Matches(msg, m.Keys.Down):
m.lastKey = "↓"
case key.Matches(msg, m.Keys.Left):
m.lastKey = "←"
case key.Matches(msg, m.Keys.Right):
m.lastKey = "→"
case key.Matches(msg, m.Keys.Help):
m.Model.ShowAll = !m.Model.ShowAll
case key.Matches(msg, m.Keys.Quit):
m.Quitting = true
return m, tea.Quit
}
switch msg.Type {
case tea.KeyEnter:
m.Quitting = true
return m, tea.ClearScreen
}
}
return m, nil
}
func (m *HelpModel) View() string {
var helpView string
if m.Quitting {
helpView = ""
} else {
helpView = m.Model.View(m.Keys)
}
return "\n" + helpView + "\n"
}
func (m *HelpModel) SetKeys(keys DefaultKeyMap) {
m.Keys = keys
}
func (m *HelpModel) Run() error {
p := tea.NewProgram(m)
_, err := p.Run()
if err != nil {
return err
}
fmt.Printf(HelpStyle("<Press enter to exit>\n"))
os.Stdin.Write([]byte("\n"))
ClearLines(1)
return nil
}