feat(config): add inject_delay and key_delay options

This commit is contained in:
Federico Terzi 2021-06-07 21:15:39 +02:00
parent 0829816bac
commit 9efc7cfa0a
5 changed files with 56 additions and 4 deletions

View File

@ -83,6 +83,14 @@ pub trait Config: Send {
// the expansion content.
fn restore_clipboard_delay(&self) -> usize;
// Number of milliseconds between text injection events. Increase if the target
// application is missing some characters.
fn inject_delay(&self) -> Option<usize>;
// Number of milliseconds between key injection events. Increase if the target
// application is missing some key events.
fn key_delay(&self) -> Option<usize>;
fn is_match<'a>(&self, app: &AppProperties<'a>) -> bool;
}

View File

@ -38,6 +38,8 @@ pub(crate) struct ParsedConfig {
pub pre_paste_delay: Option<usize>,
pub restore_clipboard_delay: Option<usize>,
pub paste_shortcut_event_delay: Option<usize>,
pub inject_delay: Option<usize>,
pub key_delay: Option<usize>,
// Includes

View File

@ -60,6 +60,15 @@ pub(crate) struct YAMLConfig {
#[serde(default)]
pub disable_x11_fast_inject: Option<bool>,
#[serde(default)]
pub inject_delay: Option<usize>,
#[serde(default)]
pub key_delay: Option<usize>,
#[serde(default)]
pub backspace_delay: Option<usize>,
// Include/Exclude
#[serde(default)]
pub includes: Option<Vec<String>>,
@ -116,6 +125,8 @@ impl TryFrom<YAMLConfig> for ParsedConfig {
preserve_clipboard: yaml_config.preserve_clipboard,
paste_shortcut: yaml_config.paste_shortcut,
disable_x11_fast_inject: yaml_config.disable_x11_fast_inject,
inject_delay: yaml_config.inject_delay,
key_delay: yaml_config.key_delay.or(yaml_config.backspace_delay),
pre_paste_delay: yaml_config.pre_paste_delay,
restore_clipboard_delay: yaml_config.restore_clipboard_delay,
@ -155,6 +166,9 @@ mod tests {
paste_shortcut: CTRL+ALT+V
paste_shortcut_event_delay: 10
disable_x11_fast_inject: true
inject_delay: 10
key_delay: 20
backspace_delay: 30
use_standard_includes: true
includes: ["test1"]
@ -184,6 +198,8 @@ mod tests {
paste_shortcut: Some("CTRL+ALT+V".to_string()),
paste_shortcut_event_delay: Some(10),
disable_x11_fast_inject: Some(true),
inject_delay: Some(10),
key_delay: Some(20),
pre_paste_delay: Some(300),

View File

@ -207,6 +207,14 @@ impl Config for ResolvedConfig {
fn disable_x11_fast_inject(&self) -> bool {
self.parsed.disable_x11_fast_inject.unwrap_or(false)
}
fn inject_delay(&self) -> Option<usize> {
self.parsed.inject_delay
}
fn key_delay(&self) -> Option<usize> {
self.parsed.key_delay
}
}
impl ResolvedConfig {
@ -273,6 +281,8 @@ impl ResolvedConfig {
paste_shortcut_event_delay,
disable_x11_fast_inject,
toggle_key,
inject_delay,
key_delay,
includes,
excludes,
extra_includes,

View File

@ -301,16 +301,32 @@ impl Config for LegacyInteropConfig {
match self.config.paste_shortcut {
model::PasteShortcut::Default => None,
model::PasteShortcut::CtrlV => Some("CTRL+V".to_string()),
model::PasteShortcut::CtrlShiftV => Some("CTRL+SHIFT+V".to_string()),
model::PasteShortcut::ShiftInsert => Some("SHIFT+INSERT".to_string()),
model::PasteShortcut::CtrlAltV => Some("CTRL+ALT+V".to_string()),
model::PasteShortcut::MetaV => Some("META+V".to_string()),
model::PasteShortcut::CtrlShiftV => Some("CTRL+SHIFT+V".to_string()),
model::PasteShortcut::ShiftInsert => Some("SHIFT+INSERT".to_string()),
model::PasteShortcut::CtrlAltV => Some("CTRL+ALT+V".to_string()),
model::PasteShortcut::MetaV => Some("META+V".to_string()),
}
}
fn disable_x11_fast_inject(&self) -> bool {
self.config.fast_inject
}
fn inject_delay(&self) -> Option<usize> {
if self.config.inject_delay == 0 {
None
} else {
Some(self.config.inject_delay.try_into().unwrap())
}
}
fn key_delay(&self) -> Option<usize> {
if self.config.backspace_delay == 0 {
None
} else {
Some(self.config.backspace_delay.try_into().unwrap())
}
}
}
struct LegacyMatchGroup {