|
|
@ -1,8 +1,9 @@
|
|
|
|
package cointop
|
|
|
|
package cointop
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
import (
|
|
|
|
"github.com/fatih/color"
|
|
|
|
fcolor "github.com/fatih/color"
|
|
|
|
"github.com/jroimartin/gocui"
|
|
|
|
gocui "github.com/jroimartin/gocui"
|
|
|
|
|
|
|
|
xtermcolor "github.com/tomnomnom/xtermcolor"
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
// colorschemeColors ..
|
|
|
|
// colorschemeColors ..
|
|
|
@ -20,29 +21,29 @@ type Colorscheme struct {
|
|
|
|
cache colorCache
|
|
|
|
cache colorCache
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var fgcolorschemeColorsMap = map[string]color.Attribute{
|
|
|
|
var fgcolorschemeColorsMap = map[string]fcolor.Attribute{
|
|
|
|
"black": color.FgBlack,
|
|
|
|
"black": fcolor.FgBlack,
|
|
|
|
"blue": color.FgBlue,
|
|
|
|
"blue": fcolor.FgBlue,
|
|
|
|
"cyan": color.FgCyan,
|
|
|
|
"cyan": fcolor.FgCyan,
|
|
|
|
"green": color.FgGreen,
|
|
|
|
"green": fcolor.FgGreen,
|
|
|
|
"magenta": color.FgMagenta,
|
|
|
|
"magenta": fcolor.FgMagenta,
|
|
|
|
"red": color.FgRed,
|
|
|
|
"red": fcolor.FgRed,
|
|
|
|
"white": color.FgWhite,
|
|
|
|
"white": fcolor.FgWhite,
|
|
|
|
"yellow": color.FgYellow,
|
|
|
|
"yellow": fcolor.FgYellow,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var bgcolorschemeColorsMap = map[string]color.Attribute{
|
|
|
|
var bgcolorschemeColorsMap = map[string]fcolor.Attribute{
|
|
|
|
"black": color.BgBlack,
|
|
|
|
"black": fcolor.BgBlack,
|
|
|
|
"blue": color.BgBlue,
|
|
|
|
"blue": fcolor.BgBlue,
|
|
|
|
"cyan": color.BgCyan,
|
|
|
|
"cyan": fcolor.BgCyan,
|
|
|
|
"green": color.BgGreen,
|
|
|
|
"green": fcolor.BgGreen,
|
|
|
|
"magenta": color.BgMagenta,
|
|
|
|
"magenta": fcolor.BgMagenta,
|
|
|
|
"red": color.BgRed,
|
|
|
|
"red": fcolor.BgRed,
|
|
|
|
"white": color.BgWhite,
|
|
|
|
"white": fcolor.BgWhite,
|
|
|
|
"yellow": color.BgYellow,
|
|
|
|
"yellow": fcolor.BgYellow,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var gocuicolorschemeColorsMap = map[string]gocui.Attribute{
|
|
|
|
var gocuiColorschemeColorsMap = map[string]gocui.Attribute{
|
|
|
|
"black": gocui.ColorBlack,
|
|
|
|
"black": gocui.ColorBlack,
|
|
|
|
"blue": gocui.ColorBlue,
|
|
|
|
"blue": gocui.ColorBlue,
|
|
|
|
"cyan": gocui.ColorCyan,
|
|
|
|
"cyan": gocui.ColorCyan,
|
|
|
@ -241,29 +242,29 @@ func (c *Colorscheme) toSprintf(name string) ISprintf {
|
|
|
|
return cached
|
|
|
|
return cached
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var colors []color.Attribute
|
|
|
|
var attrs []fcolor.Attribute
|
|
|
|
if v, ok := c.colors[name+"_fg"].(string); ok {
|
|
|
|
if v, ok := c.colors[name+"_fg"].(string); ok {
|
|
|
|
if fg, ok := c.toFgAttr(v); ok {
|
|
|
|
if fg, ok := c.toFgAttr(v); ok {
|
|
|
|
colors = append(colors, fg)
|
|
|
|
attrs = append(attrs, fg)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if v, ok := c.colors[name+"_bg"].(string); ok {
|
|
|
|
if v, ok := c.colors[name+"_bg"].(string); ok {
|
|
|
|
if bg, ok := c.toBgAttr(v); ok {
|
|
|
|
if bg, ok := c.toBgAttr(v); ok {
|
|
|
|
colors = append(colors, bg)
|
|
|
|
attrs = append(attrs, bg)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if v, ok := c.colors[name+"_bold"].(bool); ok {
|
|
|
|
if v, ok := c.colors[name+"_bold"].(bool); ok {
|
|
|
|
if bold, ok := c.toBoldAttr(v); ok {
|
|
|
|
if bold, ok := c.toBoldAttr(v); ok {
|
|
|
|
colors = append(colors, bold)
|
|
|
|
attrs = append(attrs, bold)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if v, ok := c.colors[name+"_underline"].(bool); ok {
|
|
|
|
if v, ok := c.colors[name+"_underline"].(bool); ok {
|
|
|
|
if underline, ok := c.toUnderlineAttr(v); ok {
|
|
|
|
if underline, ok := c.toUnderlineAttr(v); ok {
|
|
|
|
colors = append(colors, underline)
|
|
|
|
attrs = append(attrs, underline)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
c.cache[name] = color.New(colors...).SprintFunc()
|
|
|
|
c.cache[name] = fcolor.New(attrs...).SprintFunc()
|
|
|
|
return c.cache[name]
|
|
|
|
return c.cache[name]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -291,25 +292,55 @@ func (c *Colorscheme) gocuiBgColor(name string) gocui.Attribute {
|
|
|
|
return gocui.ColorDefault
|
|
|
|
return gocui.ColorDefault
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (c *Colorscheme) toFgAttr(k string) (color.Attribute, bool) {
|
|
|
|
func (c *Colorscheme) toFgAttr(v string) (fcolor.Attribute, bool) {
|
|
|
|
attr, ok := fgcolorschemeColorsMap[k]
|
|
|
|
if attr, ok := fgcolorschemeColorsMap[v]; ok {
|
|
|
|
return attr, ok
|
|
|
|
return attr, true
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if code, ok := hexToAnsi(v); ok {
|
|
|
|
|
|
|
|
return fcolor.Attribute(code), true
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return 0, false
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (c *Colorscheme) toBgAttr(v string) (fcolor.Attribute, bool) {
|
|
|
|
|
|
|
|
if attr, ok := bgcolorschemeColorsMap[v]; ok {
|
|
|
|
|
|
|
|
return attr, true
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if code, ok := hexToAnsi(v); ok {
|
|
|
|
|
|
|
|
return fcolor.Attribute(code), true
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return 0, false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (c *Colorscheme) toBgAttr(k string) (color.Attribute, bool) {
|
|
|
|
func (c *Colorscheme) toBoldAttr(v bool) (fcolor.Attribute, bool) {
|
|
|
|
attr, ok := bgcolorschemeColorsMap[k]
|
|
|
|
return fcolor.Bold, v
|
|
|
|
return attr, ok
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (c *Colorscheme) toBoldAttr(v bool) (color.Attribute, bool) {
|
|
|
|
func (c *Colorscheme) toUnderlineAttr(v bool) (fcolor.Attribute, bool) {
|
|
|
|
return color.Bold, v
|
|
|
|
return fcolor.Underline, v
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (c *Colorscheme) toUnderlineAttr(v bool) (color.Attribute, bool) {
|
|
|
|
func (c *Colorscheme) toGocuiAttr(v string) (gocui.Attribute, bool) {
|
|
|
|
return color.Underline, v
|
|
|
|
if attr, ok := gocuiColorschemeColorsMap[v]; ok {
|
|
|
|
|
|
|
|
return attr, true
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if code, ok := hexToAnsi(v); ok {
|
|
|
|
|
|
|
|
return gocui.Attribute(code), true
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return 0, false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (c *Colorscheme) toGocuiAttr(k string) (gocui.Attribute, bool) {
|
|
|
|
func hexToAnsi(h string) (uint8, bool) {
|
|
|
|
attr, ok := gocuicolorschemeColorsMap[k]
|
|
|
|
code, err := xtermcolor.FromHexStr(h)
|
|
|
|
return attr, ok
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
return 0, false
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return code, true
|
|
|
|
}
|
|
|
|
}
|
|
|
|