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();
|
self.render();
|
||||||
}
|
}
|
||||||
_ = &mut self.editor.idle_timer => {
|
_ = &mut self.editor.idle_timer => {
|
||||||
self.editor.clear_idle_timer();
|
|
||||||
println!("idle!")
|
|
||||||
// idle timeout
|
// idle timeout
|
||||||
|
self.editor.clear_idle_timer();
|
||||||
|
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>>) {
|
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 {
|
||||||
editor: &mut self.editor,
|
editor: &mut self.editor,
|
||||||
|
|
|
@ -4045,7 +4045,7 @@ fn remove_primary_selection(cx: &mut Context) {
|
||||||
doc.set_selection(view.id, selection);
|
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
|
// trigger on trigger char, or if user calls it
|
||||||
// (or on word char typing??)
|
// (or on word char typing??)
|
||||||
// after it's triggered, if response marked is_incomplete, update on every subsequent keypress
|
// after it's triggered, if response marked is_incomplete, update on every subsequent keypress
|
||||||
|
|
|
@ -33,7 +33,7 @@ pub struct EditorView {
|
||||||
keymaps: Keymaps,
|
keymaps: Keymaps,
|
||||||
on_next_key: Option<Box<dyn FnOnce(&mut commands::Context, KeyEvent)>>,
|
on_next_key: Option<Box<dyn FnOnce(&mut commands::Context, KeyEvent)>>,
|
||||||
last_insert: (commands::Command, Vec<KeyEvent>),
|
last_insert: (commands::Command, Vec<KeyEvent>),
|
||||||
completion: Option<Completion>,
|
pub(crate) completion: Option<Completion>,
|
||||||
spinners: ProgressSpinners,
|
spinners: ProgressSpinners,
|
||||||
autoinfo: Option<Info>,
|
autoinfo: Option<Info>,
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue