on master help sign in
create separate timer for redraw requests (#8023)
e5f8d8ePascal Kuthe
helix-term/src/application.rs+3
@@ -598,6 +598,9 @@ impl Application {
598 self.render().await;
598 self.render().await;
599 }
599 }
600 }
600 }
601+ EditorEvent::Redraw => {
602+ self.render().await;
603+ }
601 EditorEvent::IdleTimer => {
604 EditorEvent::IdleTimer => {
602 self.editor.clear_idle_timer();
605 self.editor.clear_idle_timer();
603 self.handle_idle_timeout().await;
606 self.handle_idle_timeout().await;
helix-view/src/editor.rs+9−2
@@ -918,6 +918,7 @@ pub struct Editor {
918 pub auto_pairs: Option<AutoPairs>,
918 pub auto_pairs: Option<AutoPairs>,
919
919
920 pub idle_timer: Pin<Box<Sleep>>,
920 pub idle_timer: Pin<Box<Sleep>>,
921+ redraw_timer: Pin<Box<Sleep>>,
921 last_motion: Option<Motion>,
922 last_motion: Option<Motion>,
922 pub last_completion: Option<CompleteAction>,
923 pub last_completion: Option<CompleteAction>,
923
924
@@ -963,6 +964,7 @@ pub enum EditorEvent {
963 LanguageServerMessage((usize, Call)),
964 LanguageServerMessage((usize, Call)),
964 DebuggerEvent(dap::Payload),
965 DebuggerEvent(dap::Payload),
965 IdleTimer,
966 IdleTimer,
967+ Redraw,
966}
968}
967
969
968#[derive(Debug, Clone)]
970#[derive(Debug, Clone)]
@@ -1053,6 +1055,7 @@ impl Editor {
1053 status_msg: None,
1055 status_msg: None,
1054 autoinfo: None,
1056 autoinfo: None,
1055 idle_timer: Box::pin(sleep(conf.idle_timeout)),
1057 idle_timer: Box::pin(sleep(conf.idle_timeout)),
1058+ redraw_timer: Box::pin(sleep(Duration::MAX)),
1056 last_motion: None,
1059 last_motion: None,
1057 last_completion: None,
1060 last_completion: None,
1058 config,
1061 config,
@@ -1753,12 +1756,16 @@ impl Editor {
1753 if !self.needs_redraw{
1756 if !self.needs_redraw{
1754 self.needs_redraw = true;
1757 self.needs_redraw = true;
1755 let timeout = Instant::now() + Duration::from_millis(33);
1758 let timeout = Instant::now() + Duration::from_millis(33);
1756− if timeout < self.idle_timer.deadline(){
1759+ if timeout < self.idle_timer.deadline() && timeout < self.redraw_timer.deadline(){
1757− self.idle_timer.as_mut().reset(timeout)
1760+ self.redraw_timer.as_mut().reset(timeout)
1758 }
1761 }
1759 }
1762 }
1760 }
1763 }
1761
1764
1765+ _ = &mut self.redraw_timer => {
1766+ self.redraw_timer.as_mut().reset(Instant::now() + Duration::from_secs(86400 * 365 * 30));
1767+ return EditorEvent::Redraw
1768+ }
1762 _ = &mut self.idle_timer => {
1769 _ = &mut self.idle_timer => {
1763 return EditorEvent::IdleTimer
1770 return EditorEvent::IdleTimer
1764 }
1771 }