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.
 | 
			
		||||
  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.
 | 
			
		||||
  // Examples of this are . or ,
 | 
			
		||||
  fn word_separators(&self) -> Vec<String>;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -52,6 +52,7 @@ pub(crate) struct ParsedConfig {
 | 
			
		|||
  pub inject_delay: Option<usize>,
 | 
			
		||||
  pub key_delay: Option<usize>,
 | 
			
		||||
  pub keyboard_layout: Option<BTreeMap<String, String>>,
 | 
			
		||||
  pub evdev_modifier_delay: Option<usize>,
 | 
			
		||||
 | 
			
		||||
  // Includes
 | 
			
		||||
  pub includes: Option<Vec<String>>,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -73,6 +73,9 @@ pub(crate) struct YAMLConfig {
 | 
			
		|||
  #[serde(default)]
 | 
			
		||||
  pub backspace_delay: Option<usize>,
 | 
			
		||||
 | 
			
		||||
  #[serde(default)]
 | 
			
		||||
  pub evdev_modifier_delay: Option<usize>,
 | 
			
		||||
 | 
			
		||||
  #[serde(default)]
 | 
			
		||||
  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,
 | 
			
		||||
      inject_delay: yaml_config.inject_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,
 | 
			
		||||
      backspace_limit: yaml_config.backspace_limit,
 | 
			
		||||
      apply_patch: yaml_config.apply_patch,
 | 
			
		||||
| 
						 | 
				
			
			@ -232,6 +236,7 @@ mod tests {
 | 
			
		|||
    inject_delay: 10
 | 
			
		||||
    key_delay: 20
 | 
			
		||||
    backspace_delay: 30
 | 
			
		||||
    evdev_modifier_delay: 40
 | 
			
		||||
    word_separators: ["'", "."]
 | 
			
		||||
    backspace_limit: 10
 | 
			
		||||
    apply_patch: false
 | 
			
		||||
| 
						 | 
				
			
			@ -301,6 +306,7 @@ mod tests {
 | 
			
		|||
        win32_exclude_orphan_events: Some(false),
 | 
			
		||||
 | 
			
		||||
        pre_paste_delay: Some(300),
 | 
			
		||||
        evdev_modifier_delay: Some(40),
 | 
			
		||||
 | 
			
		||||
        toggle_key: Some("CTRL".to_string()),
 | 
			
		||||
        word_separators: Some(vec!["'".to_owned(), ".".to_owned()]),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,16 +17,7 @@
 | 
			
		|||
 * along with espanso.  If not, see <https://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
use super::{
 | 
			
		||||
  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 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};
 | 
			
		||||
use crate::{counter::next_id, merge};
 | 
			
		||||
use anyhow::Result;
 | 
			
		||||
use log::error;
 | 
			
		||||
| 
						 | 
				
			
			@ -314,6 +305,10 @@ impl Config for ResolvedConfig {
 | 
			
		|||
  fn win32_exclude_orphan_events(&self) -> bool {
 | 
			
		||||
    self.parsed.win32_exclude_orphan_events.unwrap_or(true)
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  fn evdev_modifier_delay(&self) -> Option<usize> {
 | 
			
		||||
    self.parsed.evdev_modifier_delay
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl ResolvedConfig {
 | 
			
		||||
| 
						 | 
				
			
			@ -385,6 +380,7 @@ impl ResolvedConfig {
 | 
			
		|||
      toggle_key,
 | 
			
		||||
      inject_delay,
 | 
			
		||||
      key_delay,
 | 
			
		||||
      evdev_modifier_delay,
 | 
			
		||||
      word_separators,
 | 
			
		||||
      backspace_limit,
 | 
			
		||||
      keyboard_layout,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -390,6 +390,10 @@ impl Config for LegacyInteropConfig {
 | 
			
		|||
  fn win32_exclude_orphan_events(&self) -> bool {
 | 
			
		||||
    true
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  fn evdev_modifier_delay(&self) -> Option<usize> {
 | 
			
		||||
    Some(10)
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct LegacyMatchGroup {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user