diff --git a/cmd/kctl-tui/full.go b/cmd/kctl-tui/full.go index e5f8297..1608176 100644 --- a/cmd/kctl-tui/full.go +++ b/cmd/kctl-tui/full.go @@ -192,6 +192,14 @@ func (m *fullModel) handleSelect() (tea.Model, tea.Cmd) { case screenNamespace: m.selectedNamespace = item.value + if err := kubeexec.CheckTool("tmux"); err != nil { + m.err = err + return m, nil + } + if err := kubeexec.CheckTool("k9s"); err != nil { + m.err = err + return m, nil + } return m, m.startTmuxSession() } return m, nil @@ -257,48 +265,39 @@ func (m *fullModel) loadNamespacesFor(teamValue string) tea.Cmd { // configured envs, resolved via the context template, so both are // visible side by side. func (m *fullModel) startTmuxSession() tea.Cmd { - return func() tea.Msg { - if err := kubeexec.CheckTool("tmux"); err != nil { - return errMsg{err} - } - if err := kubeexec.CheckTool("k9s"); err != nil { - return errMsg{err} - } + selfPath := "kctl-tui" + panelCmd := fmt.Sprintf("%s panel --context=%s --ns=%s --team=%s", + selfPath, m.selectedContext, m.selectedNamespace, m.selectedTeam) - selfPath := "kctl-tui" // resolved via PATH; see README for install instructions - panelCmd := fmt.Sprintf("%s panel --context=%s --ns=%s --team=%s", - selfPath, m.selectedContext, m.selectedNamespace, m.selectedTeam) + envA := m.cfg.Envs[0] + ctxA := m.cfg.ResolveContext(envA, m.selectedContext) + k9sCmdA := fmt.Sprintf("k9s --context %s -n %s", ctxA, m.selectedNamespace) - envA := m.cfg.Envs[0] - ctxA := m.cfg.ResolveContext(envA, m.selectedContext) - k9sCmdA := fmt.Sprintf("k9s --context %s -n %s", ctxA, m.selectedNamespace) - - args := []string{ - "new-session", "-d", "-s", "kctl", - panelCmd, ";", - "set-option", "-t", "kctl", "remain-on-exit", "on", ";", - "split-window", "-v", "-t", "kctl:0.0", k9sCmdA, ";", - } - if len(m.cfg.Envs) > 1 { - envB := m.cfg.Envs[1] - ctxB := m.cfg.ResolveContext(envB, m.selectedContext) - k9sCmdB := fmt.Sprintf("k9s --context %s -n %s", ctxB, m.selectedNamespace) - args = append(args, - "split-window", "-v", "-t", "kctl:0.1", k9sCmdB, ";", - ) - } - args = append(args, - "select-layout", "-t", "kctl", "even-vertical", ";", - "select-pane", "-t", "kctl:0.0", ";", - "attach", "-t", "kctl", - ) - - c := exec.Command("tmux", args...) - - return tea.ExecProcess(c, func(err error) tea.Msg { - return tmuxDoneMsg{err: err} - }) + args := []string{ + "new-session", "-d", "-s", "kctl", + panelCmd, ";", + "set-option", "-t", "kctl", "remain-on-exit", "on", ";", + "split-window", "-v", "-t", "kctl:0.0", k9sCmdA, ";", } + if len(m.cfg.Envs) > 1 { + envB := m.cfg.Envs[1] + ctxB := m.cfg.ResolveContext(envB, m.selectedContext) + k9sCmdB := fmt.Sprintf("k9s --context %s -n %s", ctxB, m.selectedNamespace) + args = append(args, + "split-window", "-v", "-t", "kctl:0.1", k9sCmdB, ";", + ) + } + args = append(args, + "select-layout", "-t", "kctl", "even-vertical", ";", + "select-pane", "-t", "kctl:0.0", ";", + "attach", "-t", "kctl", + ) + + c := exec.Command("tmux", args...) + + return tea.ExecProcess(c, func(err error) tea.Msg { + return tmuxDoneMsg{err: err} + }) } func (m *fullModel) View() string {