func()

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)
}