Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'helix-term/src/handlers/snippet.rs')
-rw-r--r--helix-term/src/handlers/snippet.rs28
1 files changed, 28 insertions, 0 deletions
diff --git a/helix-term/src/handlers/snippet.rs b/helix-term/src/handlers/snippet.rs
new file mode 100644
index 00000000..3860d3f7
--- /dev/null
+++ b/helix-term/src/handlers/snippet.rs
@@ -0,0 +1,28 @@
+use helix_event::register_hook;
+use helix_view::events::{DocumentDidChange, DocumentFocusLost, SelectionDidChange};
+use helix_view::handlers::Handlers;
+
+pub(super) fn register_hooks(_handlers: &Handlers) {
+ register_hook!(move |event: &mut SelectionDidChange<'_>| {
+ if let Some(snippet) = &event.doc.active_snippet {
+ if !snippet.is_valid(event.doc.selection(event.view)) {
+ event.doc.active_snippet = None;
+ }
+ }
+ Ok(())
+ });
+ register_hook!(move |event: &mut DocumentDidChange<'_>| {
+ if let Some(snippet) = &mut event.doc.active_snippet {
+ let invalid = snippet.map(event.changes);
+ if invalid {
+ event.doc.active_snippet = None;
+ }
+ }
+ Ok(())
+ });
+ register_hook!(move |event: &mut DocumentFocusLost<'_>| {
+ let editor = &mut event.editor;
+ doc_mut!(editor).active_snippet = None;
+ Ok(())
+ });
+}