339 lines
8.6 KiB
Go
339 lines
8.6 KiB
Go
// Copyright 2017-2025 WIT.COM Inc. All rights reserved.
|
|
// Use of this source code is governed by the GPL 3.0
|
|
|
|
package main
|
|
|
|
import (
|
|
"math/rand"
|
|
|
|
"github.com/awesome-gocui/gocui"
|
|
"go.wit.com/log"
|
|
)
|
|
|
|
// simple colors for light and dark
|
|
|
|
// information about how terminfo works
|
|
// https://jvns.ca/blog/2024/10/01/terminal-colours/
|
|
|
|
// TODO: move all this to a protobuf
|
|
// TODO: add black/white only flag for ttyS0
|
|
// TODO: fix kvm/qemu serial console & SIGWINCH.
|
|
// TODO: check minicom (doesn't work)
|
|
// TODO: fix riscv boards
|
|
|
|
// DONE ON ENABLE() WIDGET
|
|
// restores the last saved color and makes it active
|
|
func (tk *guiWidget) restoreEnableColor() {
|
|
if tk.color == nil {
|
|
tk.color = new(colorT)
|
|
}
|
|
tk.color.frame = tk.colorLast.frame
|
|
tk.color.fg = tk.colorLast.fg
|
|
tk.color.bg = tk.colorLast.bg
|
|
tk.color.selFg = tk.colorLast.selFg
|
|
tk.color.selBg = tk.colorLast.selBg
|
|
|
|
tk.activateColor()
|
|
}
|
|
|
|
// DONE ON DISABLE() WIDGET
|
|
// makes the button look disabled
|
|
func (tk *guiWidget) setColorDisable() {
|
|
if tk.color == nil {
|
|
tk.color = new(colorT)
|
|
}
|
|
// save the current color
|
|
tk.color.frame = superLightGrey
|
|
tk.color.fg = gocui.ColorBlack
|
|
tk.color.bg = superLightGrey
|
|
tk.color.selFg = superLightGrey
|
|
tk.color.selBg = superLightGrey
|
|
tk.activateColor()
|
|
}
|
|
|
|
// sets the current gocui highlight colors
|
|
func (tk *guiWidget) activateColor() {
|
|
if tk.v == nil {
|
|
return
|
|
}
|
|
tk.v.FrameColor = tk.color.frame
|
|
tk.v.FgColor = tk.color.fg
|
|
tk.v.BgColor = tk.color.bg
|
|
tk.v.SelFgColor = tk.color.selFg
|
|
tk.v.SelBgColor = tk.color.selBg
|
|
}
|
|
|
|
// saves the color and makes it active
|
|
func (tk *guiWidget) updateColor() {
|
|
if tk.v == nil {
|
|
return
|
|
}
|
|
if tk.color != nil {
|
|
tk.colorLast.frame = tk.color.frame
|
|
tk.colorLast.fg = tk.color.fg
|
|
tk.colorLast.bg = tk.color.bg
|
|
tk.colorLast.selFg = tk.color.selFg
|
|
tk.colorLast.selBg = tk.color.selBg
|
|
}
|
|
tk.activateColor()
|
|
}
|
|
|
|
// Below are all the colors. TODO: move to protobuf and save in a config file
|
|
|
|
func (tk *guiWidget) setColorWindowFrame() {
|
|
if tk.color == nil {
|
|
tk.color = new(colorT)
|
|
}
|
|
if me.dark { // use a dark color palette
|
|
tk.color.frame = gocui.AttrNone
|
|
tk.color.fg = gocui.ColorBlack
|
|
tk.color.bg = gocui.ColorBlack
|
|
tk.color.selFg = gocui.AttrNone
|
|
tk.color.selBg = gocui.AttrNone
|
|
} else {
|
|
tk.color.frame = gocui.AttrNone
|
|
tk.color.fg = gocui.AttrNone
|
|
tk.color.bg = gocui.AttrNone
|
|
tk.color.selFg = gocui.AttrNone
|
|
tk.color.selBg = gocui.AttrNone
|
|
}
|
|
|
|
tk.updateColor()
|
|
}
|
|
|
|
// weird. lots of color problems for me on debian sid using the traditional Andy Herzfield 'gnome'
|
|
func (tk *guiWidget) setColorWindowTitleActive() {
|
|
if tk.color == nil {
|
|
tk.color = new(colorT)
|
|
}
|
|
if me.dark { // use a dark color palette
|
|
tk.color.frame = gocui.AttrNone
|
|
tk.color.fg = gocui.ColorBlue
|
|
tk.color.bg = gocui.AttrNone
|
|
tk.color.selFg = gocui.ColorWhite
|
|
tk.color.selBg = gocui.ColorBlue
|
|
} else {
|
|
tk.color.frame = gocui.ColorWhite
|
|
tk.color.fg = gocui.ColorWhite
|
|
tk.color.bg = gocui.ColorBlue
|
|
tk.color.selFg = gocui.ColorWhite
|
|
tk.color.selBg = gocui.ColorBlue
|
|
}
|
|
|
|
tk.updateColor()
|
|
}
|
|
|
|
func (tk *guiWidget) setColorWindowTitle() {
|
|
if tk.color == nil {
|
|
tk.color = new(colorT)
|
|
}
|
|
if me.dark { // use a dark color palette
|
|
tk.color.frame = gocui.AttrNone
|
|
tk.color.fg = gocui.ColorBlue
|
|
tk.color.bg = gocui.AttrNone
|
|
tk.color.selFg = gocui.ColorWhite
|
|
tk.color.selBg = gocui.ColorBlue
|
|
} else {
|
|
tk.color.frame = gocui.ColorWhite
|
|
tk.color.fg = gocui.ColorBlue
|
|
tk.color.bg = gocui.AttrNone
|
|
tk.color.selFg = gocui.ColorWhite
|
|
tk.color.selBg = gocui.ColorBlue
|
|
}
|
|
|
|
tk.updateColor()
|
|
}
|
|
|
|
func (tk *guiWidget) setColorBG() {
|
|
if tk.color == nil {
|
|
tk.color = new(colorT)
|
|
}
|
|
if me.dark {
|
|
tk.color.frame = gocui.AttrNone
|
|
tk.color.fg = gocui.ColorBlack
|
|
tk.color.bg = gocui.ColorBlack
|
|
tk.color.selFg = gocui.AttrNone
|
|
tk.color.selBg = gocui.AttrNone
|
|
} else {
|
|
tk.color.frame = gocui.ColorWhite
|
|
tk.color.fg = gocui.ColorWhite
|
|
tk.color.bg = gocui.AttrNone
|
|
tk.color.selFg = gocui.AttrNone
|
|
tk.color.selBg = gocui.AttrNone
|
|
}
|
|
|
|
tk.updateColor()
|
|
}
|
|
|
|
func (tk *guiWidget) setColorLabel() {
|
|
if tk.color == nil {
|
|
tk.color = new(colorT)
|
|
}
|
|
if me.dark {
|
|
tk.color.frame = gocui.AttrNone
|
|
tk.color.fg = gocui.ColorWhite
|
|
tk.color.bg = gocui.ColorBlack
|
|
tk.color.selFg = gocui.ColorWhite
|
|
tk.color.selBg = gocui.AttrNone
|
|
} else {
|
|
tk.color.frame = gocui.AttrNone
|
|
tk.color.fg = gocui.ColorBlack
|
|
tk.color.bg = gocui.AttrNone
|
|
tk.color.selFg = gocui.AttrNone
|
|
tk.color.selBg = gocui.ColorWhite
|
|
}
|
|
|
|
tk.updateColor()
|
|
}
|
|
|
|
func (tk *guiWidget) setColorButtonDense() {
|
|
if tk.color == nil {
|
|
tk.color = new(colorT)
|
|
}
|
|
if me.dark {
|
|
tk.color.frame = gocui.AttrNone
|
|
tk.color.fg = gocui.ColorBlue
|
|
tk.color.bg = gocui.ColorBlack
|
|
tk.color.selFg = gocui.ColorWhite
|
|
tk.color.selBg = gocui.ColorBlue
|
|
} else {
|
|
tk.color.frame = gocui.AttrNone
|
|
tk.color.fg = gocui.ColorWhite
|
|
tk.color.bg = gocui.ColorBlue
|
|
tk.color.selFg = gocui.ColorBlue
|
|
tk.color.selBg = gocui.AttrNone
|
|
}
|
|
|
|
tk.updateColor()
|
|
}
|
|
|
|
func (tk *guiWidget) setColorButton() {
|
|
if tk.color == nil {
|
|
tk.color = new(colorT)
|
|
}
|
|
if me.dark {
|
|
tk.color.frame = gocui.ColorBlack
|
|
tk.color.fg = gocui.ColorBlue
|
|
tk.color.bg = gocui.ColorBlack
|
|
tk.color.selFg = gocui.ColorWhite
|
|
tk.color.selBg = gocui.ColorBlue
|
|
} else {
|
|
tk.color.frame = gocui.ColorBlue
|
|
tk.color.fg = gocui.AttrNone
|
|
tk.color.bg = gocui.AttrNone
|
|
tk.color.selFg = gocui.ColorWhite
|
|
tk.color.selBg = gocui.ColorBlue
|
|
}
|
|
|
|
tk.updateColor()
|
|
}
|
|
|
|
func (tk *guiWidget) setColorInput() {
|
|
if tk.color == nil {
|
|
tk.color = new(colorT)
|
|
}
|
|
if me.dark {
|
|
tk.color.frame = gocui.ColorYellow
|
|
tk.color.fg = gocui.AttrNone
|
|
tk.color.bg = gocui.AttrNone
|
|
tk.color.selFg = gocui.ColorYellow
|
|
tk.color.selBg = gocui.ColorBlack
|
|
} else {
|
|
tk.color.frame = gocui.ColorYellow
|
|
tk.color.fg = gocui.AttrNone
|
|
tk.color.bg = gocui.AttrNone
|
|
tk.color.selFg = gocui.ColorYellow
|
|
tk.color.selBg = gocui.ColorBlack
|
|
}
|
|
tk.updateColor()
|
|
}
|
|
|
|
func (tk *guiWidget) setColorModal() {
|
|
if tk.color == nil {
|
|
tk.color = new(colorT)
|
|
}
|
|
if me.dark {
|
|
tk.color.frame = gocui.ColorRed
|
|
tk.color.fg = gocui.ColorRed
|
|
tk.color.bg = gocui.ColorBlack
|
|
tk.color.selFg = gocui.ColorBlack
|
|
tk.color.selBg = gocui.AttrNone
|
|
} else {
|
|
tk.color.frame = gocui.ColorRed
|
|
tk.color.fg = gocui.AttrNone
|
|
tk.color.bg = gocui.AttrNone
|
|
tk.color.selFg = gocui.AttrNone
|
|
tk.color.selBg = gocui.ColorWhite
|
|
}
|
|
tk.updateColor()
|
|
}
|
|
|
|
// what genius figured this out?
|
|
func (tk *guiWidget) setColorTextbox() {
|
|
if tk.color == nil {
|
|
tk.color = new(colorT)
|
|
}
|
|
if me.dark {
|
|
tk.color.frame = gocui.ColorRed
|
|
tk.color.fg = gocui.ColorRed
|
|
tk.color.bg = gocui.ColorBlack
|
|
tk.color.selFg = gocui.ColorBlack
|
|
tk.color.selBg = gocui.AttrNone
|
|
} else {
|
|
tk.color.frame = gocui.ColorRed
|
|
tk.color.fg = gocui.AttrNone
|
|
tk.color.bg = gocui.AttrNone
|
|
tk.color.selFg = gocui.AttrNone
|
|
tk.color.selBg = gocui.ColorWhite
|
|
}
|
|
tk.updateColor()
|
|
}
|
|
|
|
// just notes down here
|
|
|
|
// what genius figured this out?
|
|
// originally from github.com/dimasma0305/GoFetch
|
|
func get_teminal_color_palette() string {
|
|
// var runes rune
|
|
// color1 := "\x1b[0;29m \x1b[0m"
|
|
// runes = []rune(color1)
|
|
// view.WriteRunes(runes)
|
|
|
|
color1 := "\x1b[0;29m \x1b[0m"
|
|
color2 := "\x1b[0;31m \x1b[0m"
|
|
color3 := "\x1b[0;32m \x1b[0m"
|
|
color4 := "\x1b[0;33m \x1b[0m"
|
|
color5 := "\x1b[0;34m \x1b[0m"
|
|
color6 := "\x1b[0;35m \x1b[0m"
|
|
color7 := "\x1b[0;36m \x1b[0m"
|
|
color8 := "\x1b[0;37m \x1b[0m"
|
|
|
|
return color1 + " " + color2 + " " + color3 + " " + color4 + " " + color5 + " " + color6 + " " + color7 + " " + color8
|
|
}
|
|
|
|
func randColor() gocui.Attribute {
|
|
colors := []string{"Green", "#FFAA55", "Yellow", "Blue", "Red", "Black", "White"}
|
|
i := rand.Intn(len(colors))
|
|
log.Log(NOW, "randColor() i =", i)
|
|
return gocui.GetColor(colors[i])
|
|
}
|
|
|
|
var none gocui.Attribute = gocui.AttrNone
|
|
var colorNone colorT = colorT{none, none, none, none, none, "debug none"}
|
|
|
|
var lightPurple gocui.Attribute = gocui.GetColor("#DDDDDD") // light purple
|
|
var darkPurple gocui.Attribute = gocui.GetColor("#FFAA55") // Dark Purple
|
|
var heavyPurple gocui.Attribute = gocui.GetColor("#88AA55") // heavy purple
|
|
var powdererBlue gocui.Attribute = gocui.GetColor("#B0E0E6") // w3c 'powerder blue'
|
|
var superLightGrey gocui.Attribute = gocui.GetColor("#55AAFF") // super light grey
|
|
|
|
// Standard defined colors from gocui:
|
|
// ColorBlack ColorRed ColorGreen ColorYellow ColorBlue ColorMagenta ColorCyan ColorWhite
|
|
|
|
// v.BgColor = gocui.GetColor("#111111") // crazy red
|
|
// v.BgColor = gocui.GetColor("#FF9911") // heavy red
|
|
// v.SelBgColor = gocui.GetColor("#FFEE11") // blood red
|
|
|
|
// v.BgColor = gocui.GetColor("#55AAFF") // super light grey
|
|
// v.BgColor = gocui.GetColor("#FFC0CB") // 'w3c pink' yellow
|