mirror of
https://github.com/jesseduffield/lazygit.git
synced 2024-12-14 11:23:09 +02:00
4df7646654
Branches can now be colored based on their prefix, if it matches a user defined prefix in the config file. If no user defined prefix matches, then it will fallback to the defaults: green for 'feature', yellow for 'bugfix', and red for 'hotfix'. All remaining branches will be set to the default text color.
101 lines
2.4 KiB
Go
101 lines
2.4 KiB
Go
package presentation
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/gookit/color"
|
|
"github.com/jesseduffield/lazygit/pkg/commands/models"
|
|
"github.com/jesseduffield/lazygit/pkg/gui/style"
|
|
"github.com/jesseduffield/lazygit/pkg/theme"
|
|
)
|
|
|
|
var branchPrefixColors = make(map[string]style.TextStyle)
|
|
|
|
func GetBranchListDisplayStrings(branches []*models.Branch, fullDescription bool, diffName string) [][]string {
|
|
lines := make([][]string, len(branches))
|
|
|
|
for i := range branches {
|
|
diffed := branches[i].Name == diffName
|
|
lines[i] = getBranchDisplayStrings(branches[i], fullDescription, diffed)
|
|
}
|
|
|
|
return lines
|
|
}
|
|
|
|
// getBranchDisplayStrings returns the display string of branch
|
|
func getBranchDisplayStrings(b *models.Branch, fullDescription bool, diffed bool) []string {
|
|
displayName := b.Name
|
|
if b.DisplayName != "" {
|
|
displayName = b.DisplayName
|
|
}
|
|
|
|
nameTextStyle := GetBranchTextStyle(b.Name)
|
|
if diffed {
|
|
nameTextStyle = theme.DiffTerminalColor
|
|
}
|
|
coloredName := nameTextStyle.Sprint(displayName)
|
|
if b.IsTrackingRemote() {
|
|
coloredName = fmt.Sprintf("%s %s", coloredName, ColoredBranchStatus(b))
|
|
}
|
|
|
|
recencyColor := style.FgCyan
|
|
if b.Recency == " *" {
|
|
recencyColor = style.FgGreen
|
|
}
|
|
|
|
res := []string{recencyColor.Sprint(b.Recency), coloredName}
|
|
if fullDescription {
|
|
return append(
|
|
res,
|
|
fmt.Sprintf("%s %s",
|
|
style.FgYellow.Sprint(b.UpstreamRemote),
|
|
style.FgYellow.Sprint(b.UpstreamBranch),
|
|
),
|
|
)
|
|
}
|
|
return res
|
|
}
|
|
|
|
// GetBranchTextStyle branch color
|
|
func GetBranchTextStyle(name string) style.TextStyle {
|
|
branchType := strings.Split(name, "/")[0]
|
|
|
|
if value, ok := branchPrefixColors[branchType]; ok {
|
|
return value
|
|
}
|
|
|
|
switch branchType {
|
|
case "feature":
|
|
return style.FgGreen
|
|
case "bugfix":
|
|
return style.FgYellow
|
|
case "hotfix":
|
|
return style.FgRed
|
|
default:
|
|
return theme.DefaultTextColor
|
|
}
|
|
}
|
|
|
|
func ColoredBranchStatus(branch *models.Branch) string {
|
|
colour := style.FgYellow
|
|
if branch.MatchesUpstream() {
|
|
colour = style.FgGreen
|
|
} else if !branch.IsTrackingRemote() {
|
|
colour = style.FgRed
|
|
}
|
|
|
|
return colour.Sprint(BranchStatus(branch))
|
|
}
|
|
|
|
func BranchStatus(branch *models.Branch) string {
|
|
return fmt.Sprintf("↑%s↓%s", branch.Pushables, branch.Pullables)
|
|
}
|
|
|
|
func SetCustomBranchColors(customBranchColors map[string]string) {
|
|
for branchPrefix, colorSequence := range customBranchColors {
|
|
style := style.New().SetFg(style.NewRGBColor(color.HEX(colorSequence, false)))
|
|
branchPrefixColors[branchPrefix] = style
|
|
}
|
|
}
|