diff --git a/config/colours.go b/config/colours.go index ebcb32d..a7325a6 100644 --- a/config/colours.go +++ b/config/colours.go @@ -9,28 +9,39 @@ import ( type Colour [3]float32 -func (c *Colour) UnmarshalText(data []byte) error { +func strToColourNoErr(hexStr string) Colour { + c, _ := strToColour(hexStr) + return c +} - hexStr := string(data) +func strToColour(hexStr string) (Colour, error) { + + c := [3]float32{0, 0, 0} if strings.HasPrefix(hexStr, "#") { hexStr = hexStr[1:] } if len(hexStr) != 6 { - return fmt.Errorf("Invalid colour format. Should be like #ffffff") + return c, fmt.Errorf("Invalid colour format. Should be like #ffffff") } bytes, err := hex.DecodeString(hexStr) if err != nil { - return err + return c, err } c[0] = float32(bytes[0]) / 255 c[1] = float32(bytes[1]) / 255 c[2] = float32(bytes[2]) / 255 - return nil + return c, nil +} + +func (c *Colour) UnmarshalText(data []byte) error { + var err error + *c, err = strToColour(string(data)) + return err } func (c Colour) MarshalText() (text []byte, err error) { @@ -43,39 +54,23 @@ func (c Colour) MarshalText() (text []byte, err error) { } type ColourScheme struct { - Cursor Colour `toml:"cursor"` - DefaultFg Colour `toml:"default_fg"` - BlackFg Colour `toml:"black_fg"` - RedFg Colour `toml:"red_fg"` - GreenFg Colour `toml:"green_fg"` - YellowFg Colour `toml:"yellow_fg"` - BlueFg Colour `toml:"blue_fg"` - MagentaFg Colour `toml:"magenta_fg"` - CyanFg Colour `toml:"cyan_fg"` - LightGreyFg Colour `toml:"light_grey_fg"` - DarkGreyFg Colour `toml:"dark_grey_fg"` - LightRedFg Colour `toml:"light_red_fg"` - LightGreenFg Colour `toml:"light_green_fg"` - LightYellowFg Colour `toml:"light_yellow_fg"` - LightBlueFg Colour `toml:"light_blue_fg"` - LightMagentaFg Colour `toml:"light_magenta_fg"` - LightCyanFg Colour `toml:"light_cyan_fg"` - WhiteFg Colour `toml:"white_fg"` - DefaultBg Colour `toml:"default_bg"` - BlackBg Colour `toml:"black_bg"` - RedBg Colour `toml:"red_bg"` - GreenBg Colour `toml:"green_bg"` - YellowBg Colour `toml:"yellow_bg"` - BlueBg Colour `toml:"blue_bg"` - MagentaBg Colour `toml:"magenta_bg"` - CyanBg Colour `toml:"cyan_bg"` - LightGreyBg Colour `toml:"light_grey_bg"` - DarkGreyBg Colour `toml:"dark_grey_bg"` - LightRedBg Colour `toml:"light_red_bg"` - LightGreenBg Colour `toml:"light_green_bg"` - LightYellowBg Colour `toml:"light_yellow_bg"` - LightBlueBg Colour `toml:"light_blue_bg"` - LightMagentaBg Colour `toml:"light_magenta_bg"` - LightCyanBg Colour `toml:"light_cyan_bg"` - WhiteBg Colour `toml:"white_bg"` + Cursor Colour `toml:"cursor"` + Foreground Colour `toml:"foreground"` + Background Colour `toml:"background"` + Black Colour `toml:"black"` + Red Colour `toml:"red"` + Green Colour `toml:"green"` + Yellow Colour `toml:"yellow"` + Blue Colour `toml:"blue"` + Magenta Colour `toml:"magenta"` + Cyan Colour `toml:"cyan"` + LightGrey Colour `toml:"light_grey"` + DarkGrey Colour `toml:"dark_grey"` + LightRed Colour `toml:"light_red"` + LightGreen Colour `toml:"light_green"` + LightYellow Colour `toml:"light_yellow"` + LightBlue Colour `toml:"light_blue"` + LightMagenta Colour `toml:"light_magenta"` + LightCyan Colour `toml:"light_cyan"` + White Colour `toml:"white"` } diff --git a/config/defaults.go b/config/defaults.go index d691ad3..c459e76 100644 --- a/config/defaults.go +++ b/config/defaults.go @@ -3,42 +3,24 @@ package config var DefaultConfig = Config{ DebugMode: false, ColourScheme: ColourScheme{ - Cursor: [3]float32{0.8, 0.8, 0.8}, - //fg - DefaultFg: [3]float32{1, 1, 1}, - BlackFg: [3]float32{0, 0, 0}, - RedFg: [3]float32{1, 0, 0}, - GreenFg: [3]float32{0, 1, 0}, - YellowFg: [3]float32{1, 1, 0}, - BlueFg: [3]float32{0, 0, 1}, - MagentaFg: [3]float32{1, 0, 1}, - CyanFg: [3]float32{0, 1, 1}, - LightGreyFg: [3]float32{0.7, 0.7, 0.7}, - DarkGreyFg: [3]float32{0.3, 0.3, 0.3}, - LightRedFg: [3]float32{1, 0.5, 0.5}, - LightGreenFg: [3]float32{0.5, 1, 0.5}, - LightYellowFg: [3]float32{1, 1, 0.5}, - LightBlueFg: [3]float32{0.5, 0.5, 1}, - LightMagentaFg: [3]float32{1, 0.5, 1}, - LightCyanFg: [3]float32{0.5, 1, 1}, - WhiteFg: [3]float32{1, 1, 1}, - // bg - DefaultBg: [3]float32{0.1, 0.1, 0.1}, - BlackBg: [3]float32{0, 0, 0}, - RedBg: [3]float32{1, 0, 0}, - GreenBg: [3]float32{0, 1, 0}, - YellowBg: [3]float32{1, 1, 0}, - BlueBg: [3]float32{0, 0, 1}, - MagentaBg: [3]float32{1, 0, 1}, - CyanBg: [3]float32{0, 1, 1}, - LightGreyBg: [3]float32{0.7, 0.7, 0.7}, - DarkGreyBg: [3]float32{0.3, 0.3, 0.3}, - LightRedBg: [3]float32{1, 0.5, 0.5}, - LightGreenBg: [3]float32{0.5, 1, 0.5}, - LightYellowBg: [3]float32{1, 1, 0.5}, - LightBlueBg: [3]float32{0.5, 0.5, 1}, - LightMagentaBg: [3]float32{1, 0.5, 1}, - LightCyanBg: [3]float32{0.5, 1, 1}, - WhiteBg: [3]float32{1, 1, 1}, + Cursor: strToColourNoErr("#e8dfd6"), + Foreground: strToColourNoErr("#e8dfd6"), + Background: strToColourNoErr("#021b21"), + Black: strToColourNoErr("#032c36"), + Red: strToColourNoErr("#c2454e"), + Green: strToColourNoErr("#7cbf9e"), + Yellow: strToColourNoErr("#8a7a63"), + Blue: strToColourNoErr("#2e3340"), + Magenta: strToColourNoErr("#ff5879"), + Cyan: strToColourNoErr("#44b5b1"), + LightGrey: strToColourNoErr("#f2f1b9"), + DarkGrey: strToColourNoErr("#065f73"), + LightRed: strToColourNoErr("#ef5847"), + LightGreen: strToColourNoErr("#a2db91"), + LightYellow: strToColourNoErr("#beb090"), + LightBlue: strToColourNoErr("#61778d"), + LightMagenta: strToColourNoErr("#ff99a1"), + LightCyan: strToColourNoErr("#9ed9d8"), + White: strToColourNoErr("#f6f6c9"), }, } diff --git a/gui/gui.go b/gui/gui.go index a5586d7..d5d8c46 100644 --- a/gui/gui.go +++ b/gui/gui.go @@ -147,9 +147,9 @@ func (gui *GUI) Render() error { //glfw.SwapInterval(1) gl.ClearColor( - gui.config.ColourScheme.DefaultBg[0], - gui.config.ColourScheme.DefaultBg[1], - gui.config.ColourScheme.DefaultBg[2], + gui.config.ColourScheme.Background[0], + gui.config.ColourScheme.Background[1], + gui.config.ColourScheme.Background[2], 1.0, ) diff --git a/gui/renderer.go b/gui/renderer.go index da2528e..35daf7b 100644 --- a/gui/renderer.go +++ b/gui/renderer.go @@ -227,7 +227,7 @@ func (r *OpenGLRenderer) DrawCell(cell *buffer.Cell, col int, row int) { gl.UseProgram(r.program) // don't bother rendering rectangles that are the same colour as the background - if bg != r.config.ColourScheme.DefaultBg { + if bg != r.config.ColourScheme.Background { rect.setColour(bg) gl.BindVertexArray(rect.vao) gl.DrawArrays(gl.TRIANGLES, 0, 6) diff --git a/terminal/sgr.go b/terminal/sgr.go index 250c242..04a3ea8 100644 --- a/terminal/sgr.go +++ b/terminal/sgr.go @@ -14,8 +14,8 @@ func sgrSequenceHandler(params []string, intermediate string, terminal *Terminal case "00", "0", "": attr := terminal.buffer.CursorAttr() *attr = buffer.CellAttributes{ - FgColour: terminal.config.ColourScheme.DefaultFg, - BgColour: terminal.config.ColourScheme.DefaultBg, + FgColour: terminal.config.ColourScheme.Foreground, + BgColour: terminal.config.ColourScheme.Background, } case "1", "01": terminal.buffer.CursorAttr().Bold = true @@ -42,73 +42,73 @@ func sgrSequenceHandler(params []string, intermediate string, terminal *Terminal case "28": terminal.buffer.CursorAttr().Hidden = false case "39": - terminal.buffer.CursorAttr().FgColour = terminal.config.ColourScheme.DefaultFg + terminal.buffer.CursorAttr().FgColour = terminal.config.ColourScheme.Foreground case "30": - terminal.buffer.CursorAttr().FgColour = terminal.config.ColourScheme.BlackFg + terminal.buffer.CursorAttr().FgColour = terminal.config.ColourScheme.Black case "31": - terminal.buffer.CursorAttr().FgColour = terminal.config.ColourScheme.RedFg + terminal.buffer.CursorAttr().FgColour = terminal.config.ColourScheme.Red case "32": - terminal.buffer.CursorAttr().FgColour = terminal.config.ColourScheme.GreenFg + terminal.buffer.CursorAttr().FgColour = terminal.config.ColourScheme.Green case "33": - terminal.buffer.CursorAttr().FgColour = terminal.config.ColourScheme.YellowFg + terminal.buffer.CursorAttr().FgColour = terminal.config.ColourScheme.Yellow case "34": - terminal.buffer.CursorAttr().FgColour = terminal.config.ColourScheme.BlueFg + terminal.buffer.CursorAttr().FgColour = terminal.config.ColourScheme.Blue case "35": - terminal.buffer.CursorAttr().FgColour = terminal.config.ColourScheme.MagentaFg + terminal.buffer.CursorAttr().FgColour = terminal.config.ColourScheme.Magenta case "36": - terminal.buffer.CursorAttr().FgColour = terminal.config.ColourScheme.CyanFg + terminal.buffer.CursorAttr().FgColour = terminal.config.ColourScheme.Cyan case "37": - terminal.buffer.CursorAttr().FgColour = terminal.config.ColourScheme.WhiteFg + terminal.buffer.CursorAttr().FgColour = terminal.config.ColourScheme.White case "90": - terminal.buffer.CursorAttr().FgColour = terminal.config.ColourScheme.DarkGreyFg + terminal.buffer.CursorAttr().FgColour = terminal.config.ColourScheme.DarkGrey case "91": - terminal.buffer.CursorAttr().FgColour = terminal.config.ColourScheme.LightRedFg + terminal.buffer.CursorAttr().FgColour = terminal.config.ColourScheme.LightRed case "92": - terminal.buffer.CursorAttr().FgColour = terminal.config.ColourScheme.LightGreenFg + terminal.buffer.CursorAttr().FgColour = terminal.config.ColourScheme.LightGreen case "93": - terminal.buffer.CursorAttr().FgColour = terminal.config.ColourScheme.LightYellowFg + terminal.buffer.CursorAttr().FgColour = terminal.config.ColourScheme.LightYellow case "94": - terminal.buffer.CursorAttr().FgColour = terminal.config.ColourScheme.LightBlueFg + terminal.buffer.CursorAttr().FgColour = terminal.config.ColourScheme.LightBlue case "95": - terminal.buffer.CursorAttr().FgColour = terminal.config.ColourScheme.LightMagentaFg + terminal.buffer.CursorAttr().FgColour = terminal.config.ColourScheme.LightMagenta case "96": - terminal.buffer.CursorAttr().FgColour = terminal.config.ColourScheme.LightCyanFg + terminal.buffer.CursorAttr().FgColour = terminal.config.ColourScheme.LightCyan case "97": - terminal.buffer.CursorAttr().FgColour = terminal.config.ColourScheme.WhiteFg + terminal.buffer.CursorAttr().FgColour = terminal.config.ColourScheme.White case "49": - terminal.buffer.CursorAttr().BgColour = terminal.config.ColourScheme.DefaultBg + terminal.buffer.CursorAttr().BgColour = terminal.config.ColourScheme.Background case "40": - terminal.buffer.CursorAttr().BgColour = terminal.config.ColourScheme.BlackBg + terminal.buffer.CursorAttr().BgColour = terminal.config.ColourScheme.Black case "41": - terminal.buffer.CursorAttr().BgColour = terminal.config.ColourScheme.RedBg + terminal.buffer.CursorAttr().BgColour = terminal.config.ColourScheme.Red case "42": - terminal.buffer.CursorAttr().BgColour = terminal.config.ColourScheme.GreenBg + terminal.buffer.CursorAttr().BgColour = terminal.config.ColourScheme.Green case "43": - terminal.buffer.CursorAttr().BgColour = terminal.config.ColourScheme.YellowBg + terminal.buffer.CursorAttr().BgColour = terminal.config.ColourScheme.Yellow case "44": - terminal.buffer.CursorAttr().BgColour = terminal.config.ColourScheme.BlueBg + terminal.buffer.CursorAttr().BgColour = terminal.config.ColourScheme.Blue case "45": - terminal.buffer.CursorAttr().BgColour = terminal.config.ColourScheme.MagentaBg + terminal.buffer.CursorAttr().BgColour = terminal.config.ColourScheme.Magenta case "46": - terminal.buffer.CursorAttr().BgColour = terminal.config.ColourScheme.CyanBg + terminal.buffer.CursorAttr().BgColour = terminal.config.ColourScheme.Cyan case "47": - terminal.buffer.CursorAttr().BgColour = terminal.config.ColourScheme.WhiteBg + terminal.buffer.CursorAttr().BgColour = terminal.config.ColourScheme.White case "100": - terminal.buffer.CursorAttr().BgColour = terminal.config.ColourScheme.DarkGreyBg + terminal.buffer.CursorAttr().BgColour = terminal.config.ColourScheme.DarkGrey case "101": - terminal.buffer.CursorAttr().BgColour = terminal.config.ColourScheme.LightRedBg + terminal.buffer.CursorAttr().BgColour = terminal.config.ColourScheme.LightRed case "102": - terminal.buffer.CursorAttr().BgColour = terminal.config.ColourScheme.LightGreenBg + terminal.buffer.CursorAttr().BgColour = terminal.config.ColourScheme.LightGreen case "103": - terminal.buffer.CursorAttr().BgColour = terminal.config.ColourScheme.LightYellowBg + terminal.buffer.CursorAttr().BgColour = terminal.config.ColourScheme.LightYellow case "104": - terminal.buffer.CursorAttr().BgColour = terminal.config.ColourScheme.LightBlueBg + terminal.buffer.CursorAttr().BgColour = terminal.config.ColourScheme.LightBlue case "105": - terminal.buffer.CursorAttr().BgColour = terminal.config.ColourScheme.LightMagentaBg + terminal.buffer.CursorAttr().BgColour = terminal.config.ColourScheme.LightMagenta case "106": - terminal.buffer.CursorAttr().BgColour = terminal.config.ColourScheme.LightCyanBg + terminal.buffer.CursorAttr().BgColour = terminal.config.ColourScheme.LightCyan case "107": - terminal.buffer.CursorAttr().BgColour = terminal.config.ColourScheme.WhiteBg + terminal.buffer.CursorAttr().BgColour = terminal.config.ColourScheme.White default: return fmt.Errorf("Unknown SGR control sequence: (ESC[%s%sm)", param, intermediate) } diff --git a/terminal/terminal.go b/terminal/terminal.go index bf3c56f..da6f5f5 100644 --- a/terminal/terminal.go +++ b/terminal/terminal.go @@ -44,8 +44,8 @@ func New(pty *os.File, logger *zap.SugaredLogger, config config.Config) *Termina return &Terminal{ buffer: buffer.NewBuffer(0, 0, buffer.CellAttributes{ - FgColour: config.ColourScheme.DefaultFg, - BgColour: config.ColourScheme.DefaultBg, + FgColour: config.ColourScheme.Foreground, + BgColour: config.ColourScheme.Background, }), pty: pty, logger: logger,