summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCaleb Bassi <calebjbassi@gmail.com>2018-02-21 02:24:36 -0800
committerCaleb Bassi <calebjbassi@gmail.com>2018-02-21 02:28:17 -0800
commitbcc1d35b558145fb6ea5bd965643a914a88f576e (patch)
tree07ebfc1239a18ba0ecf0cde2217f56e190b7e332
parent6a92c31be6666c0f3dc9554d78bac46417a963b6 (diff)
Added colorscheme support
-rw-r--r--README.md1
-rw-r--r--colorschemes/default.go37
-rw-r--r--colorschemes/solarized.go25
-rw-r--r--colorschemes/template.go37
-rw-r--r--gotop.go94
-rw-r--r--termui/block.go2
-rw-r--r--termui/colors.go10
-rw-r--r--termui/gauge.go12
-rw-r--r--termui/list.go8
-rw-r--r--termui/sparkline.go2
-rw-r--r--widgets/cpu.go1
-rw-r--r--widgets/mem.go2
12 files changed, 152 insertions, 79 deletions
diff --git a/README.md b/README.md
index d26b75c..2e801b1 100644
--- a/README.md
+++ b/README.md
@@ -84,6 +84,7 @@ Feel free to add a new one. You can use 256 colors, bold, underline, and reverse
- zooming in and out of graphs
- add gif
- create a mac binary
+ - grid should create a filled buffer so that bg is written everywhere
* cleaning up code
- termui Blocks should ignore writing to the outside area
- Ignore writes to outside of inner area, or give error?
diff --git a/colorschemes/default.go b/colorschemes/default.go
index 985b0a4..d96fb73 100644
--- a/colorschemes/default.go
+++ b/colorschemes/default.go
@@ -6,25 +6,20 @@ var DefaultCS = Colorscheme{
Bg: -1,
- Border{
- Labels: 0,
- Line: 0,
- },
-
- CPU{
- Lines: []int{0, 0, 0, 0},
- },
-
- Mem{
- Main: 0,
- Swap: 0,
- },
-
- Proc{
- Cursor: 5,
- },
-
- Sparkline{
- Graph: 10,
- },
+ BorderLabel: 7,
+ BorderLine: 6,
+
+ CPULines: []int{1, 2, 3, 4, 5, 6, 7, 8},
+
+ MainMem: 5,
+ SwapMem: 11,
+
+ ProcCursor: 4,
+
+ Sparkline: 4,
+
+ DiskBar: 7,
+
+ TempLow: 2,
+ TempHigh: 1,
}
diff --git a/colorschemes/solarized.go b/colorschemes/solarized.go
index e69de29..f648bbe 100644
--- a/colorschemes/solarized.go
+++ b/colorschemes/solarized.go
@@ -0,0 +1,25 @@
+package colorschemes
+
+var SolarizedCS = Colorscheme{
+ Name: "Default",
+ Author: "Caleb Bassi",
+
+ Bg: -1,
+
+ BorderLabel: 7,
+ BorderLine: 6,
+
+ CPULines: []int{1, 2, 3, 4, 5, 6, 7, 8},
+
+ MainMem: 5,
+ SwapMem: 11,
+
+ ProcCursor: 4,
+
+ Sparkline: 4,
+
+ DiskBar: 7,
+
+ TempLow: 2,
+ TempHigh: 1,
+}
diff --git a/colorschemes/template.go b/colorschemes/template.go
index 5819f74..f2fcdbf 100644
--- a/colorschemes/template.go
+++ b/colorschemes/template.go
@@ -22,25 +22,20 @@ type Colorscheme struct {
Bg int
- Border struct {
- Labels int
- Line int
- }
-
- CPU struct {
- Lines []int
- }
-
- Mem struct {
- Main int
- Swap int
- }
-
- Proc struct {
- Cursor int
- }
-
- Sparkline struct {
- Graph int
- }
+ BorderLabel int
+ BorderLine int
+
+ CPULines []int
+
+ MainMem int
+ SwapMem int
+
+ ProcCursor int
+
+ Sparkline int
+
+ DiskBar int
+
+ TempLow int
+ TempHigh int
}
diff --git a/gotop.go b/gotop.go
index 2287888..03be71c 100644
--- a/gotop.go
+++ b/gotop.go
@@ -1,13 +1,14 @@
package main
import (
- // "fmt"
+ "fmt"
"os"
// "os/exec"
"os/signal"
"syscall"
"time"
+ "github.com/cjbassi/gotop/colorschemes"
ui "github.com/cjbassi/gotop/termui"
w "github.com/cjbassi/gotop/widgets"
"github.com/docopt/docopt-go"
@@ -24,37 +25,61 @@ var (
procLoaded = make(chan bool, 1)
keyPressed = make(chan bool, 1)
- cpu = w.NewCPU()
- mem = w.NewMem()
- proc = w.NewProc(procLoaded, keyPressed)
- net = w.NewNet()
- disk = w.NewDisk()
- temp = w.NewTemp()
+ colorscheme = colorschemes.DefaultCS
- help = w.NewHelpMenu()
+ cpu *w.CPU
+ mem *w.Mem
+ proc *w.Proc
+ net *w.Net
+ disk *w.Disk
+ temp *w.Temp
+
+ help *w.HelpMenu
)
// Sets up docopt which is a command line argument parser
-func docoptInit() {
+func arguments() {
usage := `
Usage: gotop [options]
Options:
- -c, --color Set a colorscheme.
- -h, --help Show this screen.
- -u, --upgrade Updates gotop if needed.
- -v, --version Show version.
+ -c, --color <name> Set a colorscheme.
+ -h, --help Show this screen.
+ -u, --upgrade Updates gotop if needed.
+ -v, --version Show version.
Colorschemes:
default
+ solarized
`
args, _ := docopt.ParseArgs(usage, os.Args[1:], VERSION)
+
if val, _ := args["--upgrade"]; val.(bool) {
updateGotop()
os.Exit(0)
}
- if val, _ := args["--color"]; val.(bool) {
+
+ if val, _ := args["--color"]; val != nil {
+ handleColorscheme(val.(string))
+ }
+}
+
+func updateGotop() {
+ // cmd := exec.Command("sleep", "1")
+ // cmd.Run()
+ return
+}
+
+func handleColorscheme(cs string) {
+ switch cs {
+ case "solarized":
+ colorscheme = colorschemes.SolarizedCS
+ case "default":
+ colorscheme = colorschemes.DefaultCS
+ default:
+ fmt.Fprintf(os.Stderr, "error: colorscheme not recognized\n")
+ os.Exit(1)
}
}
@@ -92,17 +117,48 @@ func keyBinds() {
})
}
-func updateGotop() {
- // cmd := exec.Command("sleep", "1")
- // cmd.Run()
- return
+func termuiColors() {
+ ui.Theme.Fg = ui.Color(7)
+ ui.Theme.Bg = ui.Color(colorscheme.Bg)
+ ui.Theme.BorderBg = ui.Color(colorscheme.Bg)
+ ui.Theme.LabelBg = ui.Color(colorscheme.Bg)
+
+ ui.Theme.TableCursor = ui.Color(colorscheme.ProcCursor)
+ ui.Theme.Sparkline = ui.Color(colorscheme.Sparkline)
+ ui.Theme.BarColor = ui.Color(colorscheme.DiskBar)
+ ui.Theme.TempLow = ui.Color(colorscheme.TempLow)
+ ui.Theme.TempHigh = ui.Color(colorscheme.TempHigh)
+}
+
+func widgetColors() {
+ mem.LineColor["Main"] = ui.Color(colorscheme.MainMem)
+ mem.LineColor["Swap"] = ui.Color(colorscheme.SwapMem)
+
+ LineColor := make(map[string]ui.Color)
+ for i := 0; i < len(cpu.Data); i++ {
+ LineColor[fmt.Sprintf("CPU%d", i+1)] = ui.Color(colorscheme.CPULines[i])
+ }
+ cpu.LineColor = LineColor
}
func main() {
- docoptInit()
+ arguments()
+
+ termuiColors()
keyBinds()
+ cpu = w.NewCPU()
+ mem = w.NewMem()
+ proc = w.NewProc(procLoaded, keyPressed)
+ net = w.NewNet()
+ disk = w.NewDisk()
+ temp = w.NewTemp()
+
+ help = w.NewHelpMenu()
+
+ widgetColors()
+
<-procLoaded
err := ui.Init()
diff --git a/termui/block.go b/termui/block.go
index 5b65f15..6d8602a 100644
--- a/termui/block.go
+++ b/termui/block.go
@@ -18,8 +18,8 @@ type Block struct {
BorderBg Color
LabelFg Color
LabelBg Color
- Bg Color
Fg Color
+ Bg Color
}
// NewBlock returns a *Block which inherits styles from current theme.
diff --git a/termui/colors.go b/termui/colors.go
index 53fdae8..469fd15 100644
--- a/termui/colors.go
+++ b/termui/colors.go
@@ -21,9 +21,12 @@ var DefaultTheme = Colorscheme{
BorderFg: 6,
BorderBg: -1,
- SparkLine: 4,
+ Sparkline: 4,
LineGraph: -1,
TableCursor: 4,
+ BarColor: 7,
+ TempLow: 2,
+ TempHigh: 1,
}
// A ColorScheme represents the current look-and-feel of the dashboard.
@@ -36,7 +39,10 @@ type Colorscheme struct {
BorderFg Color
BorderBg Color
- SparkLine Color
+ Sparkline Color
LineGraph Color
TableCursor Color
+ BarColor Color
+ TempLow Color
+ TempHigh Color
}
diff --git a/termui/gauge.go b/termui/gauge.go
index 6525498..7e6ab7e 100644
--- a/termui/gauge.go
+++ b/termui/gauge.go
@@ -18,7 +18,7 @@ func NewGauge() *Gauge {
return &Gauge{
Block: NewBlock(),
PercentColor: Theme.Fg,
- BarColor: Theme.Bg,
+ BarColor: Theme.BarColor,
}
}
@@ -30,11 +30,7 @@ func (g *Gauge) Buffer() *Buffer {
width := g.Percent * g.X / 100
for y := 1; y <= g.Y; y++ {
for x := 1; x <= width; x++ {
- bg := g.BarColor
- if bg == ColorDefault {
- bg |= AttrReverse
- }
- buf.SetCell(x, y, Cell{' ', ColorDefault, bg})
+ buf.SetCell(x, y, Cell{' ', g.BarColor, g.BarColor})
}
}
@@ -46,10 +42,12 @@ func (g *Gauge) Buffer() *Buffer {
for i, char := range s {
bg := g.Bg
+ fg := g.Fg
if x+i < width {
+ fg = g.BarColor
bg = AttrReverse
}
- buf.SetCell(1+x+i, y, Cell{char, g.PercentColor, bg})
+ buf.SetCell(1+x+i, y, Cell{char, fg, bg})
}
return buf
diff --git a/termui/list.go b/termui/list.go
index 0d82afb..27c0380 100644
--- a/termui/list.go
+++ b/termui/list.go
@@ -29,13 +29,13 @@ func (bc *List) Buffer() *Buffer {
if y+1 > bc.Y {
break
}
- bg := Color(2)
+ bg := Theme.TempLow
if bc.Data[y] >= bc.Threshold {
- bg = Color(1)
+ bg = Theme.TempHigh
}
r := MaxString(text, (bc.X - 4))
- buf.SetString(1, y+1, r, Color(7), ColorDefault)
- buf.SetString(bc.X-2, y+1, fmt.Sprintf("%dC", bc.Data[y]), bg, ColorDefault)
+ buf.SetString(1, y+1, r, Color(7), bc.Bg)
+ buf.SetString(bc.X-2, y+1, fmt.Sprintf("%dC", bc.Data[y]), bg, bc.Bg)
}
return buf
diff --git a/termui/sparkline.go b/termui/sparkline.go
index f71d5c8..9f3b9ee 100644
--- a/termui/sparkline.go
+++ b/termui/sparkline.go
@@ -27,7 +27,7 @@ func (s *Sparklines) Add(sl Sparkline) {
func NewSparkline() *Sparkline {
return &Sparkline{
TitleColor: Theme.Fg,
- LineColor: Theme.SparkLine,
+ LineColor: Theme.Sparkline,
}
}
diff --git a/widgets/cpu.go b/widgets/cpu.go
index c36f7ad..11edd90 100644
--- a/widgets/cpu.go
+++ b/widgets/cpu.go
@@ -21,7 +21,6 @@ func NewCPU() *CPU {
for i := 0; i < c.count; i++ {
key := "CPU" + strconv.Itoa(i+1)
c.Data[key] = []float64{0}
- c.LineColor[key] = ui.Color(1 + i)
}
go c.update()
diff --git a/widgets/mem.go b/widgets/mem.go
index 3f0efca..7aa5657 100644
--- a/widgets/mem.go
+++ b/widgets/mem.go
@@ -17,8 +17,6 @@ func NewMem() *Mem {
m.Label = "Memory Usage"
m.Data["Main"] = []float64{0} // Sets initial data to 0
m.Data["Swap"] = []float64{0}
- m.LineColor["Main"] = ui.Color(5)
- m.LineColor["Swap"] = ui.Color(11)
go m.update()
ticker := time.NewTicker(m.interval)