diff options
-rw-r--r-- | helix-term/src/application.rs | 3 | ||||
-rw-r--r-- | helix-view/src/editor.rs | 11 |
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 } |