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,14 +100,31 @@ func (ui *Ui) Run(cmds chan string) error {
if err := termbox.Init(); err != nil {
return err
}
defer termbox.Close()
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() {
defer close(pollDone)
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)