diff options
| author | Paul Buetow <paul@buetow.org> | 2026-02-16 23:03:53 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-02-16 23:03:53 +0200 |
| commit | 41e25da4ccb3121ee9d22f8e9ad48568241d897c (patch) | |
| tree | 2bd05c5cd5bc1fb7c52238037c647ca52015038f /internal/display/display.go | |
| parent | 0f35a55c0ca2beef550d7a3fb425c53ea7b5ce88 (diff) | |
Add toggleable host separator lines (hotkey s)
Draw 1px yellow vertical lines between hosts when monitoring multiple
servers, making it easy to see where one host's bars end and the next
begins. Toggled with hotkey 's', persisted via 'w' to ~/.loadbarsrc.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'internal/display/display.go')
| -rw-r--r-- | internal/display/display.go | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/internal/display/display.go b/internal/display/display.go index 54c5c51..d3f27ca 100644 --- a/internal/display/display.go +++ b/internal/display/display.go @@ -25,8 +25,9 @@ type runState struct { showIOAvgLine bool showCores bool showMem bool - showNet bool - extended bool + showNet bool + showSeparators bool + extended bool winW int32 winH int32 prevCPU map[string]collector.CPULine @@ -44,8 +45,9 @@ func newRunState(cfg *config.Config, winW, winH int32) *runState { showIOAvgLine: cfg.ShowIOAvgLine, showCores: cfg.ShowCores, showMem: cfg.ShowMem, - showNet: cfg.ShowNet, - extended: cfg.Extended, + showNet: cfg.ShowNet, + showSeparators: cfg.ShowSeparators, + extended: cfg.Extended, winW: winW, winH: winH, prevCPU: make(map[string]collector.CPULine), @@ -160,6 +162,9 @@ func handleKey(sym sdl.Keycode, window *sdl.Window, cfg *config.Config, state *r case sdl.K_i: state.showIOAvgLine = !state.showIOAvgLine fmt.Println("==> Toggled global I/O avg line:", state.showIOAvgLine) + case sdl.K_s: + state.showSeparators = !state.showSeparators + fmt.Println("==> Toggled host separators:", state.showSeparators) case sdl.K_a: cfg.CPUAverage++ fmt.Println("==> CPU average samples:", cfg.CPUAverage) @@ -188,6 +193,7 @@ func handleKey(sym sdl.Keycode, window *sdl.Window, cfg *config.Config, state *r cfg.ShowCores = state.showCores cfg.ShowMem = state.showMem cfg.ShowNet = state.showNet + cfg.ShowSeparators = state.showSeparators cfg.Extended = state.extended if err := cfg.Write(); err != nil { fmt.Fprintf(os.Stderr, "!!! Write config: %v\n", err) @@ -271,12 +277,25 @@ func countBars(snap map[string]*stats.HostStats, showCores, showMem, showNet boo // drawBars draws CPU, memory, and network bars for all hosts in snap. func drawBars(renderer *sdl.Renderer, snap map[string]*stats.HostStats, cfg *config.Config, state *runState, numBars int) { barIndex := 0 - for _, host := range sortedHosts(snap) { + hosts := sortedHosts(snap) + // Track where each host's bars end so we can draw separators after all bars + var separatorXs []int32 + for i, host := range hosts { h := snap[host] if h == nil { continue } drawHostBars(renderer, h, host, cfg, state, numBars, &barIndex) + // Record separator position between hosts (not after the last one) + if state.showSeparators && i < len(hosts)-1 { + sepX, _ := barBounds(state.winW, numBars, barIndex) + separatorXs = append(separatorXs, sepX) + } + } + // Draw 1px yellow vertical separators on top of all bars + for _, sepX := range separatorXs { + renderer.SetDrawColor(constants.Yellow.R, constants.Yellow.G, constants.Yellow.B, 255) + renderer.FillRect(&sdl.Rect{X: sepX, Y: 0, W: 1, H: state.winH}) } } @@ -611,7 +630,7 @@ func drawMemBarSmoothed(renderer *sdl.Renderer, h *stats.HostStats, smoothed *st } func printHotkeys() { - fmt.Println("=> Hotkeys: 1=cores 2/m=mem 3/n=net e=extended g=avg line i=io avg h=help q=quit w=write config a/y=cpu avg d/c=net avg f/v=link scale arrows=resize") + fmt.Println("=> Hotkeys: 1=cores 2/m=mem 3/n=net e=extended g=avg line i=io avg s=separators h=help q=quit w=write config a/y=cpu avg d/c=net avg f/v=link scale arrows=resize") } |
