diff --git a/cmd/lipgloss/main.go b/cmd/lipgloss/main.go index 699577089b4199ab8d5bb257b3464a836ad8923b..9b5bd40c35b7460966bcd5b2d8fa985b248d5b34 100644 --- a/cmd/lipgloss/main.go +++ b/cmd/lipgloss/main.go @@ -1,6 +1,7 @@ package main import ( + "flag" "os" "strings" @@ -36,31 +37,79 @@ func main() { commentLen = 3 ) - idStyle := lipgloss.NewStyle().Width(idLen).MarginRight(1).Foreground(lipgloss.ANSIColor(cyan)) - statusStyle := lipgloss.NewStyle().Width(statusLen).MarginRight(2).Foreground(lipgloss.ANSIColor(yellow)) - titleStyle := lipgloss.NewStyle().MarginRight(6).Foreground(lipgloss.ANSIColor(gray)) - authorStyle := lipgloss.NewStyle().MarginRight(1).Foreground(lipgloss.ANSIColor(magenta)) - commentStyle := lipgloss.NewStyle().Width(commentLen).MarginRight(1).Foreground(lipgloss.ANSIColor(gray)).Align(lipgloss.Right) - commentMarker := lipgloss.NewStyle().Width(2).MarginRight(1).Foreground(lipgloss.ANSIColor(gray)) + idStyle := lipgloss.NewStyle() + statusStyle := lipgloss.NewStyle() + titleStyle := lipgloss.NewStyle() + authorStyle := lipgloss.NewStyle() + commentStyle := lipgloss.NewStyle() + commentMarker := lipgloss.NewStyle() + + separator := "\t" title, author := titleText, authorText if termenv.DefaultOutput().Profile != termenv.Ascii { title = truncate.StringWithTail(titleText, titleLen, ellipsisIndicator) - titleStyle = titleStyle.Width(titleLen) author = truncate.StringWithTail(authorText, authorLen, ellipsisIndicator) - authorStyle = authorStyle.Width(authorLen) + + idStyle = idStyle.Width(idLen).MarginRight(1).Foreground(lipgloss.ANSIColor(cyan)) + statusStyle = statusStyle.Width(statusLen).MarginRight(2).Foreground(lipgloss.ANSIColor(yellow)) + titleStyle = titleStyle.Width(titleLen).MarginRight(6).Foreground(lipgloss.ANSIColor(gray)) + authorStyle = authorStyle.Width(authorLen).MarginRight(1).Foreground(lipgloss.ANSIColor(magenta)) + commentStyle = commentStyle.Width(commentLen).MarginRight(1).Foreground(lipgloss.ANSIColor(gray)).Align(lipgloss.Right) + commentMarker = commentMarker.Width(2).MarginRight(1).Foreground(lipgloss.ANSIColor(gray)) + + separator = "" + } + + type formatFunc func() string + + defaultFormatFunc := func() string { + return strings.Join( + []string{ + idStyle.Render(idText), + statusStyle.Render(statusText), + titleStyle.Render(title), + authorStyle.Render(author), + commentStyle.Render(commentText), + commentMarker.Render(commentIndicator), + "\n", + }, separator) + } + + idFormatFunc := func() string { + return idStyle.Render(idText) + "\n" + } + + compactFormatFunc := func() string { + return strings.Join( + []string{ + idStyle.Render(idText), + statusStyle.Render(statusText), + titleStyle.Render(title), + authorStyle.Render(author), + "\n", + }, separator) + } + + var ( + _ formatFunc = defaultFormatFunc + _ formatFunc = idFormatFunc + _ formatFunc = compactFormatFunc + ) + + var format string + + flag.StringVar(&format, "format", "default", "") + flag.Parse() + + fn := defaultFormatFunc + + switch format { + case "compact": + fn = compactFormatFunc + case "id": + fn = idFormatFunc } - str := strings.Join( - []string{ - idStyle.Render(idText), - statusStyle.Render(statusText), - titleStyle.Render(title), - authorStyle.Render(author), - commentStyle.Render(commentText), - commentMarker.Render(commentIndicator), - "\n", - }, "") - - os.Stderr.Write([]byte(str)) + os.Stderr.Write([]byte(fn())) }