Extract idle timeout code into ui/editor.rs

pull/1741/head
Blaž Hrastnik 3 years ago
parent 78fba8683b
commit 68bad148a5
No known key found for this signature in database
GPG Key ID: 1238B9C4AD889640

@ -187,17 +187,13 @@ impl Application {
} }
fn render(&mut self) { fn render(&mut self) {
let editor = &mut self.editor;
let compositor = &mut self.compositor;
let jobs = &mut self.jobs;
let mut cx = crate::compositor::Context { let mut cx = crate::compositor::Context {
editor, editor: &mut self.editor,
jobs, jobs: &mut self.jobs,
scroll: None, scroll: None,
}; };
compositor.render(&mut cx); self.compositor.render(&mut cx);
} }
pub async fn event_loop(&mut self) { pub async fn event_loop(&mut self) {
@ -278,32 +274,21 @@ impl Application {
} }
pub fn handle_idle_timeout(&mut self) { pub fn handle_idle_timeout(&mut self) {
use crate::commands::{insert::idle_completion, Context}; use crate::compositor::EventResult;
use helix_view::document::Mode;
if doc!(self.editor).mode != Mode::Insert || !self.config.editor.auto_completion {
return;
}
let editor_view = self let editor_view = self
.compositor .compositor
.find::<ui::EditorView>() .find::<ui::EditorView>()
.expect("expected at least one EditorView"); .expect("expected at least one EditorView");
if editor_view.completion.is_some() { let mut cx = crate::compositor::Context {
return;
}
let mut cx = Context {
register: None,
editor: &mut self.editor, editor: &mut self.editor,
jobs: &mut self.jobs, jobs: &mut self.jobs,
count: None, scroll: None,
callback: None,
on_next_key_callback: None,
}; };
idle_completion(&mut cx); if let EventResult::Consumed(_) = editor_view.handle_idle_timeout(&mut cx) {
self.render(); self.render();
} }
}
pub fn handle_terminal_events(&mut self, event: Option<Result<Event, crossterm::ErrorKind>>) { pub fn handle_terminal_events(&mut self, event: Option<Result<Event, crossterm::ErrorKind>>) {
let mut cx = crate::compositor::Context { let mut cx = crate::compositor::Context {

@ -856,6 +856,27 @@ impl EditorView {
doc.savepoint = None; doc.savepoint = None;
editor.clear_idle_timer(); // don't retrigger editor.clear_idle_timer(); // don't retrigger
} }
pub fn handle_idle_timeout(&mut self, cx: &mut crate::compositor::Context) -> EventResult {
if self.completion.is_some()
|| !cx.editor.config.auto_completion
|| doc!(cx.editor).mode != Mode::Insert
{
return EventResult::Ignored(None);
}
let mut cx = commands::Context {
register: None,
editor: cx.editor,
jobs: cx.jobs,
count: None,
callback: None,
on_next_key_callback: None,
};
crate::commands::insert::idle_completion(&mut cx);
EventResult::Consumed(None)
}
} }
impl EditorView { impl EditorView {

Loading…
Cancel
Save