-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathprogram.go
More file actions
77 lines (65 loc) · 1.25 KB
/
program.go
File metadata and controls
77 lines (65 loc) · 1.25 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
package tuikit
import (
"context"
"fmt"
"io"
tea "charm.land/bubbletea/v2"
)
type Program struct {
started bool
suspended bool
program *tea.Program
in io.Reader
out io.Writer
}
func NewProgram(ctx context.Context, model tea.Model, in io.Reader, out io.Writer) *Program {
p := tea.NewProgram(
model,
tea.WithContext(ctx),
tea.WithInput(in),
tea.WithOutput(out),
)
return &Program{
program: p,
in: in,
out: out,
}
}
func (p *Program) SetTeaProgram(program *tea.Program) {
if p.started || p.suspended {
panic("cannot set program after it has started or suspended")
}
p.program = program
}
func (p *Program) Run() (tea.Model, error) {
if p.started || p.suspended {
return nil, fmt.Errorf("program already started")
}
p.started = true
return p.program.Run()
}
func (p *Program) Started() bool {
return p.started
}
func (p *Program) Suspend() error {
err := p.program.ReleaseTerminal()
if err != nil {
return err
}
p.suspended = true
return nil
}
func (p *Program) Suspended() bool {
return p.suspended
}
func (p *Program) Resume() error {
err := p.program.RestoreTerminal()
if err != nil {
return err
}
p.suspended = false
return nil
}
func (p *Program) Send(msg tea.Msg) {
p.program.Send(msg)
}