mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-01-20 05:19:24 +02:00
Allow hex theme colors
This commit is contained in:
parent
c005b0d92b
commit
4fca89bc52
@ -252,7 +252,8 @@ os:
|
||||
For color attributes you can choose an array of attributes (with max one color attribute)
|
||||
The available attributes are:
|
||||
|
||||
- default
|
||||
**Colors**
|
||||
|
||||
- black
|
||||
- red
|
||||
- green
|
||||
@ -261,7 +262,12 @@ The available attributes are:
|
||||
- magenta
|
||||
- cyan
|
||||
- white
|
||||
- '#ff00ff' # can't be used on text
|
||||
|
||||
**Modifiers**
|
||||
|
||||
- bold
|
||||
- default
|
||||
- reverse # useful for high-contrast
|
||||
- underline
|
||||
|
||||
|
@ -1,6 +1,8 @@
|
||||
package theme
|
||||
|
||||
import (
|
||||
"encoding/hex"
|
||||
|
||||
"github.com/fatih/color"
|
||||
"github.com/jesseduffield/gocui"
|
||||
"github.com/jesseduffield/lazygit/pkg/config"
|
||||
@ -59,8 +61,33 @@ func UpdateTheme(themeConfig config.ThemeConfig) {
|
||||
}
|
||||
}
|
||||
|
||||
// getHexColorValues returns the rgb values of a hex color
|
||||
func getHexColorValues(v string) (r int32, g int32, b int32, valid bool) {
|
||||
if len(v) == 4 {
|
||||
v = string([]byte{v[0], v[1], v[1], v[2], v[2], v[3], v[3]})
|
||||
} else if len(v) != 7 {
|
||||
return
|
||||
}
|
||||
|
||||
if v[0] != '#' {
|
||||
return
|
||||
}
|
||||
|
||||
rgb, err := hex.DecodeString(v[1:])
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
return int32(rgb[0]), int32(rgb[1]), int32(rgb[2]), true
|
||||
}
|
||||
|
||||
// GetAttribute gets the gocui color attribute from the string
|
||||
func GetGocuiAttribute(key string) gocui.Attribute {
|
||||
r, g, b, validHexColor := getHexColorValues(key)
|
||||
if validHexColor {
|
||||
return gocui.NewRGBColor(r, g, b)
|
||||
}
|
||||
|
||||
colorMap := map[string]gocui.Attribute{
|
||||
"default": gocui.ColorDefault,
|
||||
"black": gocui.ColorBlack,
|
||||
|
63
pkg/theme/theme_test.go
Normal file
63
pkg/theme/theme_test.go
Normal file
@ -0,0 +1,63 @@
|
||||
package theme
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestGetHexColorValues(t *testing.T) {
|
||||
scenarios := []struct {
|
||||
name string
|
||||
hexColor string
|
||||
rgb []int32
|
||||
valid bool
|
||||
}{
|
||||
{
|
||||
name: "valid uppercase hex color",
|
||||
hexColor: "#00FF00",
|
||||
rgb: []int32{0, 255, 0},
|
||||
valid: true,
|
||||
},
|
||||
{
|
||||
name: "valid lowercase hex color",
|
||||
hexColor: "#00ff00",
|
||||
rgb: []int32{0, 255, 0},
|
||||
valid: true,
|
||||
},
|
||||
{
|
||||
name: "valid short hex color",
|
||||
hexColor: "#0bf",
|
||||
rgb: []int32{0, 187, 255},
|
||||
valid: true,
|
||||
},
|
||||
{
|
||||
name: "invalid hex value",
|
||||
hexColor: "#zz00ff",
|
||||
valid: false,
|
||||
},
|
||||
{
|
||||
name: "invalid length hex color",
|
||||
hexColor: "#",
|
||||
valid: false,
|
||||
},
|
||||
{
|
||||
name: "invalid length hex color",
|
||||
hexColor: "#aaaaaaaaaaa",
|
||||
valid: false,
|
||||
},
|
||||
}
|
||||
|
||||
for _, s := range scenarios {
|
||||
s := s
|
||||
t.Run(s.name, func(t *testing.T) {
|
||||
r, g, b, valid := getHexColorValues(s.hexColor)
|
||||
assert.EqualValues(t, s.valid, valid, s.hexColor)
|
||||
if valid {
|
||||
assert.EqualValues(t, s.rgb[0], r, s.hexColor)
|
||||
assert.EqualValues(t, s.rgb[1], g, s.hexColor)
|
||||
assert.EqualValues(t, s.rgb[2], b, s.hexColor)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user