help controls
This commit is contained in:
45
src/ui.rs
45
src/ui.rs
@@ -535,14 +535,45 @@ fn centered_rect(width: u16, height: u16, area: Rect) -> Rect {
|
|||||||
// ── Status bar ────────────────────────────────────────────────────────────────
|
// ── Status bar ────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
fn draw_status_bar(f: &mut Frame, app: &App, area: Rect) {
|
fn draw_status_bar(f: &mut Frame, app: &App, area: Rect) {
|
||||||
let msg = if app.selected == SMART_IDX && app.smart_permission_error {
|
let key = |s: &'static str| Span::styled(s, Style::default().fg(Color::Yellow).add_modifier(Modifier::BOLD));
|
||||||
" ZFS Stats [!] SMART needs root — press p to enter sudo password q Quit"
|
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<Span> = 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() {
|
} else if app.error.is_some() || app.pool_error.is_some() {
|
||||||
" ZFS Stats [!] Some stats unavailable ↑/↓ or j/k Navigate q Quit"
|
spans.push(divider());
|
||||||
} else {
|
spans.push(err("[!]"));
|
||||||
" ZFS Stats ↑/↓ or j/k Navigate q Quit"
|
spans.push(sep(" "));
|
||||||
};
|
spans.push(Span::styled("Some stats unavailable", Style::default().fg(Color::Red)));
|
||||||
f.render_widget(Paragraph::new(msg).style(Style::default().bg(Color::DarkGray).fg(Color::White)), area);
|
}
|
||||||
|
|
||||||
|
let bar = Paragraph::new(Line::from(spans))
|
||||||
|
.style(Style::default().bg(Color::DarkGray));
|
||||||
|
f.render_widget(bar, area);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ── Shared chart renderer ─────────────────────────────────────────────────────
|
// ── Shared chart renderer ─────────────────────────────────────────────────────
|
||||||
|
|||||||
Reference in New Issue
Block a user