From 758eea45b305681486b9893f2e03e2a346e19fb4 Mon Sep 17 00:00:00 2001 From: Khoa Vo Date: Fri, 26 Jun 2026 16:54:40 +0700 Subject: [PATCH] =?UTF-8?q?fix:=20flush=20char=20forwarded=20as=20raw=20ke?= =?UTF-8?q?y=20=E2=80=94=20space=20no=20longer=20in=20clipboard=20paste?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Engine no longer includes flush char in Replace insert text - Daemon forwards raw flush key (space/enter/etc) after injection - Clipboard paste only contains the word, not trailing whitespace - Fixes 'thịtrâm' → 'thị trâm' (space reliably arrives via raw forward) --- daemon/src/main.rs | 6 ++++++ engine/src/engine.rs | 5 +++-- 2 files changed, 9 insertions(+), 2 deletions(-) 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;