Merge pull request #373 from AndydeCleyre/bugfix/372
Tighten passive expansion process
This commit is contained in:
commit
a2a73efe74
|
@ -95,6 +95,9 @@ fn default_passive_arg_delimiter() -> char {
|
||||||
fn default_passive_arg_escape() -> char {
|
fn default_passive_arg_escape() -> char {
|
||||||
'\\'
|
'\\'
|
||||||
}
|
}
|
||||||
|
fn default_passive_delay() -> u64 {
|
||||||
|
100
|
||||||
|
}
|
||||||
fn default_passive_key() -> KeyModifier {
|
fn default_passive_key() -> KeyModifier {
|
||||||
KeyModifier::OFF
|
KeyModifier::OFF
|
||||||
}
|
}
|
||||||
|
@ -215,6 +218,9 @@ pub struct Configs {
|
||||||
#[serde(default = "default_passive_key")]
|
#[serde(default = "default_passive_key")]
|
||||||
pub passive_key: KeyModifier,
|
pub passive_key: KeyModifier,
|
||||||
|
|
||||||
|
#[serde(default = "default_passive_delay")]
|
||||||
|
pub passive_delay: u64,
|
||||||
|
|
||||||
#[serde(default = "default_enable_passive")]
|
#[serde(default = "default_enable_passive")]
|
||||||
pub enable_passive: bool,
|
pub enable_passive: bool,
|
||||||
|
|
||||||
|
|
|
@ -388,16 +388,22 @@ impl<
|
||||||
// In order to avoid pasting previous clipboard contents, we need to check if
|
// In order to avoid pasting previous clipboard contents, we need to check if
|
||||||
// a new clipboard was effectively copied.
|
// a new clipboard was effectively copied.
|
||||||
// See issue: https://github.com/federico-terzi/espanso/issues/213
|
// See issue: https://github.com/federico-terzi/espanso/issues/213
|
||||||
let previous_clipboard = self.clipboard_manager.get_clipboard();
|
let previous_clipboard = self.clipboard_manager.get_clipboard().unwrap_or_default();
|
||||||
|
|
||||||
// Sleep for a while, giving time to effectively copy the text
|
// Sleep for a while, giving time to effectively copy the text
|
||||||
std::thread::sleep(std::time::Duration::from_millis(100)); // TODO: avoid hardcoding
|
std::thread::sleep(std::time::Duration::from_millis(config.passive_delay));
|
||||||
|
|
||||||
|
// Clear the clipboard, for new-content detection later
|
||||||
|
self.clipboard_manager.set_clipboard("");
|
||||||
|
|
||||||
|
// Sleep for a while, giving time to effectively copy the text
|
||||||
|
std::thread::sleep(std::time::Duration::from_millis(config.passive_delay));
|
||||||
|
|
||||||
// Trigger a copy shortcut to transfer the content of the selection to the clipboard
|
// Trigger a copy shortcut to transfer the content of the selection to the clipboard
|
||||||
self.keyboard_manager.trigger_copy(&config);
|
self.keyboard_manager.trigger_copy(&config);
|
||||||
|
|
||||||
// Sleep for a while, giving time to effectively copy the text
|
// Sleep for a while, giving time to effectively copy the text
|
||||||
std::thread::sleep(std::time::Duration::from_millis(100)); // TODO: avoid hardcoding
|
std::thread::sleep(std::time::Duration::from_millis(config.passive_delay));
|
||||||
|
|
||||||
// Then get the text from the clipboard and render the match output
|
// Then get the text from the clipboard and render the match output
|
||||||
let clipboard = self.clipboard_manager.get_clipboard();
|
let clipboard = self.clipboard_manager.get_clipboard();
|
||||||
|
@ -407,30 +413,31 @@ impl<
|
||||||
if clipboard.trim().is_empty() {
|
if clipboard.trim().is_empty() {
|
||||||
info!("Avoiding passive expansion, as the user didn't select anything");
|
info!("Avoiding passive expansion, as the user didn't select anything");
|
||||||
} else {
|
} else {
|
||||||
if let Some(previous_content) = previous_clipboard {
|
info!("Passive mode activated");
|
||||||
// Because of issue #213, we need to make sure the user selected something.
|
|
||||||
if clipboard == previous_content {
|
|
||||||
info!("Avoiding passive expansion, as the user didn't select anything");
|
|
||||||
} else {
|
|
||||||
info!("Passive mode activated");
|
|
||||||
|
|
||||||
let rendered = self.renderer.render_passive(&clipboard, &config);
|
// Restore original clipboard in case it's used during render
|
||||||
|
self.clipboard_manager.set_clipboard(&previous_clipboard);
|
||||||
|
|
||||||
match rendered {
|
let rendered = self.renderer.render_passive(&clipboard, &config);
|
||||||
RenderResult::Text(payload) => {
|
|
||||||
// Paste back the result in the field
|
|
||||||
self.clipboard_manager.set_clipboard(&payload);
|
|
||||||
|
|
||||||
std::thread::sleep(std::time::Duration::from_millis(100)); // TODO: avoid hardcoding
|
match rendered {
|
||||||
self.keyboard_manager.trigger_paste(&config);
|
RenderResult::Text(payload) => {
|
||||||
}
|
// Paste back the result in the field
|
||||||
_ => warn!("Cannot expand passive match"),
|
self.clipboard_manager.set_clipboard(&payload);
|
||||||
}
|
|
||||||
|
std::thread::sleep(std::time::Duration::from_millis(config.passive_delay));
|
||||||
|
self.keyboard_manager.trigger_paste(&config);
|
||||||
}
|
}
|
||||||
|
_ => warn!("Cannot expand passive match"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::thread::sleep(std::time::Duration::from_millis(config.passive_delay));
|
||||||
|
|
||||||
|
// Restore original clipboard
|
||||||
|
self.clipboard_manager.set_clipboard(&previous_clipboard);
|
||||||
|
|
||||||
// Re-allow espanso to interpret actions
|
// Re-allow espanso to interpret actions
|
||||||
self.is_injecting.store(false, Release);
|
self.is_injecting.store(false, Release);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user