summaryrefslogtreecommitdiffstats
path: root/pkg/gui/presentation
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2020-02-25 20:11:07 +1100
committerJesse Duffield <jessedduffield@gmail.com>2020-02-25 21:21:07 +1100
commit9fd9fd6816925debe64aa21269cdba5ec74ed5e9 (patch)
treea9e9cdf7285f246d9eaf59b42309a70c5ba9a029 /pkg/gui/presentation
parentb8717d750a6d60b8f76698756e4d9ca9977ae14d (diff)
better commit lines in fullscreen mode
Diffstat (limited to 'pkg/gui/presentation')
-rw-r--r--pkg/gui/presentation/commits.go126
1 files changed, 126 insertions, 0 deletions
diff --git a/pkg/gui/presentation/commits.go b/pkg/gui/presentation/commits.go
new file mode 100644
index 000000000..04dbb0780
--- /dev/null
+++ b/pkg/gui/presentation/commits.go
@@ -0,0 +1,126 @@
+package presentation
+
+import (
+ "strings"
+
+ "github.com/fatih/color"
+ "github.com/jesseduffield/lazygit/pkg/commands"
+ "github.com/jesseduffield/lazygit/pkg/theme"
+ "github.com/jesseduffield/lazygit/pkg/utils"
+)
+
+func GetCommitListDisplayStrings(commits []*commands.Commit, fullDescription bool) [][]string {
+ lines := make([][]string, len(commits))
+
+ var displayFunc func(*commands.Commit) []string
+ if fullDescription {
+ displayFunc = getFullDescriptionDisplayStringsForCommit
+ } else {
+ displayFunc = getDisplayStringsForCommit
+ }
+
+ for i := range commits {
+ lines[i] = displayFunc(commits[i])
+ }
+
+ return lines
+}
+
+func getFullDescriptionDisplayStringsForCommit(c *commands.Commit) []string {
+ red := color.New(color.FgRed)
+ yellow := color.New(color.FgYellow)
+ green := color.New(color.FgGreen)
+ blue := color.New(color.FgBlue)
+ cyan := color.New(color.FgCyan)
+ defaultColor := color.New(theme.DefaultTextColor)
+ magenta := color.New(color.FgMagenta)
+
+ // for some reason, setting the background to blue pads out the other commits
+ // horizontally. For the sake of accessibility I'm considering this a feature,
+ // not a bug
+ copied := color.New(color.FgCyan, color.BgBlue)
+
+ var shaColor *color.Color
+ switch c.Status {
+ case "unpushed":
+ shaColor = red
+ case "pushed":
+ shaColor = yellow
+ case "merged":
+ shaColor = green
+ case "rebasing":
+ shaColor = blue
+ case "reflog":
+ shaColor = blue
+ case "selected":
+ shaColor = magenta
+ default:
+ shaColor = defaultColor
+ }
+
+ if c.Copied {
+ shaColor = copied
+ }
+
+ tagString := ""
+ truncatedDate := utils.TruncateWithEllipsis(c.Date, 15)
+ secondColumnString := blue.Sprint(truncatedDate)
+ if c.Action != "" {
+ secondColumnString = cyan.Sprint(c.Action)
+ } else if len(c.Tags) > 0 {
+ tagColor := color.New(color.FgMagenta, color.Bold)
+ tagString = utils.ColoredStringDirect(c.ExtraInfo, tagColor) + " "
+ }
+
+ truncatedAuthor := utils.TruncateWithEllipsis(c.Author, 17)
+
+ return []string{shaColor.Sprint(c.Sha[:8]), secondColumnString, yellow.Sprint(truncatedAuthor), tagString + defaultColor.Sprint(c.Name)}
+}
+
+func getDisplayStringsForCommit(c *commands.Commit) []string {
+ red := color.New(color.FgRed)
+ yellow := color.New(color.FgYellow)
+ green := color.New(color.FgGreen)
+ blue := color.New(color.FgBlue)
+ cyan := color.New(color.FgCyan)
+ defaultColor := color.New(theme.DefaultTextColor)
+ magenta := color.New(color.FgMagenta)
+
+ // for some reason, setting the background to blue pads out the other commits
+ // horizontally. For the sake of accessibility I'm considering this a feature,
+ // not a bug
+ copied := color.New(color.FgCyan, color.BgBlue)
+
+ var shaColor *color.Color
+ switch c.Status {
+ case "unpushed":
+ shaColor = red
+ case "pushed":
+ shaColor = yellow
+ case "merged":
+ shaColor = green
+ case "rebasing":
+ shaColor = blue
+ case "reflog":
+ shaColor = blue
+ case "selected":
+ shaColor = magenta
+ default:
+ shaColor = defaultColor
+ }
+
+ if c.Copied {
+ shaColor = copied
+ }
+
+ actionString := ""
+ tagString := ""
+ if c.Action != "" {
+ actionString = cyan.Sprint(utils.WithPadding(c.Action, 7)) + " "
+ } else if len(c.Tags) > 0 {
+ tagColor := color.New(color.FgMagenta, color.Bold)
+ tagString = utils.ColoredStringDirect(strings.Join(c.Tags, " "), tagColor) + " "
+ }
+
+ return []string{shaColor.Sprint(c.Sha[:8]), actionString + tagString + defaultColor.Sprint(c.Name)}
+}