finally a working space

This commit is contained in:
Priec
2025-09-12 19:14:21 +02:00
parent e4e9594a9d
commit 9672b9949c
2 changed files with 42 additions and 19 deletions

View File

@@ -50,7 +50,7 @@ move_down = ["j", "Down"]
move_line_end = ["$"] move_line_end = ["$"]
move_word_next = ["w"] move_word_next = ["w"]
next_field = ["Tab"] next_field = ["Tab"]
# move_word_prev = ["b"] move_word_prev = ["b"]
move_word_end = ["e"] move_word_end = ["e"]
move_last_line = ["shift+g"] move_last_line = ["shift+g"]
move_word_end_prev = ["ge"] move_word_end_prev = ["ge"]

View File

@@ -26,6 +26,7 @@ use crate::buffer::state::AppView;
use crate::state::app::state::AppState; use crate::state::app::state::AppState;
use crate::tui::terminal::{EventReader, TerminalCore}; use crate::tui::terminal::{EventReader, TerminalCore};
use crate::ui::handlers::render::render_ui; use crate::ui::handlers::render::render_ui;
use crate::input::leader::leader_has_any_start;
use crate::pages::login; use crate::pages::login;
use crate::pages::register; use crate::pages::register;
use crate::pages::login::LoginResult; use crate::pages::login::LoginResult;
@@ -237,24 +238,46 @@ pub async fn run_ui() -> Result<()> {
}; };
if inside_canvas { if inside_canvas {
if let Page::Form(path) = &router.current { // Do NOT forward to canvas while a leader is active or about to start.
if let Some(editor) = app_state.editor_for_path(path) { // This prevents the canvas from stealing the second/third key (b/d/r).
match editor.handle_key_event(*key_event) { let leader_in_progress = event_handler.input_engine.has_active_sequence();
KeyEventOutcome::Consumed(Some(msg)) => { let is_space = matches!(key_event.code, crossterm_event::KeyCode::Char(' '));
event_handler.command_message = msg; let can_start_leader = leader_has_any_start(&config);
needs_redraw = true; let form_in_edit_mode = match &router.current {
continue; Page::Form(path) => app_state
} .editor_for_path_ref(path)
KeyEventOutcome::Consumed(None) => { .map(|e| e.mode() == canvas::AppMode::Edit)
needs_redraw = true; .unwrap_or(false),
continue; _ => false,
} };
KeyEventOutcome::Pending => {
needs_redraw = true; let defer_to_engine_for_leader = leader_in_progress
continue; || (is_space && can_start_leader && !form_in_edit_mode);
}
KeyEventOutcome::NotMatched => { if defer_to_engine_for_leader {
// fall through to client-level handling info!(
"Skipping canvas pre-handle: leader sequence active or starting"
);
} else {
if let Page::Form(path) = &router.current {
if let Some(editor) = app_state.editor_for_path(path) {
match editor.handle_key_event(*key_event) {
KeyEventOutcome::Consumed(Some(msg)) => {
event_handler.command_message = msg;
needs_redraw = true;
continue;
}
KeyEventOutcome::Consumed(None) => {
needs_redraw = true;
continue;
}
KeyEventOutcome::Pending => {
needs_redraw = true;
continue;
}
KeyEventOutcome::NotMatched => {
// fall through to client-level handling
}
} }
} }
} }