lazytask 0.5.0

A task manager built for AI coding agents — plain markdown files, strict CLI, keyboard-driven TUI
Documentation
use super::layout::centered_rect;
use ratatui::Frame;
use ratatui::layout::Rect;
use ratatui::style::{Color, Style};
use ratatui::widgets::{Block, Borders, Clear, Paragraph};

/// Renders the centered keybindings help overlay.
pub(super) fn render_keybindings_overlay(frame: &mut Frame, main_area: Rect) {
    let area = centered_rect(46, 66, main_area);
    frame.render_widget(Clear, area);

    let content = keybinding_lines().join("\n");
    let overlay = Paragraph::new(content).block(
        Block::default()
            .borders(Borders::ALL)
            .title("Keybindings")
            .border_style(Style::default().fg(Color::Cyan)),
    );

    frame.render_widget(overlay, area);
}

/// Defines ordered keybinding lines shown in the help overlay.
fn keybinding_lines() -> Vec<&'static str> {
    vec![
        "Nav: \u{2191}/\u{2193}",
        "Create: c",
        "Edit: e",
        "Start: s",
        "Done: x",
        "Open: o",
        "Delete: d",
        "Undo delete: u",
        "Quit: q (or Esc)",
        "",
        "Close: ? (or Esc)",
    ]
}

#[cfg(test)]
mod tests {
    use super::keybinding_lines;

    #[test]
    fn includes_delete_and_undo_rows() {
        let lines = keybinding_lines().join("\n");
        assert!(lines.contains("Delete: d"));
        assert!(lines.contains("Undo delete: u"));
    }

    #[test]
    fn includes_explicit_close_hint() {
        let lines = keybinding_lines().join("\n");
        assert!(lines.contains("Close: ? (or Esc)"));
    }
}