From 215d776192d150468e0f8350771fdfae3b4cb8e3 Mon Sep 17 00:00:00 2001 From: Ayman Bagabas Date: Mon, 25 Nov 2024 17:03:21 -0500 Subject: [PATCH] fix: initialize Program fields in init method --- tea.go | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/tea.go b/tea.go index df927a9ddd..3c514dc450 100644 --- a/tea.go +++ b/tea.go @@ -275,12 +275,7 @@ func Interrupt() Msg { // NewProgram creates a new Program. func NewProgram[T any](model Model[T], opts ...ProgramOption[T]) *Program[T] { - p := &Program[T]{ - msgs: make(chan Msg), - rendererDone: make(chan struct{}), - modes: make(map[ansi.DECMode]bool), - exp: experimentalOptions{}, - } + p := &Program[T]{} p.Init = model.Init p.Update = func(t T, msg Msg) (T, Cmd) { @@ -297,6 +292,15 @@ func NewProgram[T any](model Model[T], opts ...ProgramOption[T]) *Program[T] { opt(p) } + return p +} + +func (p *Program[T]) init() { + p.msgs = make(chan Msg) + p.rendererDone = make(chan struct{}) + p.modes = make(map[ansi.DECMode]bool) + p.exp = experimentalOptions{} + // A context can be provided with a ProgramOption, but if none was provided // we'll use the default background context. if p.ctx == nil { @@ -344,8 +348,6 @@ func NewProgram[T any](model Model[T], opts ...ProgramOption[T]) *Program[T] { if exp := p.getenv("TEA_EXPERIMENTAL"); exp != "" { p.exp = strings.Split(exp, ",") } - - return p } func (p *Program[T]) handleSignals() chan struct{} { @@ -686,6 +688,8 @@ func (p *Program[T]) Run() error { } func (p *Program[T]) Start() error { + p.init() + p.handlers = channelHandlers{} cmds := make(chan Cmd) p.errs = make(chan error)