in command-runner/pkg/features/tui_logger.go [71:116]
func (t *tuiApplication) Start(ctx context.Context) {
t.mu.Lock()
defer t.mu.Unlock()
if t.app != nil {
return
}
t.app = tview.NewApplication()
t.pagesView = tview.NewPages()
t.actionsView = tview.NewTable().SetBorders(false).SetSelectable(true, true)
t.actionsView.SetBorder(true).SetTitle("Actions")
t.executions = make(map[string]*planExecution)
priorRow := 0
t.actionsView.SetSelectionChangedFunc(func(row int, column int) {
t.pagesView.HidePage(strconv.Itoa(priorRow))
t.pagesView.ShowPage(strconv.Itoa(row))
if row >= 0 && row < t.actionsView.GetRowCount() {
pe := t.actionsView.GetCell(row, column).GetReference().(*planExecution)
log.Logger = log.Logger.Output(pe.logWriter)
}
priorRow = row
})
flex := tview.NewFlex().
AddItem(t.actionsView, 0, 1, true).
AddItem(t.pagesView, 0, 5, false)
t.app = t.app.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey {
if event.Key() == tcell.KeyCtrlC && t.pending > 0 {
process, _ := os.FindProcess(os.Getpid())
if err := process.Signal(syscall.SIGINT); err != nil {
log.Error().Err(err).Msg("failed to send SIGINT to process")
}
}
return event
})
t.done = make(chan bool, 1)
go func() {
if err := t.app.SetRoot(flex, true).EnableMouse(true).Run(); err != nil {
log.Error().Err(err).Msg("failed to start TUI app")
}
t.done <- true
}()
go t.refreshLoadingIcons(ctx)
}