Experiment with autocompletion on idle
This commit is contained in:
parent
f99bea404f
commit
40abec80e1
3 changed files with 38 additions and 4 deletions
|
@ -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,
|
||||
|
|
|
@ -4045,7 +4045,7 @@ fn remove_primary_selection(cx: &mut Context) {
|
|||
doc.set_selection(view.id, selection);
|
||||
}
|
||||
|
||||
fn completion(cx: &mut Context) {
|
||||
pub fn completion(cx: &mut Context) {
|
||||
// trigger on trigger char, or if user calls it
|
||||
// (or on word char typing??)
|
||||
// after it's triggered, if response marked is_incomplete, update on every subsequent keypress
|
||||
|
|
|
@ -33,7 +33,7 @@ pub struct EditorView {
|
|||
keymaps: Keymaps,
|
||||
on_next_key: Option<Box<dyn FnOnce(&mut commands::Context, KeyEvent)>>,
|
||||
last_insert: (commands::Command, Vec<KeyEvent>),
|
||||
completion: Option<Completion>,
|
||||
pub(crate) completion: Option<Completion>,
|
||||
spinners: ProgressSpinners,
|
||||
autoinfo: Option<Info>,
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue