mirror of
https://github.com/JanDeDobbeleer/oh-my-posh.git
synced 2025-03-05 20:49:04 -08:00
fix: loop colors correctly
This commit is contained in:
parent
5c5f0fe157
commit
e8f9bb20b0
|
@ -165,35 +165,48 @@ func (a *AnsiWriter) write(background, foreground, text string) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *AnsiWriter) asAnsiColors(background, foreground string) (AnsiColor, AnsiColor) {
|
func (a *AnsiWriter) asAnsiColors(background, foreground string) (AnsiColor, AnsiColor) {
|
||||||
if backgroundValue, ok := a.isKeyword(background); ok {
|
background = a.expandKeyword(background)
|
||||||
background = backgroundValue
|
foreground = a.expandKeyword(foreground)
|
||||||
}
|
|
||||||
if foregroundValue, ok := a.isKeyword(foreground); ok {
|
|
||||||
foreground = foregroundValue
|
|
||||||
}
|
|
||||||
inverted := foreground == Transparent && len(background) != 0
|
inverted := foreground == Transparent && len(background) != 0
|
||||||
backgroundAnsi := a.getAnsiFromColorString(background, !inverted)
|
backgroundAnsi := a.getAnsiFromColorString(background, !inverted)
|
||||||
foregroundAnsi := a.getAnsiFromColorString(foreground, false)
|
foregroundAnsi := a.getAnsiFromColorString(foreground, false)
|
||||||
return backgroundAnsi, foregroundAnsi
|
return backgroundAnsi, foregroundAnsi
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *AnsiWriter) isKeyword(color string) (string, bool) {
|
func (a *AnsiWriter) isKeyword(color string) bool {
|
||||||
switch {
|
switch color {
|
||||||
case color == Background && a.Colors != nil:
|
case Transparent, ParentBackground, ParentForeground, Background, Foreground:
|
||||||
return a.Colors.Background, true
|
return true
|
||||||
case color == Foreground && a.Colors != nil:
|
|
||||||
return a.Colors.Foreground, true
|
|
||||||
case color == ParentBackground && a.ParentColors != nil:
|
|
||||||
return a.ParentColors.Background, true
|
|
||||||
case color == ParentForeground && a.ParentColors != nil:
|
|
||||||
return a.ParentColors.Foreground, true
|
|
||||||
case (color == ParentBackground || color == ParentForeground) && a.ParentColors == nil:
|
|
||||||
return Transparent, true
|
|
||||||
default:
|
default:
|
||||||
return "", false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (a *AnsiWriter) expandKeyword(keyword string) string {
|
||||||
|
resolveKeyword := func(keyword string) string {
|
||||||
|
switch {
|
||||||
|
case keyword == Background && a.Colors != nil:
|
||||||
|
return a.Colors.Background
|
||||||
|
case keyword == Foreground && a.Colors != nil:
|
||||||
|
return a.Colors.Foreground
|
||||||
|
case keyword == ParentBackground && a.ParentColors != nil:
|
||||||
|
return a.ParentColors.Background
|
||||||
|
case keyword == ParentForeground && a.ParentColors != nil:
|
||||||
|
return a.ParentColors.Foreground
|
||||||
|
default:
|
||||||
|
return Transparent
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for ok := a.isKeyword(keyword); ok; ok = a.isKeyword(keyword) {
|
||||||
|
resolved := resolveKeyword(keyword)
|
||||||
|
if resolved == keyword {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
keyword = resolved
|
||||||
|
}
|
||||||
|
return keyword
|
||||||
|
}
|
||||||
|
|
||||||
func (a *AnsiWriter) string() string {
|
func (a *AnsiWriter) string() string {
|
||||||
return a.builder.String()
|
return a.builder.String()
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue