From 11f70a2757992596ab682a182395857eb4524801 Mon Sep 17 00:00:00 2001 From: yeqown Date: Wed, 15 Nov 2023 07:43:51 -0600 Subject: [PATCH] fix(terminal): poll and wait termbox event so that we get the output of termbox buffer. (#95) Co-authored-by: Yeqown.Y --- writer/terminal/writer.go | 37 ++++++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/writer/terminal/writer.go b/writer/terminal/writer.go index fdd4cab..1a4875f 100644 --- a/writer/terminal/writer.go +++ b/writer/terminal/writer.go @@ -3,6 +3,7 @@ package terminal import ( "github.com/yeqown/go-qrcode/v2" + "github.com/mattn/go-runewidth" termbox "github.com/nsf/termbox-go" ) @@ -57,10 +58,9 @@ func (w Writer) Write(mat qrcode.Matrix) error { bg := termbox.ColorWhite fg := termbox.ColorBlack - padding := 1 + padding, curRow := 1, 0 w.preDraw(ww, hh, padding, bg) mat.Iterate(qrcode.IterDirection_ROW, func(x int, y int, state qrcode.QRValue) { - if state.IsSet() { fg = termbox.ColorBlack } else { @@ -68,9 +68,40 @@ func (w Writer) Write(mat qrcode.Matrix) error { } w.drawBlock(x, y, padding, fg, bg) + curRow = y }) - return termbox.Flush() + printTip(curRow + 2*padding + 1 + 1) + return hold() +} + +func printTip(y int) { + tip := "Press any key to quit." + x := 0 + for _, r := range tip { + w := runewidth.RuneWidth(r) + if w == 0 || (w == 2 && runewidth.IsAmbiguousWidth(r)) { + w = 1 + } + termbox.SetCell(x, y, r, termbox.ColorDefault, termbox.ColorDefault) + x += w + } +} + +func hold() error { + if err := termbox.Flush(); err != nil { + return err + } + +wait: + for { + switch ev := termbox.PollEvent(); ev.Type { + case termbox.EventKey: + break wait + } + } + + return nil } func (w Writer) Close() error {