-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
70 lines (60 loc) · 1.14 KB
/
main.go
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
package main
import (
bbt "github.com/charmbracelet/bubbletea"
)
type Model struct {
list *WindowList
view *WindowView
active Window
}
func NewModel() *Model {
model := Model{
list: NewWindowList(),
view: NewWindowView(),
}
model.active = model.list
return &model
}
func (m *Model) Init() bbt.Cmd {
return bbt.Sequence(
Activate("list"),
List("top"),
)
}
func (m *Model) Update(msg bbt.Msg) (bbt.Model, bbt.Cmd) {
switch msg := msg.(type) {
case bbt.KeyMsg:
switch msg.String() {
case "q", "ctrl+c":
// mask off ctrl+c
return m, nil
case "ctrl+d":
return m, bbt.Quit
}
case ActivateMsg:
switch msg {
case "list":
m.active = m.list
case "view":
m.active = m.view
}
case bbt.WindowSizeMsg:
var cmds []bbt.Cmd
for _, window := range []Window{m.list, m.view} {
_, cmd := window.Update(msg)
cmds = append(cmds, cmd)
}
return m, bbt.Batch(cmds...)
}
var cmd bbt.Cmd
m.active, cmd = m.active.Update(msg)
return m, cmd
}
func (m *Model) View() string {
return m.active.View()
}
func main() {
if _, err := bbt.NewProgram(NewModel(), bbt.WithAltScreen()).Run(); err != nil {
panic(err)
}
}