From 5c8333e307302c82d2330d0611f39a4895df26fe Mon Sep 17 00:00:00 2001 From: Federico Terzi Date: Sat, 17 Apr 2021 20:23:07 +0200 Subject: [PATCH] fix(core): fix wrong handling of multiline string in event injector --- .../worker/engine/executor/event_injector.rs | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/espanso/src/cli/worker/engine/executor/event_injector.rs b/espanso/src/cli/worker/engine/executor/event_injector.rs index 09c4c01..e06bbe6 100644 --- a/espanso/src/cli/worker/engine/executor/event_injector.rs +++ b/espanso/src/cli/worker/engine/executor/event_injector.rs @@ -39,7 +39,25 @@ impl <'a> TextInjector for EventInjectorAdapter<'a> { } fn inject_text(&self, text: &str) -> anyhow::Result<()> { - // TODO: handle injection options - self.injector.send_string(text, Default::default()) + // Handle CRLF or LF line endings correctly + let split_sequence = if text.contains("\r\n") { + "\r\n" + } else { + "\n" + }; + + // We don't use the lines() method because it skips emtpy lines, which is not what we want. + for (i, line) in text.split(split_sequence).enumerate() { + // We simulate an Return press between lines + if i > 0 { + // TODO: handle injection options + self.injector.send_keys(&[espanso_inject::keys::Key::Enter], Default::default())? + } + + // TODO: handle injection options + self.injector.send_string(line, Default::default())?; + } + + Ok(()) } }