argv-todo 0.1.0

A Vim-style terminal todo manager with nested tasks, priorities, search, and local SQLite storage
use super::{KeyCode, KeyEvent, KeyEventKind, KeyModifiers, VimAction, VimManager};

impl VimManager {
    pub(crate) fn handle_help(&mut self, key: KeyEvent) -> Option<VimAction> {
        if key.kind == KeyEventKind::Release {
            return None;
        }
        if key.modifiers.contains(KeyModifiers::CONTROL) {
            self.reset();
            return match key.code {
                KeyCode::Char('c') => Some(VimAction::Quit),
                KeyCode::Char('[') => Some(VimAction::Cancel),
                _ => None,
            };
        }
        if key
            .modifiers
            .intersects(KeyModifiers::ALT | KeyModifiers::SUPER)
        {
            self.reset();
            return None;
        }
        let action = match key.code {
            KeyCode::Esc | KeyCode::Char('?') => VimAction::Cancel,
            KeyCode::PageDown => VimAction::PageDown,
            KeyCode::PageUp => VimAction::PageUp,
            KeyCode::Tab | KeyCode::BackTab => return self.handle_tasks(key),
            KeyCode::Char('0'..='9' | 'g' | 'G' | 'h' | 'j' | 'k' | 'l' | 'q')
            | KeyCode::Up
            | KeyCode::Down
            | KeyCode::Left
            | KeyCode::Right
            | KeyCode::Home
            | KeyCode::End => {
                return self.handle_tasks(key);
            }
            _ => {
                self.reset();
                return None;
            }
        };
        self.reset();
        Some(action)
    }
}