diff options
author | Jesse Duffield <jessedduffield@gmail.com> | 2020-02-25 20:11:07 +1100 |
---|---|---|
committer | Jesse Duffield <jessedduffield@gmail.com> | 2020-02-25 21:21:07 +1100 |
commit | 9fd9fd6816925debe64aa21269cdba5ec74ed5e9 (patch) | |
tree | a9e9cdf7285f246d9eaf59b42309a70c5ba9a029 /pkg/gui/presentation | |
parent | b8717d750a6d60b8f76698756e4d9ca9977ae14d (diff) |
better commit lines in fullscreen mode
Diffstat (limited to 'pkg/gui/presentation')
-rw-r--r-- | pkg/gui/presentation/commits.go | 126 |
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)} +} |