From da4dc31f4fbef3d36e23d61c7f2ac079f8919f32 Mon Sep 17 00:00:00 2001 From: George Tsiolis Date: Sat, 28 Mar 2026 02:19:38 +0200 Subject: [PATCH 1/3] Style success checkmark in status command output --- internal/ui/app.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/internal/ui/app.go b/internal/ui/app.go index 69df57a..73f25f4 100644 --- a/internal/ui/app.go +++ b/internal/ui/app.go @@ -251,6 +251,19 @@ func (a App) Update(msg tea.Msg) (tea.Model, tea.Cmd) { a.lines = appendLine(a.lines, blank) } return a, nil + case output.InstanceInfoEvent: + if line, ok := output.FormatEventLine(msg); ok { + line = strings.Replace(line, output.SuccessMarker(), styles.Success.Render(output.SuccessMarker()), 1) + for _, part := range strings.Split(line, "\n") { + l := styledLine{text: part} + if a.spinner.PendingStop() { + a.bufferedLines = appendLine(a.bufferedLines, l) + } else { + a.lines = appendLine(a.lines, l) + } + } + } + return a, nil default: if line, ok := output.FormatEventLine(msg); ok { for _, part := range strings.Split(line, "\n") { From cce671a4d6778e2531b3769987aca65c46f13516 Mon Sep 17 00:00:00 2001 From: George Tsiolis Date: Sat, 28 Mar 2026 02:24:28 +0200 Subject: [PATCH 2/3] Extract addLinear helper --- internal/ui/app.go | 63 +++++++++++++--------------------------------- 1 file changed, 17 insertions(+), 46 deletions(-) diff --git a/internal/ui/app.go b/internal/ui/app.go index 73f25f4..8322aa5 100644 --- a/internal/ui/app.go +++ b/internal/ui/app.go @@ -143,12 +143,7 @@ func (a App) Update(msg tea.Msg) (tea.Model, tea.Cmd) { return a, nil case output.MessageEvent: msgCopy := msg - line := styledLine{text: components.RenderMessage(msg), message: &msgCopy} - if a.spinner.PendingStop() { - a.bufferedLines = appendLine(a.bufferedLines, line) - } else { - a.lines = appendLine(a.lines, line) - } + a.addLine(styledLine{text: components.RenderMessage(msg), message: &msgCopy}) return a, nil case output.AuthEvent: if msg.Preamble != "" { @@ -166,12 +161,7 @@ func (a App) Update(msg tea.Msg) (tea.Model, tea.Cmd) { return a, nil case output.LogLineEvent: prefix := styles.Secondary.Render(msg.Source + " | ") - line := styledLine{text: prefix + renderLogLine(msg.Line, msg.Level)} - if a.spinner.PendingStop() { - a.bufferedLines = appendLine(a.bufferedLines, line) - } else { - a.lines = appendLine(a.lines, line) - } + a.addLine(styledLine{text: prefix + renderLogLine(msg.Line, msg.Level)}) return a, nil case output.ContainerStatusEvent: if msg.Phase == "pulling" { @@ -216,21 +206,11 @@ func (a App) Update(msg tea.Msg) (tea.Model, tea.Cmd) { case output.TableEvent: if line, ok := output.FormatEventLine(msg); ok { parts := strings.Split(line, "\n") - var lines []styledLine if len(parts) > 0 { - lines = append(lines, styledLine{text: parts[0], secondary: true}) + a.addLine(styledLine{text: parts[0], secondary: true}) } for _, part := range parts[1:] { - lines = append(lines, styledLine{text: part}) - } - if a.spinner.PendingStop() { - for _, l := range lines { - a.bufferedLines = appendLine(a.bufferedLines, l) - } - } else { - for _, l := range lines { - a.lines = appendLine(a.lines, l) - } + a.addLine(styledLine{text: part}) } } case output.ResourceSummaryEvent: @@ -239,40 +219,23 @@ func (a App) Update(msg tea.Msg) (tea.Model, tea.Cmd) { if msg.Resources > 0 && msg.Services > 0 { style = styles.Highlight } - line := styledLine{text: style.Render(text)} blank := styledLine{text: ""} - if a.spinner.PendingStop() { - a.bufferedLines = appendLine(a.bufferedLines, blank) - a.bufferedLines = appendLine(a.bufferedLines, line) - a.bufferedLines = appendLine(a.bufferedLines, blank) - } else { - a.lines = appendLine(a.lines, blank) - a.lines = appendLine(a.lines, line) - a.lines = appendLine(a.lines, blank) - } + a.addLine(blank) + a.addLine(styledLine{text: style.Render(text)}) + a.addLine(blank) return a, nil case output.InstanceInfoEvent: if line, ok := output.FormatEventLine(msg); ok { line = strings.Replace(line, output.SuccessMarker(), styles.Success.Render(output.SuccessMarker()), 1) for _, part := range strings.Split(line, "\n") { - l := styledLine{text: part} - if a.spinner.PendingStop() { - a.bufferedLines = appendLine(a.bufferedLines, l) - } else { - a.lines = appendLine(a.lines, l) - } + a.addLine(styledLine{text: part}) } } return a, nil default: if line, ok := output.FormatEventLine(msg); ok { for _, part := range strings.Split(line, "\n") { - l := styledLine{text: part} - if a.spinner.PendingStop() { - a.bufferedLines = appendLine(a.bufferedLines, l) - } else { - a.lines = appendLine(a.lines, l) - } + a.addLine(styledLine{text: part}) } } } @@ -301,6 +264,14 @@ func appendLine(lines []styledLine, line styledLine) []styledLine { return lines } +func (a *App) addLine(line styledLine) { + if a.spinner.PendingStop() { + a.bufferedLines = appendLine(a.bufferedLines, line) + } else { + a.lines = appendLine(a.lines, line) + } +} + func (a *App) flushBufferedLines() { for _, line := range a.bufferedLines { a.lines = appendLine(a.lines, line) From b688cc2155fbc35edaa2d2285cf87313c4e170ef Mon Sep 17 00:00:00 2001 From: George Tsiolis Date: Tue, 7 Apr 2026 14:13:16 +0300 Subject: [PATCH 3/3] Use addLine for ready status line Co-Authored-By: Anisa Oshafi --- internal/ui/app.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/ui/app.go b/internal/ui/app.go index 8322aa5..3e995b4 100644 --- a/internal/ui/app.go +++ b/internal/ui/app.go @@ -175,7 +175,7 @@ func (a App) Update(msg tea.Msg) (tea.Model, tea.Cmd) { if msg.Phase == "ready" { line = strings.Replace(line, output.SuccessMarker(), styles.Success.Render(output.SuccessMarker()), 1) } - a.lines = appendLine(a.lines, styledLine{text: line}) + a.addLine(styledLine{text: line}) } return a, nil case output.ProgressEvent: