tinynote 0.1.0

Raycast Notes in your terminal: a tiny markdown notes TUI over plain files
mod app;
mod notes;
mod render;
mod search;
mod ui;

use anyhow::Result;
use crossterm::event::{self, Event};
use std::time::Duration;

fn main() -> Result<()> {
    let mut app = app::App::new()?;
    let mut terminal = ratatui::init();
    crossterm::execute!(std::io::stdout(), crossterm::event::EnableMouseCapture)?;

    let result = run(&mut terminal, &mut app);

    let _ = crossterm::execute!(std::io::stdout(), crossterm::event::DisableMouseCapture);
    ratatui::restore();
    result
}

fn run(terminal: &mut ratatui::DefaultTerminal, app: &mut app::App) -> Result<()> {
    while !app.quit {
        terminal.draw(|f| ui::draw(f, app))?;
        if event::poll(Duration::from_millis(100))? {
            match event::read()? {
                Event::Key(k) if k.kind != event::KeyEventKind::Release => app.on_key(k),
                Event::Mouse(m) => app.on_mouse(m),
                _ => {}
            }
        }
        app.tick();
    }
    app.save_now();
    Ok(())
}