aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--helix-term/src/application.rs3
-rw-r--r--helix-view/src/editor.rs11
2 files changed, 12 insertions, 2 deletions
diff --git a/helix-term/src/application.rs b/helix-term/src/application.rs
index 3e938917..97ba0cc3 100644
--- a/helix-term/src/application.rs
+++ b/helix-term/src/application.rs
@@ -598,6 +598,9 @@ impl Application {
self.render().await;
}
}
+ EditorEvent::Redraw => {
+ self.render().await;
+ }
EditorEvent::IdleTimer => {
self.editor.clear_idle_timer();
self.handle_idle_timeout().await;
diff --git a/helix-view/src/editor.rs b/helix-view/src/editor.rs
index 1735b060..94d0a852 100644
--- a/helix-view/src/editor.rs
+++ b/helix-view/src/editor.rs
@@ -918,6 +918,7 @@ pub struct Editor {
pub auto_pairs: Option<AutoPairs>,
pub idle_timer: Pin<Box<Sleep>>,
+ redraw_timer: Pin<Box<Sleep>>,
last_motion: Option<Motion>,
pub last_completion: Option<CompleteAction>,
@@ -963,6 +964,7 @@ pub enum EditorEvent {
LanguageServerMessage((usize, Call)),
DebuggerEvent(dap::Payload),
IdleTimer,
+ Redraw,
}
#[derive(Debug, Clone)]
@@ -1053,6 +1055,7 @@ impl Editor {
status_msg: None,
autoinfo: None,
idle_timer: Box::pin(sleep(conf.idle_timeout)),
+ redraw_timer: Box::pin(sleep(Duration::MAX)),
last_motion: None,
last_completion: None,
config,
@@ -1753,12 +1756,16 @@ impl Editor {
if !self.needs_redraw{
self.needs_redraw = true;
let timeout = Instant::now() + Duration::from_millis(33);
- if timeout < self.idle_timer.deadline(){
- self.idle_timer.as_mut().reset(timeout)
+ if timeout < self.idle_timer.deadline() && timeout < self.redraw_timer.deadline(){
+ self.redraw_timer.as_mut().reset(timeout)
}
}
}
+ _ = &mut self.redraw_timer => {
+ self.redraw_timer.as_mut().reset(Instant::now() + Duration::from_secs(86400 * 365 * 30));
+ return EditorEvent::Redraw
+ }
_ = &mut self.idle_timer => {
return EditorEvent::IdleTimer
}