Join terminal event polling on shutdown

This commit is contained in:
Brandon McGinty (chatgpt)
2026-08-09 19:25:28 -04:00
committed by Brandon McGinty
parent 2c636016b0
commit b10e08477c
+20 -3
View File
@@ -100,15 +100,32 @@ func (ui *Ui) Run(cmds chan string) error {
if err := termbox.Init(); err != nil { if err := termbox.Init(); err != nil {
return err return err
} }
defer termbox.Close()
termbox.SetInputMode(termbox.InputAlt) termbox.SetInputMode(termbox.InputAlt)
events := make(chan termbox.Event) // Closing termbox wakes PollEvent. Keep delivery cancellable so the polling
// goroutine cannot become stranded trying to send after Run returns.
events := make(chan termbox.Event, 1)
pollDone := make(chan struct{})
go func() { go func() {
defer close(pollDone)
for { for {
events <- termbox.PollEvent() event := termbox.PollEvent()
select {
case <-ui.close:
return
default:
}
select {
case events <- event:
case <-ui.close:
return
}
} }
}() }()
defer func() {
termbox.Close()
<-pollDone
}()
ui.manager.OnUiInitialize(ui) ui.manager.OnUiInitialize(ui)
ui.manager.OnUiDoneInitialize(ui) ui.manager.OnUiDoneInitialize(ui)