feat(config): add evdev_modifier_delay option
This commit is contained in:
parent
d20eaf1aba
commit
fc96d80791
|
@ -108,6 +108,12 @@ pub trait Config: Send + Sync {
|
||||||
// application is missing some key events.
|
// application is missing some key events.
|
||||||
fn key_delay(&self) -> Option<usize>;
|
fn key_delay(&self) -> Option<usize>;
|
||||||
|
|
||||||
|
// Extra delay to apply when injecting modifiers under the EVDEV backend.
|
||||||
|
// This is useful on Wayland if espanso is injecting seemingly random
|
||||||
|
// cased letters, for example "Hi theRE1" instead of "Hi there!".
|
||||||
|
// Increase if necessary, decrease to speed up the injection.
|
||||||
|
fn evdev_modifier_delay(&self) -> Option<usize>;
|
||||||
|
|
||||||
// Chars that when pressed mark the start and end of a word.
|
// Chars that when pressed mark the start and end of a word.
|
||||||
// Examples of this are . or ,
|
// Examples of this are . or ,
|
||||||
fn word_separators(&self) -> Vec<String>;
|
fn word_separators(&self) -> Vec<String>;
|
||||||
|
|
|
@ -52,6 +52,7 @@ pub(crate) struct ParsedConfig {
|
||||||
pub inject_delay: Option<usize>,
|
pub inject_delay: Option<usize>,
|
||||||
pub key_delay: Option<usize>,
|
pub key_delay: Option<usize>,
|
||||||
pub keyboard_layout: Option<BTreeMap<String, String>>,
|
pub keyboard_layout: Option<BTreeMap<String, String>>,
|
||||||
|
pub evdev_modifier_delay: Option<usize>,
|
||||||
|
|
||||||
// Includes
|
// Includes
|
||||||
pub includes: Option<Vec<String>>,
|
pub includes: Option<Vec<String>>,
|
||||||
|
|
|
@ -73,6 +73,9 @@ pub(crate) struct YAMLConfig {
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub backspace_delay: Option<usize>,
|
pub backspace_delay: Option<usize>,
|
||||||
|
|
||||||
|
#[serde(default)]
|
||||||
|
pub evdev_modifier_delay: Option<usize>,
|
||||||
|
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub word_separators: Option<Vec<String>>,
|
pub word_separators: Option<Vec<String>>,
|
||||||
|
|
||||||
|
@ -165,6 +168,7 @@ impl TryFrom<YAMLConfig> for ParsedConfig {
|
||||||
disable_x11_fast_inject: yaml_config.disable_x11_fast_inject,
|
disable_x11_fast_inject: yaml_config.disable_x11_fast_inject,
|
||||||
inject_delay: yaml_config.inject_delay,
|
inject_delay: yaml_config.inject_delay,
|
||||||
key_delay: yaml_config.key_delay.or(yaml_config.backspace_delay),
|
key_delay: yaml_config.key_delay.or(yaml_config.backspace_delay),
|
||||||
|
evdev_modifier_delay: yaml_config.evdev_modifier_delay,
|
||||||
word_separators: yaml_config.word_separators,
|
word_separators: yaml_config.word_separators,
|
||||||
backspace_limit: yaml_config.backspace_limit,
|
backspace_limit: yaml_config.backspace_limit,
|
||||||
apply_patch: yaml_config.apply_patch,
|
apply_patch: yaml_config.apply_patch,
|
||||||
|
@ -232,6 +236,7 @@ mod tests {
|
||||||
inject_delay: 10
|
inject_delay: 10
|
||||||
key_delay: 20
|
key_delay: 20
|
||||||
backspace_delay: 30
|
backspace_delay: 30
|
||||||
|
evdev_modifier_delay: 40
|
||||||
word_separators: ["'", "."]
|
word_separators: ["'", "."]
|
||||||
backspace_limit: 10
|
backspace_limit: 10
|
||||||
apply_patch: false
|
apply_patch: false
|
||||||
|
@ -301,6 +306,7 @@ mod tests {
|
||||||
win32_exclude_orphan_events: Some(false),
|
win32_exclude_orphan_events: Some(false),
|
||||||
|
|
||||||
pre_paste_delay: Some(300),
|
pre_paste_delay: Some(300),
|
||||||
|
evdev_modifier_delay: Some(40),
|
||||||
|
|
||||||
toggle_key: Some("CTRL".to_string()),
|
toggle_key: Some("CTRL".to_string()),
|
||||||
word_separators: Some(vec!["'".to_owned(), ".".to_owned()]),
|
word_separators: Some(vec!["'".to_owned(), ".".to_owned()]),
|
||||||
|
|
|
@ -17,16 +17,7 @@
|
||||||
* along with espanso. If not, see <https://www.gnu.org/licenses/>.
|
* along with espanso. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
use super::{
|
use super::{AppProperties, Backend, Config, RMLVOConfig, ToggleKey, default::{DEFAULT_CLIPBOARD_THRESHOLD, DEFAULT_PRE_PASTE_DELAY, DEFAULT_RESTORE_CLIPBOARD_DELAY, DEFAULT_SHORTCUT_EVENT_DELAY}, parse::ParsedConfig, path::calculate_paths, util::os_matches};
|
||||||
default::{
|
|
||||||
DEFAULT_CLIPBOARD_THRESHOLD, DEFAULT_PRE_PASTE_DELAY, DEFAULT_RESTORE_CLIPBOARD_DELAY,
|
|
||||||
DEFAULT_SHORTCUT_EVENT_DELAY,
|
|
||||||
},
|
|
||||||
parse::ParsedConfig,
|
|
||||||
path::calculate_paths,
|
|
||||||
util::os_matches,
|
|
||||||
AppProperties, Backend, Config, RMLVOConfig, ToggleKey,
|
|
||||||
};
|
|
||||||
use crate::{counter::next_id, merge};
|
use crate::{counter::next_id, merge};
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use log::error;
|
use log::error;
|
||||||
|
@ -314,6 +305,10 @@ impl Config for ResolvedConfig {
|
||||||
fn win32_exclude_orphan_events(&self) -> bool {
|
fn win32_exclude_orphan_events(&self) -> bool {
|
||||||
self.parsed.win32_exclude_orphan_events.unwrap_or(true)
|
self.parsed.win32_exclude_orphan_events.unwrap_or(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn evdev_modifier_delay(&self) -> Option<usize> {
|
||||||
|
self.parsed.evdev_modifier_delay
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ResolvedConfig {
|
impl ResolvedConfig {
|
||||||
|
@ -385,6 +380,7 @@ impl ResolvedConfig {
|
||||||
toggle_key,
|
toggle_key,
|
||||||
inject_delay,
|
inject_delay,
|
||||||
key_delay,
|
key_delay,
|
||||||
|
evdev_modifier_delay,
|
||||||
word_separators,
|
word_separators,
|
||||||
backspace_limit,
|
backspace_limit,
|
||||||
keyboard_layout,
|
keyboard_layout,
|
||||||
|
|
|
@ -390,6 +390,10 @@ impl Config for LegacyInteropConfig {
|
||||||
fn win32_exclude_orphan_events(&self) -> bool {
|
fn win32_exclude_orphan_events(&self) -> bool {
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn evdev_modifier_delay(&self) -> Option<usize> {
|
||||||
|
Some(10)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct LegacyMatchGroup {
|
struct LegacyMatchGroup {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user