From 27978a859b279360b28240a62541849ad6bba39f Mon Sep 17 00:00:00 2001
From: Jason Stewart <support@eggplantsd.com>
Date: Mon, 26 Sep 2022 11:11:49 -0400
Subject: [PATCH] ui: avoid panic when terminal window is shrunk

When using a tiling window manager, aerc terminal dimensions may be
greatly reduced after a new window has been created by :open. When the
ui attempts to render to formerly-valid coordinates, SetCell & Printf
may panic. Replace panic() with no-op in both functions to prevent
aerc from crashing after a window shrink.

Signed-off-by: Jason Stewart <support@eggplantsd.com>
Acked-by: Robin Jarry <robin@jarry.cc>
---
 lib/ui/context.go | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/lib/ui/context.go b/lib/ui/context.go
index 859dab7..12d65bb 100644
--- a/lib/ui/context.go
+++ b/lib/ui/context.go
@@ -56,7 +56,8 @@ func (ctx *Context) Subcontext(x, y, width, height int) *Context {
 func (ctx *Context) SetCell(x, y int, ch rune, style tcell.Style) {
 	width, height := ctx.viewport.Size()
 	if x >= width || y >= height {
-		panic(fmt.Errorf("Attempted to draw outside of context"))
+		// no-op when dims are inadequate
+		return
 	}
 	crunes := []rune{}
 	ctx.viewport.SetContent(x, y, ch, crunes, style)
@@ -68,7 +69,8 @@ func (ctx *Context) Printf(x, y int, style tcell.Style,
 	width, height := ctx.viewport.Size()
 
 	if x >= width || y >= height {
-		panic(fmt.Errorf("Attempted to draw outside of context"))
+		// no-op when dims are inadequate
+		return 0
 	}
 
 	str := fmt.Sprintf(format, a...)