From 847c1cd3c345a6a42cc9f7e8bef90388976e4210 Mon Sep 17 00:00:00 2001 From: Tim Culverhouse Date: Wed, 19 Oct 2022 12:27:03 -0500 Subject: [PATCH] terminal: properly handle cursor display The terminal widget reports if the cursor should be displayed. Properly handle this output to report cursor display back to aerc. Reported-by: staceee Signed-off-by: Tim Culverhouse Acked-by: Robin Jarry --- widgets/terminal.go | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/widgets/terminal.go b/widgets/terminal.go index e0a76ca..691b1b4 100644 --- a/widgets/terminal.go +++ b/widgets/terminal.go @@ -13,14 +13,13 @@ import ( ) type Terminal struct { - closed bool - cmd *exec.Cmd - ctx *ui.Context - cursorShown bool - destroyed bool - focus bool - vterm *tcellterm.Terminal - running bool + closed bool + cmd *exec.Cmd + ctx *ui.Context + destroyed bool + focus bool + vterm *tcellterm.Terminal + running bool OnClose func(err error) OnEvent func(event tcell.Event) bool @@ -30,10 +29,9 @@ type Terminal struct { func NewTerminal(cmd *exec.Cmd) (*Terminal, error) { term := &Terminal{ - cursorShown: true, + cmd: cmd, + vterm: tcellterm.New(), } - term.cmd = cmd - term.vterm = tcellterm.New() return term, nil } @@ -98,12 +96,12 @@ func (term *Terminal) Draw(ctx *ui.Context) { func (term *Terminal) draw() { term.vterm.Draw() if term.focus && !term.closed && term.ctx != nil { - if !term.cursorShown { - term.ctx.HideCursor() - } else { - _, x, y, style := term.vterm.GetCursor() + vis, x, y, style := term.vterm.GetCursor() + if vis { term.ctx.SetCursor(x, y) term.ctx.SetCursorStyle(style) + } else { + term.ctx.HideCursor() } } }