From 3d6b0c6dd6476a7a29ca334facef0f04571d71ee Mon Sep 17 00:00:00 2001 From: Zachary Yedidia Date: Tue, 16 Aug 2022 22:07:41 -0700 Subject: [PATCH] Ensure screen cannot draw during a term prompt Fixes #2528 --- cmd/micro/micro.go | 2 ++ internal/screen/screen.go | 3 +++ 2 files changed, 5 insertions(+) diff --git a/cmd/micro/micro.go b/cmd/micro/micro.go index e0590244..4af1d295 100644 --- a/cmd/micro/micro.go +++ b/cmd/micro/micro.go @@ -388,6 +388,7 @@ func DoEvent() { var event tcell.Event // Display everything + screen.DrawLock.Lock() screen.Screen.Fill(' ', config.DefStyle) screen.Screen.HideCursor() action.Tabs.Display() @@ -397,6 +398,7 @@ func DoEvent() { action.MainTab().Display() action.InfoBar.Display() screen.Screen.Show() + screen.DrawLock.Unlock() // Check for new events select { diff --git a/internal/screen/screen.go b/internal/screen/screen.go index 967e8617..0f1cd64b 100644 --- a/internal/screen/screen.go +++ b/internal/screen/screen.go @@ -24,6 +24,7 @@ var Events chan (tcell.Event) // The lock is necessary since the screen is polled on a separate thread var lock sync.Mutex +var DrawLock sync.Mutex // drawChan is a channel that will cause the screen to redraw when // written to even if no event user event has occurred @@ -120,6 +121,7 @@ func TempFini() bool { if !screenWasNil { Screen.Fini() Lock() + DrawLock.Lock() Screen = nil } return screenWasNil @@ -130,6 +132,7 @@ func TempStart(screenWasNil bool) { if !screenWasNil { Init() Unlock() + DrawLock.Unlock() } } -- 2.44.0