diff --git a/daemon/src/main.rs b/daemon/src/main.rs index 0d1b8f7..44ded91 100644 --- a/daemon/src/main.rs +++ b/daemon/src/main.rs @@ -902,6 +902,12 @@ fn run_with_evdev( if !commands.is_empty() { consumed_keys.insert(keycode); execute_commands(&*injector, &commands, false); + // Flush chars: forward raw key after injection + // (engine no longer includes flush char in insert) + if is_flush_char(ch) { + injector.send_key_event(keycode, 1); + injector.send_key_event(keycode, 0); + } // Skip upcoming auto-repeat pile-up from injection delay skip_count = 3; } else if is_vn_control_key(&daemon.config.input_method, ch) { diff --git a/engine/src/engine.rs b/engine/src/engine.rs index 19666c4..13edb27 100644 --- a/engine/src/engine.rs +++ b/engine/src/engine.rs @@ -167,15 +167,16 @@ impl Engine { self.reset(); return Some(EngineEvent::Replace { backspaces: prev_len, - insert: format!("{}{}", expansion, ch), + insert: expansion, }); } self.reset(); if prev_len > 0 { + // Don't include flush char in insert — daemon forwards it separately return Some(EngineEvent::Replace { backspaces: prev_len, - insert: format!("{}{}", previous, ch), + insert: previous, }); } return None;