Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 8 additions & 7 deletions internal/cli/cli.go
Original file line number Diff line number Diff line change
Expand Up @@ -82,16 +82,17 @@ func Run(ctx context.Context, io *iostreams.IOStreams, args ...string) int {
cmd.SetArgs(args)
cmd.SilenceErrors = true

cs := io.ColorScheme()

// configure help templates and helpers
cobra.AddTemplateFuncs(template.FuncMap{
"wrapFlagUsages": wrapFlagUsages,
"wrapText": wrapText,
"purple": cs.Purple,
})
cmd.SetUsageTemplate(usageTemplate)
cmd.SetHelpTemplate(helpTemplate)

cs := io.ColorScheme()

cmd, err = cmd.ExecuteContextC(ctx)

if cmd != nil {
Expand Down Expand Up @@ -239,7 +240,7 @@ const helpTemplate = `{{with (or .Long .Short)}}{{. | trimTrailingWhitespaces |

{{end}}{{if or .Runnable .HasSubCommands}}{{.UsageString}}{{end}}`

// identical to the default cobra usage template, but utilizes wrapFlagUsages
// identical to the default cobra usage template, but utilizes wrapFlagUsages and adds purple color to command names
// https://github.com/spf13/cobra/blob/fd865a44e3c48afeb6a6dbddadb8a5519173e029/command.go#L539-L568
const usageTemplate = `Usage:{{if .Runnable}}
{{.UseLine}}{{end}}{{if .HasAvailableSubCommands}}
Expand All @@ -252,13 +253,13 @@ Examples:
{{.Example}}{{end}}{{if .HasAvailableSubCommands}}{{$cmds := .Commands}}{{if eq (len .Groups) 0}}

Available Commands:{{range $cmds}}{{if (or .IsAvailableCommand (eq .Name "help"))}}
{{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{else}}{{range $group := .Groups}}
{{rpad .Name .NamePadding | purple}} {{.Short}}{{end}}{{end}}{{else}}{{range $group := .Groups}}

{{.Title}}{{range $cmds}}{{if (and (eq .GroupID $group.ID) (or .IsAvailableCommand (eq .Name "help")))}}
{{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{if not .AllChildCommandsHaveGroup}}
{{rpad .Name .NamePadding | purple}} {{.Short}}{{end}}{{end}}{{end}}{{if not .AllChildCommandsHaveGroup}}

Additional Commands:{{range $cmds}}{{if (and (eq .GroupID "") (or .IsAvailableCommand (eq .Name "help")))}}
{{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{end}}{{end}}{{if .HasAvailableLocalFlags}}
{{rpad .Name .NamePadding | purple}} {{.Short}}{{end}}{{end}}{{end}}{{end}}{{end}}{{if .HasAvailableLocalFlags}}

Flags:
{{wrapFlagUsages .LocalFlags | trimTrailingWhitespaces}}{{end}}{{if .HasAvailableInheritedFlags}}
Expand All @@ -267,7 +268,7 @@ Global Flags:
{{wrapFlagUsages .InheritedFlags | trimTrailingWhitespaces}}{{end}}{{if .HasHelpSubCommands}}

Additional help topics:{{range .Commands}}{{if .IsAdditionalHelpTopicCommand}}
{{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableSubCommands}}
{{rpad .CommandPath .CommandPathPadding | purple}} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableSubCommands}}

Use "{{.CommandPath}} [command] --help" for more information about a command.{{end}}
`
39 changes: 29 additions & 10 deletions internal/command/apps/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,19 +64,23 @@ func runList(ctx context.Context) (err error) {
return
}

out := iostreams.FromContext(ctx).Out
io := iostreams.FromContext(ctx)
out := io.Out
if cfg.JSONOutput {
_ = render.JSON(out, apps)

return
}

verbose := flag.GetBool(ctx, "verbose")
colorize := io.ColorScheme()
termWidth := io.TerminalWidth()
const minWidthForFull = 100 // Minimum width needed for full table

rows := make([][]string, 0, len(apps))
if silence {
for _, app := range apps {
rows = append(rows, []string{app.Name})
rows = append(rows, []string{colorize.Purple(app.Name)})
}
_ = render.Table(out, "", rows)
return
Expand All @@ -87,19 +91,34 @@ func runList(ctx context.Context) (err error) {
latestDeploy = format.RelativeTime(app.CurrentRelease.CreatedAt)
}

appName := app.Name
if !verbose && strings.HasPrefix(app.Name, "flyctl-interactive-shells-") {
app.Name = "(interactive shells app)"
appName = "(interactive shells app)"
}

rows = append(rows, []string{
app.Name,
app.Organization.Slug,
app.Status,
latestDeploy,
})
if termWidth < minWidthForFull {
// Narrow terminal: show compact view without Latest Deploy
rows = append(rows, []string{
colorize.Purple(appName),
app.Organization.Slug,
app.Status,
})
} else {
// Wide terminal: show full table
rows = append(rows, []string{
colorize.Purple(appName),
app.Organization.Slug,
app.Status,
latestDeploy,
})
}
}

_ = render.Table(out, "", rows, "Name", "Owner", "Status", "Latest Deploy")
if termWidth < minWidthForFull {
_ = render.Table(out, "", rows, "Name", "Owner", "Status")
} else {
_ = render.Table(out, "", rows, "Name", "Owner", "Status", "Latest Deploy")
}

return
}
Expand Down
Loading
Loading