diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4f062d6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/release diff --git a/Makefile b/Makefile index 5dfc46c..38609e4 100644 --- a/Makefile +++ b/Makefile @@ -29,5 +29,4 @@ release: GOOS=linux GOARCH=amd64 go build -o "release/${APP}_linux_amd64" -trimpath ${BUILDFLAGS} GOOS=linux GOARCH=arm64 go build -o "release/${APP}_linux_arm64" -trimpath ${BUILDFLAGS} GOOS=linux GOARCH=386 go build -o "release/${APP}_linux_386" -trimpath ${BUILDFLAGS} - GOOS=windows GOARCH=amd64 go build -o "release/${APP}_windows_amd64.exe" -trimpath ${BUILDFLAGS} diff --git a/statusline.go b/statusline.go index dd7f32d..350a076 100644 --- a/statusline.go +++ b/statusline.go @@ -1,17 +1,22 @@ package main import ( + "flag" "fmt" "os" "runtime" - "strconv" "time" "github.com/shirou/gopsutil/v3/load" "github.com/shirou/gopsutil/v3/mem" ) -const warnFormat = "#[bg=colour208]" +type Format struct { + Default, Warning string +} + +var defaultFormat = Format{} +var tmuxFormat = Format{Default: "#[default]", Warning: "#[bg=colour208]"} var binarySuffixes = []string{"B", "KiB", "MiB", "GiB", "TiB"} @@ -34,20 +39,20 @@ func usage() { os.Exit(2) } -func printLoad(precision int) { +func printLoad(format Format, precision int) { l, err := load.Avg() if err != nil { panic(err) // fixme } if l.Load1 > float64(runtime.NumCPU()) { - fmt.Print(warnFormat) + fmt.Print(format.Warning) } fmt.Printf("[%.[1]*[2]f %.[1]*[3]f %.[1]*[4]f]", precision, l.Load1, l.Load5, l.Load15) } -func printMem(absolute, percent bool) { +func printMem(format Format, absolute, percent bool) { if !(absolute || percent) { return } @@ -58,9 +63,9 @@ func printMem(absolute, percent bool) { } if v.UsedPercent > 90 { - fmt.Print(warnFormat, "[") + fmt.Print(format.Warning, "[") } else { - fmt.Print("#[default][") + fmt.Print(format.Default, "[") } if absolute { fmt.Printf("%s/%s", HBin(v.Used, 1), HBin(v.Total, 1)) @@ -74,35 +79,41 @@ func printMem(absolute, percent bool) { fmt.Print("]") } -func printTime(format string) { +func printTime(format Format, timeFormat string) { now := time.Now() - fmt.Print(now.Format("#[default]" + format)) + fmt.Print(format.Default, now.Format(timeFormat)) } func main() { - if len(os.Args) != 2 { - usage() - } - cols, err := strconv.Atoi(os.Args[1]) - if err != nil { - fmt.Fprintln(os.Stderr, err) - usage() + cols := flag.Uint("c", 0, "Window width in columns. 0 prints everything.") + mode := flag.String("style", "none", "Include style directives in output. Valid values: none tmux") + flag.Parse() + + format := defaultFormat + switch *mode { + case "", "none": + case "tmux": + format = tmuxFormat + default: + fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0]) + flag.PrintDefaults() + os.Exit(2) } - if cols >= 150 { - printLoad(2) - printMem(true, true) - printTime(" Mon 2006-01-02 15:04") - } else if cols >= 120 { - printLoad(2) - printMem(false, true) - printTime(" 15:04") - } else if cols >= 100 { - printLoad(0) - printMem(false, true) - printTime(" 15:04") - } else if cols >= 80 { - printTime("15:04") + if *cols == 0 || *cols >= 150 { + printLoad(format, 2) + printMem(format, true, true) + printTime(format, " Mon 2006-01-02 15:04") + } else if *cols >= 120 { + printLoad(format, 2) + printMem(format, false, true) + printTime(format, " 15:04") + } else if *cols >= 100 { + printLoad(format, 0) + printMem(format, false, true) + printTime(format, " 15:04") + } else if *cols >= 80 { + printTime(format, "15:04") } }