feat(core): Add input modes and half-page cursor movement.
Some checks failed
CI / Check (macos-latest) (push) Has been cancelled
CI / Check (ubuntu-latest) (push) Has been cancelled
CI / Clippy (strict) (push) Has been cancelled
CI / Format (push) Has been cancelled
CI / Test (macos-latest) (push) Has been cancelled
CI / Test (ubuntu-latest) (push) Has been cancelled

This commit is contained in:
2026-03-13 22:56:30 -04:00
parent 6a4cc85285
commit d9ed49e7d9
8 changed files with 795 additions and 54 deletions

View File

@@ -11,6 +11,15 @@ use std::sync::Arc;
use serde_json::Value;
/// Input mode. Insert mode sends keystrokes to the filter,
/// normal mode uses vim-style navigation keybinds.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum Mode {
#[default]
Insert,
Normal,
}
/// A command the menu should process. Frontends and headless
/// scripts both produce these. The menu loop consumes them
/// sequentially.
@@ -23,6 +32,9 @@ pub enum Action {
MoveToBottom,
PageUp(usize),
PageDown(usize),
HalfPageUp(usize),
HalfPageDown(usize),
SetMode(Mode),
Confirm,
Cancel,
Resize { height: u16 },
@@ -51,6 +63,7 @@ pub struct ViewState {
pub filter_text: Arc<str>,
pub total_items: usize,
pub total_filtered: usize,
pub mode: Mode,
}
/// A single item in the current viewport window. Has the