From d847073bdf67a2fd8c8695dbacbe010bcbfd27c8 Mon Sep 17 00:00:00 2001 From: Tim Culverhouse Date: Thu, 6 Oct 2022 11:46:40 -0500 Subject: [PATCH] events: introduce AercMsg and QueueRedraw Add AercMsg as a main interface for internal communication in aerc in preparation for a main event loop. Add a QueueRedraw function to to trigger a redraw. This will be needed for widgets which should be drawn after some delay (completions, terminal, for example) Signed-off-by: Tim Culverhouse Acked-by: Robin Jarry --- lib/ui/interfaces.go | 3 +++ lib/ui/ui.go | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/lib/ui/interfaces.go b/lib/ui/interfaces.go index 7e11725..8a62ecf 100644 --- a/lib/ui/interfaces.go +++ b/lib/ui/interfaces.go @@ -4,6 +4,9 @@ import ( "github.com/gdamore/tcell/v2" ) +// AercMsg is used to communicate within aerc +type AercMsg interface{} + // Drawable is a UI component that can draw. Unless specified, all methods must // only be called from a single goroutine, the UI goroutine. type Drawable interface { diff --git a/lib/ui/ui.go b/lib/ui/ui.go index 632d5f1..d477242 100644 --- a/lib/ui/ui.go +++ b/lib/ui/ui.go @@ -7,6 +7,14 @@ import ( "github.com/gdamore/tcell/v2" ) +var MsgChannel = make(chan AercMsg, 50) + +// QueueRedraw sends a nil message into the MsgChannel. Nothing will handle this +// message, but a redraw will occur if the UI is marked as invalid +func QueueRedraw() { + MsgChannel <- nil +} + type UI struct { Content DrawableInteractive exit atomic.Value // bool