aboutsummaryrefslogtreecommitdiff
path: root/helix-term/src/application.rs
diff options
context:
space:
mode:
authorBlaž Hrastnik2021-08-26 02:14:46 +0000
committerBlaž Hrastnik2021-10-05 13:27:33 +0000
commit40abec80e1062503d70055ed9e968cd4b31411a7 (patch)
treed769021384eb7464a82e47bd416af0039005b16c /helix-term/src/application.rs
parentf99bea404f43ea0e373fd9fe54616d3282e8364b (diff)
Experiment with autocompletion on idle
Diffstat (limited to 'helix-term/src/application.rs')
-rw-r--r--helix-term/src/application.rs38
1 files changed, 36 insertions, 2 deletions
diff --git a/helix-term/src/application.rs b/helix-term/src/application.rs
index dbd8755d..ab268041 100644
--- a/helix-term/src/application.rs
+++ b/helix-term/src/application.rs
@@ -200,9 +200,9 @@ impl Application {
self.render();
}
_ = &mut self.editor.idle_timer => {
+ // idle timeout
self.editor.clear_idle_timer();
- println!("idle!")
- // idle timeout
+ self.handle_idle_timeout();
}
}
}
@@ -233,6 +233,40 @@ impl Application {
}
}
+ pub fn handle_idle_timeout(&mut self) {
+ use helix_view::document::Mode;
+ use crate::commands::{Context, completion};
+
+
+ if doc_mut!(self.editor).mode != Mode::Insert {
+ return;
+ }
+ let editor_view = self
+ .compositor
+ .find(std::any::type_name::<ui::EditorView>())
+ .expect("expected at least one EditorView");
+ let editor_view = editor_view
+ .as_any_mut()
+ .downcast_mut::<ui::EditorView>()
+ .unwrap();
+
+ if editor_view.completion.is_some() {
+ return;
+ }
+
+ let mut cx = Context {
+ selected_register: helix_view::RegisterSelection::default(),
+ editor: &mut self.editor,
+ jobs: &mut self.jobs,
+ count: None,
+ callback: None,
+ on_next_key_callback: None,
+ };
+ completion(&mut cx);
+ // TODO: scan backwards for trigger and filter the box
+ self.render();
+ }
+
pub fn handle_terminal_events(&mut self, event: Option<Result<Event, crossterm::ErrorKind>>) {
let mut cx = crate::compositor::Context {
editor: &mut self.editor,