From 8b93f032618bd857f1b37bc1928fa1c176e89172 Mon Sep 17 00:00:00 2001 From: Nino Date: Mon, 13 Apr 2026 22:26:43 -0600 Subject: [PATCH] help controls --- src/ui.rs | 45 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 38 insertions(+), 7 deletions(-) diff --git a/src/ui.rs b/src/ui.rs index 6b0e7a2..3968128 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -535,14 +535,45 @@ fn centered_rect(width: u16, height: u16, area: Rect) -> Rect { // ── Status bar ──────────────────────────────────────────────────────────────── fn draw_status_bar(f: &mut Frame, app: &App, area: Rect) { - let msg = if app.selected == SMART_IDX && app.smart_permission_error { - " ZFS Stats [!] SMART needs root — press p to enter sudo password q Quit" + let key = |s: &'static str| Span::styled(s, Style::default().fg(Color::Yellow).add_modifier(Modifier::BOLD)); + let sep = |s: &'static str| Span::styled(s, Style::default().fg(Color::White)); + let desc = |s: &'static str| Span::styled(s, Style::default().fg(Color::Gray)); + let err = |s: &'static str| Span::styled(s, Style::default().fg(Color::Red).add_modifier(Modifier::BOLD)); + let divider = || sep(" "); + + let mut spans: Vec = vec![ + sep(" "), + // Navigation + key("[↑/↓]"), sep(" "), desc("or"), sep(" "), key("[j/k]"), sep(" "), desc("Navigate"), + divider(), + // Quit + key("[q/Esc]"), sep(" "), desc("Quit"), + ]; + + // Context-sensitive: sudo password on SMART panel + if app.selected == SMART_IDX { + spans.push(divider()); + spans.push(key("[p]")); + spans.push(sep(" ")); + spans.push(desc("sudo password")); + } + + // Error indicators + if app.selected == SMART_IDX && app.smart_permission_error { + spans.push(divider()); + spans.push(err("[!]")); + spans.push(sep(" ")); + spans.push(Span::styled("SMART needs root", Style::default().fg(Color::Red))); } else if app.error.is_some() || app.pool_error.is_some() { - " ZFS Stats [!] Some stats unavailable ↑/↓ or j/k Navigate q Quit" - } else { - " ZFS Stats ↑/↓ or j/k Navigate q Quit" - }; - f.render_widget(Paragraph::new(msg).style(Style::default().bg(Color::DarkGray).fg(Color::White)), area); + spans.push(divider()); + spans.push(err("[!]")); + spans.push(sep(" ")); + spans.push(Span::styled("Some stats unavailable", Style::default().fg(Color::Red))); + } + + let bar = Paragraph::new(Line::from(spans)) + .style(Style::default().bg(Color::DarkGray)); + f.render_widget(bar, area); } // ── Shared chart renderer ─────────────────────────────────────────────────────