about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorDrew DeVault <sir@cmpwn.com>2019-03-21 19:56:47 -0400
committerDrew DeVault <sir@cmpwn.com>2019-03-21 19:56:47 -0400
commit55ad16bb706a013711c555259c37292d441894f2 (patch)
tree7b5df695d246ef2615f95bdcd451ca88764f8251
parent28f393bdbdd865702cc8c928607d43a05dc7e6b8 (diff)
downloadaerc-55ad16bb706a013711c555259c37292d441894f2.tar.gz
Fix cursor handling in embedded terminal
-rw-r--r--go.mod2
-rw-r--r--go.sum2
-rw-r--r--widgets/terminal.go22
3 files changed, 11 insertions, 15 deletions
diff --git a/go.mod b/go.mod
index 48ca887..f642d69 100644
--- a/go.mod
+++ b/go.mod
@@ -1,7 +1,7 @@
 module git.sr.ht/~sircmpwn/aerc2
 
 require (
-	git.sr.ht/~sircmpwn/go-libvterm v0.0.0-20190321231430-3db654768b06
+	git.sr.ht/~sircmpwn/go-libvterm v0.0.0-20190321235500-26a1fd7312be
 	github.com/emersion/go-imap v1.0.0-beta.1
 	github.com/emersion/go-imap-idle v0.0.0-20180114101550-2af93776db6b
 	github.com/emersion/go-sasl v0.0.0-20161116183048-7e096a0a6197 // indirect
diff --git a/go.sum b/go.sum
index 48fbbc5..57e7263 100644
--- a/go.sum
+++ b/go.sum
@@ -12,6 +12,8 @@ git.sr.ht/~sircmpwn/go-libvterm v0.0.0-20190321231235-12f4bd976b20 h1:5oQDpkPYOn
 git.sr.ht/~sircmpwn/go-libvterm v0.0.0-20190321231235-12f4bd976b20/go.mod h1:hT88+cTemwwESbMptwC7O33qrJfQX0SgRWbXlndUS2c=
 git.sr.ht/~sircmpwn/go-libvterm v0.0.0-20190321231430-3db654768b06 h1:x9azyMxWqgTq4ARhNbYKHejt0PMhLi8J2XnuEsih9Qc=
 git.sr.ht/~sircmpwn/go-libvterm v0.0.0-20190321231430-3db654768b06/go.mod h1:hT88+cTemwwESbMptwC7O33qrJfQX0SgRWbXlndUS2c=
+git.sr.ht/~sircmpwn/go-libvterm v0.0.0-20190321235500-26a1fd7312be h1:2c/wWvhAzx530xu6pU8oEjtBAnHDyqQQIFmzIdko/48=
+git.sr.ht/~sircmpwn/go-libvterm v0.0.0-20190321235500-26a1fd7312be/go.mod h1:hT88+cTemwwESbMptwC7O33qrJfQX0SgRWbXlndUS2c=
 github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/emersion/go-imap v1.0.0-beta.1 h1:bTCaVlUnb5mKoW9lEukusxguSYYZPer+q0g5t+vw5X0=
diff --git a/widgets/terminal.go b/widgets/terminal.go
index 29a619c..d9772e6 100644
--- a/widgets/terminal.go
+++ b/widgets/terminal.go
@@ -92,7 +92,6 @@ type Terminal struct {
 	cmd          *exec.Cmd
 	colors       map[tcell.Color]tcell.Color
 	ctx          *ui.Context
-	cursorPos    vterm.Pos
 	cursorShown  bool
 	damage       []vterm.Rect
 	err          error
@@ -202,6 +201,7 @@ func (term *Terminal) Close(err error) {
 		term.OnClose(err)
 	}
 	term.closed = true
+	term.ctx.HideCursor()
 }
 
 func (term *Terminal) OnInvalidate(cb func(d ui.Drawable)) {
@@ -283,11 +283,17 @@ func (term *Terminal) Draw(ctx *ui.Context) {
 			}
 		}
 	}
+
+	if !term.cursorShown {
+		ctx.HideCursor()
+	} else {
+		row, col := term.vterm.ObtainState().GetCursorPos()
+		ctx.SetCursor(col, row)
+	}
 }
 
 func (term *Terminal) Focus(focus bool) {
 	term.focus = focus
-	term.resetCursor()
 }
 
 func convertMods(mods tcell.ModMask) vterm.Modifier {
@@ -373,22 +379,10 @@ func (term *Terminal) onDamage(rect *vterm.Rect) int {
 	return 1
 }
 
-func (term *Terminal) resetCursor() {
-	if term.ctx != nil && term.focus {
-		if !term.cursorShown {
-			term.ctx.HideCursor()
-		} else {
-			term.ctx.SetCursor(term.cursorPos.Col(), term.cursorPos.Row())
-		}
-	}
-}
-
 func (term *Terminal) onMoveCursor(old *vterm.Pos,
 	pos *vterm.Pos, visible bool) int {
 
 	term.cursorShown = visible
-	term.cursorPos = *pos
-	term.resetCursor()
 	return 1
 }