diff --git a/cmd/task/list.go b/cmd/task/list.go index 8b482c7dec4852c1c54e4aa604bd761fb5ded5aa..0a33e702913493df24c01b8217b58a27e7d1b256 100644 --- a/cmd/task/list.go +++ b/cmd/task/list.go @@ -8,7 +8,6 @@ import ( "encoding/json" "errors" "fmt" - "text/tabwriter" "time" "git.secluded.site/go-lunatask" @@ -16,6 +15,8 @@ import ( "git.secluded.site/lune/internal/completion" "git.secluded.site/lune/internal/config" "git.secluded.site/lune/internal/ui" + "github.com/charmbracelet/lipgloss" + "github.com/charmbracelet/lipgloss/table" "github.com/spf13/cobra" ) @@ -180,11 +181,7 @@ func outputJSON(cmd *cobra.Command, tasks []lunatask.Task) error { } func outputTable(cmd *cobra.Command, tasks []lunatask.Task) error { - writer := tabwriter.NewWriter(cmd.OutOrStdout(), 0, 0, 2, ' ', 0) - - header := ui.Bold.Render("ID") + "\t" + ui.Bold.Render("STATUS") + "\t" + - ui.Bold.Render("SCHEDULED") + "\t" + ui.Bold.Render("CREATED") - fmt.Fprintln(writer, header) + rows := make([][]string, 0, len(tasks)) for _, task := range tasks { status := "-" @@ -194,17 +191,27 @@ func outputTable(cmd *cobra.Command, tasks []lunatask.Task) error { scheduled := "-" if task.ScheduledOn != nil { - scheduled = task.ScheduledOn.String() + scheduled = ui.FormatDate(task.ScheduledOn.Time) } created := ui.FormatDate(task.CreatedAt) - fmt.Fprintf(writer, "%s\t%s\t%s\t%s\n", task.ID, status, scheduled, created) + rows = append(rows, []string{task.ID, status, scheduled, created}) } - if err := writer.Flush(); err != nil { - return fmt.Errorf("writing output: %w", err) - } + tbl := table.New(). + Headers("ID", "STATUS", "SCHEDULED", "CREATED"). + Rows(rows...). + StyleFunc(func(row, col int) lipgloss.Style { + if row == table.HeaderRow { + return ui.Bold + } + + return lipgloss.NewStyle() + }). + Border(lipgloss.HiddenBorder()) + + fmt.Fprintln(cmd.OutOrStdout(), tbl.Render()) return nil }