feat(config): introduce clipboard threshold option
This commit is contained in:
parent
47587681bd
commit
fddb2711e4
|
@ -32,6 +32,7 @@ pub trait Config: Send {
|
||||||
fn label(&self) -> &str;
|
fn label(&self) -> &str;
|
||||||
fn match_paths(&self) -> &[String];
|
fn match_paths(&self) -> &[String];
|
||||||
fn backend(&self) -> Backend;
|
fn backend(&self) -> Backend;
|
||||||
|
fn clipboard_threshold(&self) -> usize;
|
||||||
|
|
||||||
fn is_match(&self, app: &AppProperties) -> bool;
|
fn is_match(&self, app: &AppProperties) -> bool;
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,7 @@ pub(crate) struct ParsedConfig {
|
||||||
pub label: Option<String>,
|
pub label: Option<String>,
|
||||||
|
|
||||||
pub backend: Option<String>,
|
pub backend: Option<String>,
|
||||||
|
pub clipboard_threshold: Option<usize>,
|
||||||
|
|
||||||
// Includes
|
// Includes
|
||||||
pub includes: Option<Vec<String>>,
|
pub includes: Option<Vec<String>>,
|
||||||
|
|
|
@ -33,6 +33,9 @@ pub(crate) struct YAMLConfig {
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub backend: Option<String>,
|
pub backend: Option<String>,
|
||||||
|
|
||||||
|
#[serde(default)]
|
||||||
|
pub clipboard_threshold: Option<usize>,
|
||||||
|
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub includes: Option<Vec<String>>,
|
pub includes: Option<Vec<String>>,
|
||||||
|
|
||||||
|
@ -82,6 +85,7 @@ impl TryFrom<YAMLConfig> for ParsedConfig {
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
label: yaml_config.label,
|
label: yaml_config.label,
|
||||||
backend: yaml_config.backend,
|
backend: yaml_config.backend,
|
||||||
|
clipboard_threshold: yaml_config.clipboard_threshold,
|
||||||
use_standard_includes: yaml_config.use_standard_includes,
|
use_standard_includes: yaml_config.use_standard_includes,
|
||||||
includes: yaml_config.includes,
|
includes: yaml_config.includes,
|
||||||
extra_includes: yaml_config.extra_includes,
|
extra_includes: yaml_config.extra_includes,
|
||||||
|
@ -107,6 +111,7 @@ mod tests {
|
||||||
r#"
|
r#"
|
||||||
label: "test"
|
label: "test"
|
||||||
backend: clipboard
|
backend: clipboard
|
||||||
|
clipboard_threshold: 200
|
||||||
|
|
||||||
use_standard_includes: true
|
use_standard_includes: true
|
||||||
includes: ["test1"]
|
includes: ["test1"]
|
||||||
|
@ -129,6 +134,7 @@ mod tests {
|
||||||
label: Some("test".to_string()),
|
label: Some("test".to_string()),
|
||||||
|
|
||||||
backend: Some("clipboard".to_string()),
|
backend: Some("clipboard".to_string()),
|
||||||
|
clipboard_threshold: Some(200),
|
||||||
|
|
||||||
use_standard_includes: Some(true),
|
use_standard_includes: Some(true),
|
||||||
includes: Some(vec!["test1".to_string()]),
|
includes: Some(vec!["test1".to_string()]),
|
||||||
|
|
|
@ -128,6 +128,10 @@ impl Config for ResolvedConfig {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn clipboard_threshold(&self) -> usize {
|
||||||
|
self.parsed.clipboard_threshold.unwrap_or(100)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ResolvedConfig {
|
impl ResolvedConfig {
|
||||||
|
@ -185,6 +189,7 @@ impl ResolvedConfig {
|
||||||
// Fields
|
// Fields
|
||||||
label,
|
label,
|
||||||
backend,
|
backend,
|
||||||
|
clipboard_threshold,
|
||||||
includes,
|
includes,
|
||||||
excludes,
|
excludes,
|
||||||
extra_includes,
|
extra_includes,
|
||||||
|
|
|
@ -161,6 +161,10 @@ mod tests {
|
||||||
fn backend(&self) -> crate::config::Backend {
|
fn backend(&self) -> crate::config::Backend {
|
||||||
unimplemented!()
|
unimplemented!()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn clipboard_threshold(&self) -> usize {
|
||||||
|
unimplemented!()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
|
@ -378,34 +378,9 @@ impl LegacyConfig {
|
||||||
pub enum BackendType {
|
pub enum BackendType {
|
||||||
Inject,
|
Inject,
|
||||||
Clipboard,
|
Clipboard,
|
||||||
|
|
||||||
// On Linux systems there is a long standing issue with text injection (which
|
|
||||||
// in general is better than Clipboard copy/pasting) that prevents certain
|
|
||||||
// apps from correctly handling special characters (such as emojis or accented letters)
|
|
||||||
// when injected. For this reason, espanso initially defaulted on the Clipboard
|
|
||||||
// backend on Linux, as it was the most reliable (working in 99% of cases),
|
|
||||||
// even though it was less efficient and with a few inconveniences (for example, the
|
|
||||||
// previous clipboard content being overwritten).
|
|
||||||
// The Auto backend tries to take it a step further, by automatically determining
|
|
||||||
// when an injection is possible (only ascii characters in the replacement), and falling
|
|
||||||
// back to the Clipboard backend otherwise.
|
|
||||||
// Should only be used on Linux systems.
|
|
||||||
Auto,
|
Auto,
|
||||||
}
|
}
|
||||||
impl Default for BackendType {
|
impl Default for BackendType {
|
||||||
// The default backend varies based on the operating system.
|
|
||||||
// On Windows and macOS, the Inject backend is working great and should
|
|
||||||
// be preferred as it doesn't override the clipboard.
|
|
||||||
// On the other hand, on linux it has many problems due to the bugs
|
|
||||||
// of the libxdo used. For this reason, Clipboard will be the default
|
|
||||||
// backend on Linux from version v0.3.0
|
|
||||||
|
|
||||||
#[cfg(not(target_os = "linux"))]
|
|
||||||
fn default() -> Self {
|
|
||||||
BackendType::Inject
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(target_os = "linux")]
|
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
BackendType::Auto
|
BackendType::Auto
|
||||||
}
|
}
|
||||||
|
|
|
@ -252,6 +252,10 @@ impl Config for LegacyInteropConfig {
|
||||||
// All the filters that have been specified must be true to define a match
|
// All the filters that have been specified must be true to define a match
|
||||||
is_exec_match && is_title_match && is_class_match
|
is_exec_match && is_title_match && is_class_match
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn clipboard_threshold(&self) -> usize {
|
||||||
|
100
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct LegacyMatchGroup {
|
struct LegacyMatchGroup {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user