Skip to content

Commit

Permalink
Overwrite branchColors config
Browse files Browse the repository at this point in the history
  • Loading branch information
mtrajano committed Jan 1, 2025
1 parent 95042fb commit 93bba0a
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 27 deletions.
7 changes: 6 additions & 1 deletion docs/Config.md
Original file line number Diff line number Diff line change
Expand Up @@ -814,7 +814,12 @@ You can customize the color of branches based on the branch prefix:
gui:
branchColors:
'docs': '#11aaff' # use a light blue for branches beginning with 'docs/'
'ISSUE-*': '#ff5733' # use a bright orange for branches beginning with 'ISSUE-'
# alternatively you can use a regex pattern as your coloring rules
# NOTE: this configuration overwrites the one above, if you would like to set a similar rule see the example below
branchColorPatterns:
'docs/.+': '#11aaff' # similar to the previous configuration above, setting branches that begin with 'docs/'
'ISSUE-\d+': '#ff5733' # use a bright orange for branches beginning with 'ISSUE-'
```

## Example Coloring
Expand Down
3 changes: 2 additions & 1 deletion pkg/config/user_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,8 @@ type GuiConfig struct {
// See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#custom-author-color
AuthorColors map[string]string `yaml:"authorColors"`
// See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#custom-branch-color
BranchColors map[string]string `yaml:"branchColors"`
BranchColors map[string]string `yaml:"branchColors"`
BranchColorPatterns map[string]string `yaml:"branchColorPatterns"`
// The number of lines you scroll by when scrolling the main window
ScrollHeight int `yaml:"scrollHeight" jsonschema:"minimum=1"`
// If true, allow scrolling past the bottom of the content in the main window
Expand Down
7 changes: 6 additions & 1 deletion pkg/gui/gui.go
Original file line number Diff line number Diff line change
Expand Up @@ -454,7 +454,12 @@ func (gui *Gui) onUserConfigLoaded() error {
} else if userConfig.Gui.ShowIcons {
icons.SetNerdFontsVersion("2")
}
presentation.SetCustomBranches(userConfig.Gui.BranchColors)

if userConfig.Gui.BranchColorPatterns != nil {
presentation.SetCustomBranches(userConfig.Gui.BranchColorPatterns, true)
} else {
presentation.SetCustomBranches(userConfig.Gui.BranchColors, false)
}

return nil
}
Expand Down
57 changes: 33 additions & 24 deletions pkg/gui/presentation/branches.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package presentation

import (
"fmt"
"regexp"
"strings"
"time"

Expand All @@ -18,7 +19,12 @@ import (
"github.com/samber/lo"
)

var branchPrefixColorCache = make(map[string]style.TextStyle)
type colorMatcher struct {
patterns map[string]style.TextStyle
isRegex bool
}

var branchPrefixColorCache *colorMatcher

func GetBranchListDisplayStrings(
branches []*models.Branch,
Expand Down Expand Up @@ -123,31 +129,14 @@ func getBranchDisplayStrings(
return res
}

func matchColorPrefix(name string) (style.TextStyle, bool) {
for possiblePattern, color := range branchPrefixColorCache {
if strings.Contains(possiblePattern, "*") {
prefix := strings.TrimSuffix(possiblePattern, "*")
if strings.HasPrefix(name, prefix) {
return color, true
}
}
}

return style.TextStyle{}, false
}

// GetBranchTextStyle branch color
func GetBranchTextStyle(name string) style.TextStyle {
branchType := strings.Split(name, "/")[0]

if value, ok := branchPrefixColorCache[branchType]; ok {
return value
}

if value, ok := matchColorPrefix(name); ok {
return value
if style, ok := branchPrefixColorCache.match(name); ok {
return *style
}

// Default colors for common branch types
branchType := strings.Split(name, "/")[0]
switch branchType {
case "feature":
return style.FgGreen
Expand All @@ -160,6 +149,23 @@ func GetBranchTextStyle(name string) style.TextStyle {
}
}

func (m *colorMatcher) match(name string) (*style.TextStyle, bool) {
if m.isRegex {
for pattern, style := range m.patterns {
if matched, _ := regexp.MatchString(pattern, name); matched {
return &style, true
}
}
} else {
branchType := strings.Split(name, "/")[0]
if value, ok := m.patterns[branchType]; ok {
return &value, true
}
}

return nil, false
}

func BranchStatus(
branch *models.Branch,
itemOperation types.ItemOperation,
Expand Down Expand Up @@ -206,6 +212,9 @@ func BranchStatus(
return result
}

func SetCustomBranches(customBranchColors map[string]string) {
branchPrefixColorCache = utils.SetCustomColors(customBranchColors)
func SetCustomBranches(customBranchColors map[string]string, isRegex bool) {
branchPrefixColorCache = &colorMatcher{
patterns: utils.SetCustomColors(customBranchColors),
isRegex: isRegex,
}
}

0 comments on commit 93bba0a

Please sign in to comment.