cli: strip ANSI sequences (colors, styles) from table output when stdout is not a TTY

This commit is contained in:
Pasha Sviderski
2026-06-18 20:29:22 +10:00
parent 2f717a10a7
commit e3823c29bf
10 changed files with 17 additions and 10 deletions
+2 -1
View File
@@ -5,6 +5,7 @@ import (
"maps" "maps"
"slices" "slices"
"charm.land/lipgloss/v2"
"github.com/psviderski/uncloud/internal/cli" "github.com/psviderski/uncloud/internal/cli"
"github.com/psviderski/uncloud/internal/cli/tui" "github.com/psviderski/uncloud/internal/cli/tui"
"github.com/spf13/cobra" "github.com/spf13/cobra"
@@ -50,6 +51,6 @@ func list(uncli *cli.CLI) error {
t.Row(name, current, fmt.Sprintf("%d", connCount)) t.Row(name, current, fmt.Sprintf("%d", connCount))
} }
fmt.Println(t) lipgloss.Println(t)
return nil return nil
} }
+1 -1
View File
@@ -179,7 +179,7 @@ func list(ctx context.Context, uncli *cli.CLI, opts listOptions) error {
}) })
// Print the images in a table format. // Print the images in a table format.
fmt.Println(formatImageTable(rows)) lipgloss.Println(formatImageTable(rows))
return nil return nil
} }
+2 -1
View File
@@ -6,6 +6,7 @@ import (
"net/netip" "net/netip"
"strings" "strings"
"charm.land/lipgloss/v2"
"github.com/psviderski/uncloud/internal/cli" "github.com/psviderski/uncloud/internal/cli"
"github.com/psviderski/uncloud/internal/cli/tui" "github.com/psviderski/uncloud/internal/cli/tui"
"github.com/psviderski/uncloud/internal/machine/network" "github.com/psviderski/uncloud/internal/machine/network"
@@ -68,7 +69,7 @@ func list(ctx context.Context, uncli *cli.CLI) error {
) )
} }
fmt.Println(t) lipgloss.Println(t)
return nil return nil
} }
+1 -1
View File
@@ -114,7 +114,7 @@ func remove(ctx context.Context, uncli *cli.CLI, nameOrID string, opts removeOpt
plural = "s" plural = "s"
} }
fmt.Printf("Found %d service container%s on machine '%s':\n", len(containers), plural, m.Name) fmt.Printf("Found %d service container%s on machine '%s':\n", len(containers), plural, m.Name)
fmt.Println(formatContainerTree(containers)) lipgloss.Println(formatContainerTree(containers))
fmt.Println() fmt.Println()
fmt.Println("This will remove all service containers from the machine, remove it from the cluster, " + fmt.Println("This will remove all service containers from the machine, remove it from the cluster, " +
"and reset it to the uninitialised state.") "and reset it to the uninitialised state.")
+2 -1
View File
@@ -6,6 +6,7 @@ import (
"sort" "sort"
"time" "time"
"charm.land/lipgloss/v2"
"github.com/psviderski/uncloud/internal/cli" "github.com/psviderski/uncloud/internal/cli"
"github.com/psviderski/uncloud/internal/cli/tui" "github.com/psviderski/uncloud/internal/cli/tui"
"github.com/spf13/cobra" "github.com/spf13/cobra"
@@ -107,7 +108,7 @@ func rtt(ctx context.Context, uncli *cli.CLI) error {
t.Row(r.machine, r.peer, tui.FormatRTT(r.median), formatRTTStdDev(r.stdDev)) t.Row(r.machine, r.peer, tui.FormatRTT(r.median), formatRTTStdDev(r.stdDev))
} }
fmt.Println(t) lipgloss.Println(t)
return nil return nil
} }
+1 -1
View File
@@ -182,7 +182,7 @@ func printContainers(containers []containerInfo) error {
} }
} }
fmt.Println(t) lipgloss.Println(t)
return nil return nil
} }
+2 -1
View File
@@ -6,6 +6,7 @@ import (
"slices" "slices"
"time" "time"
"charm.land/lipgloss/v2"
"github.com/docker/docker/pkg/stringid" "github.com/docker/docker/pkg/stringid"
"github.com/docker/go-units" "github.com/docker/go-units"
"github.com/psviderski/uncloud/internal/cli" "github.com/psviderski/uncloud/internal/cli"
@@ -126,6 +127,6 @@ func inspect(ctx context.Context, uncli *cli.CLI, opts inspectOptions) error {
} }
} }
fmt.Println(t) lipgloss.Println(t)
return nil return nil
} }
+2 -1
View File
@@ -6,6 +6,7 @@ import (
"slices" "slices"
"strings" "strings"
"charm.land/lipgloss/v2"
"github.com/psviderski/uncloud/internal/cli" "github.com/psviderski/uncloud/internal/cli"
"github.com/psviderski/uncloud/internal/cli/tui" "github.com/psviderski/uncloud/internal/cli/tui"
"github.com/psviderski/uncloud/pkg/api" "github.com/psviderski/uncloud/pkg/api"
@@ -82,6 +83,6 @@ func list(ctx context.Context, uncli *cli.CLI) error {
t.Row(row...) t.Row(row...)
} }
fmt.Println(t) lipgloss.Println(t)
return nil return nil
} }
+2 -1
View File
@@ -6,6 +6,7 @@ import (
"slices" "slices"
"strings" "strings"
"charm.land/lipgloss/v2"
"github.com/psviderski/uncloud/internal/cli" "github.com/psviderski/uncloud/internal/cli"
"github.com/psviderski/uncloud/internal/cli/completion" "github.com/psviderski/uncloud/internal/cli/completion"
"github.com/psviderski/uncloud/internal/cli/tui" "github.com/psviderski/uncloud/internal/cli/tui"
@@ -95,6 +96,6 @@ func list(ctx context.Context, uncli *cli.CLI, opts listOptions) error {
t.Row(v.Volume.Name, v.Volume.Driver, v.MachineName) t.Row(v.Volume.Name, v.Volume.Driver, v.MachineName)
} }
fmt.Println(t) lipgloss.Println(t)
return nil return nil
} }
+2 -1
View File
@@ -6,6 +6,7 @@ import (
"strings" "strings"
"time" "time"
"charm.land/lipgloss/v2"
"github.com/docker/go-units" "github.com/docker/go-units"
"github.com/psviderski/uncloud/internal/cli" "github.com/psviderski/uncloud/internal/cli"
"github.com/psviderski/uncloud/internal/cli/completion" "github.com/psviderski/uncloud/internal/cli/completion"
@@ -133,6 +134,6 @@ func runShow(ctx context.Context, uncli *cli.CLI, opts showOptions) error {
) )
} }
fmt.Println(t) lipgloss.Println(t)
return nil return nil
} }