espanso/src/engine.rs

38 lines
1.1 KiB
Rust
Raw Normal View History

use crate::matcher::{Match, MatchReceiver};
use crate::keyboard::KeyboardSender;
2019-09-05 18:54:19 +00:00
use crate::config::Configs;
2019-09-05 15:20:52 +00:00
pub struct Engine<S> where S: KeyboardSender {
2019-09-05 18:54:19 +00:00
sender: S,
configs: Configs,
}
2019-09-05 15:20:52 +00:00
impl <S> Engine<S> where S: KeyboardSender{
2019-09-05 18:54:19 +00:00
pub fn new(sender: S, configs: Configs) -> Engine<S> where S: KeyboardSender {
Engine{sender, configs }
}
}
2019-09-05 15:20:52 +00:00
impl <S> MatchReceiver for Engine<S> where S: KeyboardSender{
2019-08-31 15:00:23 +00:00
fn on_match(&self, m: &Match) {
self.sender.delete_string(m.trigger.len() as i32);
2019-09-06 20:19:28 +00:00
// Send the expected string. On linux, newlines are managed automatically
// while on windows and macos, we need to emulate a Enter key press.
2019-09-06 20:19:28 +00:00
if cfg!(target_os = "linux") {
self.sender.send_string(m.replace.as_str());
}else{
// To handle newlines, substitute each "\n" char with an Enter key press.
let splits = m.replace.lines();
for (i, split) in splits.enumerate() {
if i > 0 {
self.sender.send_enter();
}
2019-09-06 20:19:28 +00:00
self.sender.send_string(split);
}
}
}
}