From 0b26241b42153e83eec9a0333d138f4972fd59ab Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Thu, 21 Mar 2019 21:00:03 -0400 Subject: [PATCH] Improve cursor handling in embedded terminal --- go.mod | 2 +- go.sum | 6 + trace | 499 ++++++++++++++++++++++++++++++++++++++++++++ widgets/msglist.go | 3 + widgets/terminal.go | 27 ++- 5 files changed, 528 insertions(+), 9 deletions(-) create mode 100644 trace diff --git a/go.mod b/go.mod index f642d69..f6deddc 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-20190321235500-26a1fd7312be + git.sr.ht/~sircmpwn/go-libvterm v0.0.0-20190322002230-17c9f17a421a 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 57e7263..2c0300f 100644 --- a/go.sum +++ b/go.sum @@ -14,6 +14,12 @@ git.sr.ht/~sircmpwn/go-libvterm v0.0.0-20190321231430-3db654768b06 h1:x9azyMxWqg 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= +git.sr.ht/~sircmpwn/go-libvterm v0.0.0-20190322000612-b4ccb83205ad h1:kZN7edC9VBtXDy0WudAl5E32Bf+BKXIo9kndm1STKEE= +git.sr.ht/~sircmpwn/go-libvterm v0.0.0-20190322000612-b4ccb83205ad/go.mod h1:hT88+cTemwwESbMptwC7O33qrJfQX0SgRWbXlndUS2c= +git.sr.ht/~sircmpwn/go-libvterm v0.0.0-20190322001004-741298f37f76 h1:D9PCVZ+pgtpYTQBLeWMe38yVD3944hJJoRsmJUKO3VM= +git.sr.ht/~sircmpwn/go-libvterm v0.0.0-20190322001004-741298f37f76/go.mod h1:hT88+cTemwwESbMptwC7O33qrJfQX0SgRWbXlndUS2c= +git.sr.ht/~sircmpwn/go-libvterm v0.0.0-20190322002230-17c9f17a421a h1:ktjo0NVokhdhhyS/VYA1/8R/Az8x5x43r0SuI6McqW4= +git.sr.ht/~sircmpwn/go-libvterm v0.0.0-20190322002230-17c9f17a421a/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/trace b/trace new file mode 100644 index 0000000..0d7af61 --- /dev/null +++ b/trace @@ -0,0 +1,499 @@ +11330 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \0\0\0\0\0\0"..., 832) = 832 +11330 read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\340f\0\0\0\0\0\0"..., 832) = 832 +11330 read(3, "\4\0\0\0\20\0\0\0\5\0\0\0GNU\0\2\0\0\300\4\0\0\0\3\0\0\0\0\0\0\0", 32) = 32 +11330 read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0000C\2\0\0\0\0\0"..., 832) = 832 +11330 read(3, "\4\0\0\0\24\0\0\0\3\0\0\0GNU\0\201\336\t\36\251c\324\233E\371SoK\5H\334"..., 68) = 68 +11330 read(3, "\4\0\0\0\24\0\0\0\3\0\0\0GNU\0\201\336\t\36\251c\324\233E\371SoK\5H\334"..., 68) = 68 +11330 read(3, "\4\0\0\0\20\0\0\0\5\0\0\0GNU\0\2\0\0\300\4\0\0\0\3\0\0\0\0\0\0\0", 32) = 32 +11330 read(3, "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0\0\0\5\0\0\0\0"..., 4096) = 3536 +11330 read(3, "", 4096) = 0 +11330 read(3, "#\n# aerc main configuration\n\n[ui"..., 4096) = 3338 +11330 read(3, "", 4096) = 0 +11330 read(3, "#\n# aerc accounts configuration\n"..., 4096) = 566 +11330 read(3, "", 4096) = 0 +11330 read(3, "# Binds are of the form \0\1\0\0\0 0\0\0\0\0\0\0"..., 832) = 832 +11339 read(3, 0xc00009ed80, 128) = -1 EAGAIN (Resource temporarily unavailable) +11336 read(6, "# Full data: /usr/share/iana-etc"..., 4096) = 4096 +11336 read(6, " 101/udp\niso-tsap "..., 4096) = 4096 +11336 read(6, "udp\nbgp 179/sctp\nr"..., 4096) = 4096 +11336 read(6, "ogic 313/tcp\nmagenta-logic "..., 4096) = 4096 +11336 read(6, "dp\nprm-nm 409/tcp\nprm"..., 4096) = 4096 +11336 read(6, " 486/udp\nsaft "..., 4096) = 4096 +11336 read(6, "p\nwhoami 565/tcp\nwhoa"..., 4096) = 4096 +11336 read(6, " 644/tcp\ndwr "..., 4096) = 4096 +11336 read(6, "kerberos-adm 749/udp\nrfile "..., 4096) = 4096 +11336 read(6, "# Configuration for getaddrinfo("..., 4096) = 2584 +11336 read(6, "", 4096) = 0 +11336 read(6, "# Resolver configuration file.\n#"..., 4096) = 73 +11336 read(6, "", 4096) = 0 +11336 read(6, "# Generated by resolvconf\nnamese"..., 4096) = 46 +11336 read(6, "", 4096) = 0 +11336 read(6, "# Static table lookup for hostna"..., 4096) = 551 +11336 read(6, "", 4096) = 0 +11336 read(6, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 `\0\0\0\0\0\0"..., 832) = 832 +11336 read(6, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \0\0\0\0\0\0"..., 832) = 832 +11336 read(6, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 `\0\0\0\0\0\0"..., 832) = 832 +11336 read(6, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \20\0\0\0\0\0\0"..., 832) = 832 +11336 read(6, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 @\0\0\0\0\0\0"..., 832) = 832 +11339 read(6, 0xc0002de000, 517) = -1 EAGAIN (Resource temporarily unavailable) +11340 read(6, "\26\3\3\0]\2\0\0Y\3\3\323\257\347\202\253siA}\215\212\255\322\5Hm{\367\362dL"..., 517) = 517 +11340 read(6, "\321\253\326\330@\27\314\16m\4\24038\251\237\262\r\264\361\254\333i_\35\223\23\376\2509\0\0/"..., 2347) = 931 +11340 read(6, 0xc0002f2546, 1416) = -1 EAGAIN (Resource temporarily unavailable) +11340 read(6, "\364]f\3701`\210oZ\3550'\n0\r\6\t*\206H\206\367\r\1\1\v\5\0\3\202\1\1"..., 1416) = 859 +11340 read(6, 0xc0002f2000, 2766) = -1 EAGAIN (Resource temporarily unavailable) +11337 read(6, "\24\3\3\0\1\1\26\3\3\0(EY\230\37\332v]\237m\17Q\335\v\322[\25\303\211\375@,"..., 2766) = 51 +11337 read(6, 0xc0002f2000, 2766) = -1 EAGAIN (Resource temporarily unavailable) +11339 read(6, "\27\3\3\0\212EY\230\37\332v]\240Ku\347\221\252=\270\10\217\4\317\22\0K;G%\36\25"..., 2766) = 143 +11339 read(6, 0xc0002f2000, 2766) = -1 EAGAIN (Resource temporarily unavailable) +11338 read(6, "\27\3\3\1\206EY\230\37\332v]\241?u\36D\312\314\303\265\r\17B\347y\f\203\334\345\316j"..., 2766) = 395 +11338 read(6, 0xc0002f2000, 2766) = -1 EAGAIN (Resource temporarily unavailable) +11336 read(6, "\27\3\3\2\24EY\230\37\332v]\242\211\264w\202\265lOEJ-\344y\274\304\310\373\2\353\325"..., 2766) = 537 +11336 read(6, 0xc0002f2000, 2766) = -1 EAGAIN (Resource temporarily unavailable) +11337 read(6, "\27\3\3\4\fEY\230\37\332v]\243\2745o \30\333\30ZBn_\24\242N\361\230\322\354\252"..., 2766) = 1041 +11338 read(6, 0xc0002f2000, 2766) = -1 EAGAIN (Resource temporarily unavailable) +11341 read(6, "\27\3\3\0024EY\230\37\332v]\244\356|\246\2032n\242y\356\367\227Y\245\321\205\330\343\252\301"..., 2766) = 569 +11341 read(6, 0xc0002f2000, 2766) = -1 EAGAIN (Resource temporarily unavailable) +11336 read(6, "\27\3\3\0pEY\230\37\332v]\245\257\325D\205{sJ\379\246\365<\324R\0265?7\274"..., 2766) = 117 +11336 read(6, 0xc0002f2000, 2766) = -1 EAGAIN (Resource temporarily unavailable) +11336 read(6, "\27\3\3\10\272EY\230\37\332v]\246;+s\362pF\262Lk@-o\36V\314\241\335\306^"..., 2766) = 2239 +11333 read(6, 0xc0002f2000, 2766) = -1 EAGAIN (Resource temporarily unavailable) +11338 read(6, "\27\3\3\0IEY\230\37\332v]\247\375'\216N\203#\375U\2512L\35\273%\236q\244\270\252"..., 2766) = 78 +11338 read(6, 0xc0002f2000, 2766) = -1 EAGAIN (Resource temporarily unavailable) +11338 read(3, "$", 128) = 1 +11338 read(3, 0xc0002f0600, 128) = -1 EAGAIN (Resource temporarily unavailable) +11333 read(3, "v", 128) = 1 +11333 read(3, 0xc0002f0680, 128) = -1 EAGAIN (Resource temporarily unavailable) +11333 read(3, "i", 128) = 1 +11333 read(3, 0xc00039e000, 128) = -1 EAGAIN (Resource temporarily unavailable) +11333 read(3, "m", 128) = 1 +11333 read(3, 0xc00039e080, 128) = -1 EAGAIN (Resource temporarily unavailable) +11333 read(3, "\r", 128) = 1 +11333 read(3, 0xc00039e100, 128) = -1 EAGAIN (Resource temporarily unavailable) +11341 read(9, "", 8) = 0 +11334 read(7, +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 @\10\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \240\2\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 P\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \320\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \1\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 `\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 `\3\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \340\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \260\1\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0PH\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\220 \1\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \300\1\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \320\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 p\1\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0`\30\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \20\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\340f\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\4\0\0\0\20\0\0\0\5\0\0\0GNU\0\2\0\0\300\4\0\0\0\3\0\0\0\0\0\0\0", 32) = 32 +11347 read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0000C\2\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\4\0\0\0\24\0\0\0\3\0\0\0GNU\0\201\336\t\36\251c\324\233E\371SoK\5H\334"..., 68) = 68 +11347 read(3, "\4\0\0\0\24\0\0\0\3\0\0\0GNU\0\201\336\t\36\251c\324\233E\371SoK\5H\334"..., 68) = 68 +11347 read(3, "\4\0\0\0\20\0\0\0\5\0\0\0GNU\0\2\0\0\300\4\0\0\0\3\0\0\0\0\0\0\0", 32) = 32 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \20\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 0\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@\24\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 @\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \260\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \300\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \320\5\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\360\22\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \240\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 p\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \200\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \320\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200\n\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 0\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \20\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \20\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 P\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \20\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \20\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 `\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 @\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \260\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 `\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \20\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \300\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 `\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\320!\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \300\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 @\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@ \0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\320\21\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \340\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \0\1\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 0\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 @\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0000\21\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \20\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \240\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \20\1\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\300,\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@\300\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 @\0\0\0\0\0\0"..., 832) = 832 +11347 read(3, "# Locale name alias data base.\n#"..., 4096) = 2997 +11347 read(3, "", 4096) = 0 +11347 read(3, "\36\2%\0&\0\17\0\235\1\2\6xterm-256color|xterm"..., 32768) = 3713 +11347 read(3, "", 28672) = 0 +11347 read(3, "\" All system-wide defaults are s"..., 4096) = 912 +11347 read(4, "\" The Arch Linux global vimrc - "..., 4096) = 1423 +11347 read(4, "", 4096) = 0 +11347 read(3, "", 4096) = 0 +11347 read(3, "set nocompatible\nfiletype off\n\ns"..., 4096) = 4096 +11347 read(4, "\" Vim support file to switch off"..., 4096) = 280 +11347 read(4, "", 4096) = 0 +11347 read(4, "\" Vundle is a shortcut fo"..., 4096) = 3800 +11347 read(4, "", 4096) = 0 +11347 read(4, "\" ------------------------------"..., 4096) = 4096 +11347 read(4, "be supplied with the bundle spec"..., 4096) = 4096 +11347 read(4, " the corresponding 'after' direc"..., 4096) = 2323 +11347 read(4, "", 4096) = 0 +11347 read(4, "\" Vim support file to detect fil"..., 4096) = 4096 +11347 read(4, " getline(1) . getline(2) . getli"..., 4096) = 4096 +11347 read(4, "libs\nau BufNewFile,BufRead *.tlh"..., 4096) = 4096 +11347 read(4, "tch\n\t\\ if getline(1) =~ '^From ["..., 4096) = 4096 +11347 read(4, " \\ if getline(1) =~ '^From.*# T"..., 4096) = 4096 +11347 read(4, "usw2kagtlog\n\n\" Ipfilter\nau BufNe"..., 4096) = 4096 +11347 read(4, ",BufRead .mailcap,mailcap\t\tsetf "..., 4096) = 4096 +11347 read(4, " omnimark\n\n\" OpenROAD\nau BufNewF"..., 4096) = 4096 +11347 read(4, "and Python Stub Files\n\" Quixote "..., 4096) = 4096 +11347 read(4, ") =~ '\" || char == \""..., 4096) = 4096 +11347 read(3, "special)\n endif\n silent exe 'n"..., 4096) = 4096 +11347 read(3, " ! g:surround_no_mappings\n nmap"..., 4096) = 619 +11347 read(3, "", 4096) = 0 +11347 read(3, "\" Copyright (c) 2011-2015 Editor"..., 4096) = 4096 +11347 read(3, " \\ '/usr/bin/python24']"..., 4096) = 4096 +11347 read(3, "if\n\n \" Find python interp\n "..., 4096) = 4096 +11347 read(3, "ath, ':h')\n if l:path == "..., 4096) = 4096 +11347 read(3, " l:eq_left = strpart(one_line, 0"..., 4096) = 4096 +11347 read(3, " \" Fill only "..., 4096) = 1362 +11347 read(3, "", 4096) = 0 +11347 read(3, "\" SyntaxRange.vim: Define a diff"..., 4096) = 1045 +11347 read(3, "", 4096) = 0 +11347 read(3, "if exists('g:loaded_rust_vim_plu"..., 4096) = 955 +11347 read(3, "", 4096) = 0 +11347 read(3, "\" Vim syntastic plugin helper\n\" "..., 4096) = 718 +11347 read(3, "", 4096) = 0 +11347 read(3, "\n\n\" A plugin for jsonnet files.\n"..., 4096) = 723 +11347 read(3, "", 4096) = 0 +11347 read(3, "\" ------------------------------"..., 4096) = 1393 +11347 read(3, "", 4096) = 0 +11347 read(3, "\" Vim plugin for editing compres"..., 4096) = 2499 +11347 read(3, "", 4096) = 0 +11347 read(3, "\" LogiPat: Boolean logical patte"..., 4096) = 4096 +11347 read(3, " let s:nopstack= 0\n endif\n\n \""..., 4096) = 4096 +11347 read(3, "tern {{{2\nfun! s:LP_Not(pat)\n\" "..., 4096) = 2077 +11347 read(3, "", 4096) = 0 +11347 read(3, "\" Vim plugin for using Vim as ma"..., 4096) = 676 +11347 read(3, "", 4096) = 0 +11347 read(3, "\" Vim plugin for showing matchin"..., 4096) = 4096 +11347 read(3, "ne = stoplinetop\n endif\n\n \" Li"..., 4096) = 2989 +11347 read(3, "", 4096) = 0 +11347 read(3, "\" netrwPlugin.vim: Handles file "..., 4096) = 4096 +11347 read(3, ">0,)\ncom! -nargs=* -bar "..., 4096) = 4096 +11347 read(3, " listing when appropriate.\n"..., 4096) = 2248 +11347 read(3, "", 4096) = 0 +11347 read(3, "\" Vim plugin with helper functio"..., 4096) = 1414 +11347 read(3, "", 4096) = 0 +11347 read(3, "\" Vim plugin for downloading spe"..., 4096) = 499 +11347 read(3, "", 4096) = 0 +11347 read(3, "\" tarPlugin.vim -- a Vim plugin "..., 4096) = 2271 +11347 read(3, "", 4096) = 0 +11347 read(3, "\" Vim plugin for converting a sy"..., 4096) = 4096 +11347 read(3, "' for converted document encodin"..., 4096) = 4096 +11347 read(3, " html_prevent_copy contains\n\" "..., 4096) = 2274 +11347 read(3, "", 4096) = 0 +11347 read(3, "\" vimballPlugin : construct a fi"..., 4096) = 2898 +11347 read(3, "", 4096) = 0 +11347 read(3, "\" zipPlugin.vim: Handles browsin"..., 4096) = 2510 +11347 read(3, "", 4096) = 0 +11347 read(3, "# This viminfo file was generate"..., 4096) = 4096 +11347 read(3, "9919,47,\"SelectedTab\"\n?/Global\n|"..., 4096) = 4096 +11347 read(3, " drown in emails...\n\t> \n\t> Thank"..., 4096) = 4096 +11347 read(3, " At first I wanted to patch teh "..., 4096) = 4096 +11347 read(3, "~/sources/go-libvterm/.git/COMMI"..., 4096) = 4096 +11347 read(3, "/neovim/src/nvim/terminal.c\n|4,3"..., 4096) = 4096 +11347 read(3, " ~/sources/neovim/src/nvim/term"..., 4096) = 4096 +11347 read(3, "1553214152\t0\n\t\"\t1\t18\n\t^\t1\t19\n\t.\t"..., 4096) = 4096 +11347 read(3, "\"\t219\t0\n\t^\t176\t15\n\t.\t177\t34\n\t+\t1"..., 4096) = 4096 +11347 read(3, "0\n\t^\t1\t15\n\t.\t1\t14\n\t+\t10\t1\n\t+\t1\t1"..., 4096) = 4096 +11347 read(3, "/asdf\n\t*\t1553186123\t0\n\t\"\t1\t0\n\n> "..., 4096) = 1482 +11347 read(3, "", 4096) = 0 +11347 read(4, "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"..., 4096) = 4096 +11347 read(4, "UTF-8\nbo_IN.utf8\t\t\t\t\tbo_IN.UTF-8"..., 4096) = 4096 +11347 read(4, "\t\t\tde_DE.ISO8859-15\nde_DE.88591\t"..., 4096) = 4096 +11347 read(4, "ES.ISO8859-1\nes.UTF-8\t\t\t\t\tes_ES."..., 4096) = 4096 +11347 read(4, "91\t\t\t\t\tfi_FI.ISO8859-1\nfi_FI.ISO"..., 4096) = 4096 +11347 read(4, "\t\t\t\the_IL.UTF-8\nhi\t\t\t\t\t\thi_IN.IS"..., 4096) = 4096 +11347 read(4, ".ISO8859-13\nlt_LT\t\t\t\t\t\tlt_LT.ISO"..., 4096) = 4096 +11347 read(4, "so88591\t\t\t\t\tpd_DE.ISO8859-1\npd_U"..., 4096) = 4096 +11347 read(4, "s_ZA.ISO8859-1\nss_ZA.iso88591\t\t\t"..., 4096) = 4096 +11347 read(4, "5hkscs\nzh_HK.BIG5-HKSCS\t\t\t\tzh_HK"..., 4096) = 4096 +11347 read(4, "af_ZA.iso88591:\t\t\t\t\taf_ZA.ISO885"..., 4096) = 4096 +11347 read(4, "SO8859-1\nca_AD:\t\t\t\t\t\tca_AD.ISO88"..., 4096) = 4096 +11347 read(4, "\t\t\tde_DE.UTF-8\nde_LU:\t\t\t\t\t\tde_LU"..., 4096) = 4096 +11347 read(4, "8859-1\nes_CL.ISO-8859-1:\t\t\t\tes_C"..., 4096) = 4096 +11347 read(4, "\t\t\tfi_FI.ISO8859-15\nfi_FI.utf8:\t"..., 4096) = 4096 +11347 read(4, "idev:\t\t\t\t\thi_IN.ISCII-DEV\nhi_IN."..., 4096) = 4096 +11347 read(4, "\n\n\n\n\n\n\nlt:\t\t\t\t\t\tlt_LT.ISO8859-13"..., 4096) = 4096 +11347 read(4, "N.UTF-8\npa_IN.utf8:\t\t\t\t\tpa_IN.UT"..., 4096) = 4096 +11347 read(4, "r_RS.UTF-8\nsr@latin:\t\t\t\t\tsr_RS.U"..., 4096) = 4096 +11347 read(4, "ucCN\nzh_CN.GB2312:\t\t\t\t\tzh_CN.gb2"..., 4096) = 3875 +11347 read(4, "", 4096) = 0 +11347 read(4, "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"..., 4096) = 4096 +11347 read(4, "UTF-8\nbo_IN.utf8\t\t\t\t\tbo_IN.UTF-8"..., 4096) = 4096 +11347 read(4, "\t\t\tde_DE.ISO8859-15\nde_DE.88591\t"..., 4096) = 4096 +11347 read(4, "ES.ISO8859-1\nes.UTF-8\t\t\t\t\tes_ES."..., 4096) = 4096 +11347 read(4, "91\t\t\t\t\tfi_FI.ISO8859-1\nfi_FI.ISO"..., 4096) = 4096 +11347 read(4, "\t\t\t\the_IL.UTF-8\nhi\t\t\t\t\t\thi_IN.IS"..., 4096) = 4096 +11347 read(4, ".ISO8859-13\nlt_LT\t\t\t\t\t\tlt_LT.ISO"..., 4096) = 4096 +11347 read(4, "so88591\t\t\t\t\tpd_DE.ISO8859-1\npd_U"..., 4096) = 4096 +11347 read(4, "s_ZA.ISO8859-1\nss_ZA.iso88591\t\t\t"..., 4096) = 4096 +11347 read(4, "5hkscs\nzh_HK.BIG5-HKSCS\t\t\t\tzh_HK"..., 4096) = 4096 +11347 read(4, "af_ZA.iso88591:\t\t\t\t\taf_ZA.ISO885"..., 4096) = 4096 +11347 read(4, "SO8859-1\nca_AD:\t\t\t\t\t\tca_AD.ISO88"..., 4096) = 4096 +11347 read(4, "\t\t\tde_DE.UTF-8\nde_LU:\t\t\t\t\t\tde_LU"..., 4096) = 4096 +11347 read(4, "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"..., 4096) = 4096 +11347 read(4, "CALE\t\t\tes_NI.ISO8859-1\niso8859-1"..., 4096) = 4096 +11347 read(4, "E\t\t\tph_PH.ISO8859-1\niso8859-2/XL"..., 4096) = 4096 +11347 read(4, "-8\nen_US.UTF-8/XLC_LOCALE\t\t\ten_B"..., 4096) = 4096 +11347 read(4, "_PT.UTF-8\nen_US.UTF-8/XLC_LOCALE"..., 4096) = 4096 +11347 read(4, "\niso8859-15/XLC_LOCALE:\t\t\tde_CH."..., 4096) = 4096 +11347 read(4, "ALE:\t\t\thu_HU.ISO8859-2\narmscii-8"..., 4096) = 4096 +11347 read(4, "/XLC_LOCALE:\t\t\tzh_CN.eucCN\nzh_CN"..., 4096) = 4096 +11347 read(4, "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"..., 4096) = 4096 +11347 read(4, "\n \n#\tcs20 class\ncs15\t{\n\tside\t\tGR"..., 4096) = 155 +11347 read(4, "", 4096) = 0 +11334 <... read resumed> "\33[?1000h\33[?2004h", 4096) = 16 +11334 read(7, "\33[?1049h\33[22;0;0t\33[?1h\33=\33[?2004h"..., 4096) = 65 +11334 read(7, +11347 read(4, "# Name Service Switch configurat"..., 4096) = 334 +11347 read(4, "", 4096) = 0 +11347 read(4, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 0\0\0\0\0\0\0"..., 832) = 832 +11347 read(4, "root:x:0:0::/root:/bin/bash\nbin:"..., 4096) = 2333 +11347 read(4, "\" Location: autoload/fugitiv"..., 4096) = 4096 +11347 read(4, "\n endtry\nendfunction\n\n\" Section"..., 4096) = 4096 +11347 read(4, "-C ' . s:shellesc(tree) . ' ' . "..., 4096) = 4096 +11347 read(4, "!=# ''\n if has_key(s:repos, d"..., 4096) = 4096 +11347 read(4, "ile] = s:DirCommitFile(a:url)\n "..., 4096) = 4096 +11347 read(4, "\\)\\|^:[0-3]:\\%(/\\|\\a\\+:\\)'\n l"..., 4096) = 4096 +11347 read(4, "'fugitive_blamed_bufnr', '')\n "..., 4096) = 4096 +11347 read(4, "(tree, path, [])\n if empty(entr"..., 4096) = 4096 +11347 read(4, "# 'blob'\n return []\n endif\n "..., 4096) = 4096 +11347 read(4, "name() which has been removed. R"..., 4096) = 4096 +11347 read(4, "ll map(entries,'s:sub(v:val,\"^04"..., 4096) = 4096 +11347 read(4, "tatus['Unstaged'][files] = line["..., 4096) = 4096 +11347 read(4, ")\n let nowait = v:version >= "..., 4096) = 4096 +11347 read(4, "ch>')\n let [dir, rev] = s:DirRe"..., 4096) = 4096 +11347 read(4, "'cat-file', b:fugitive_type, rev"..., 4096) = 4096 +11347 read(4, "\n else\n -tabnew\n endi"..., 4096) = 4096 +11347 read(4, ")\n if len(filename) &&\n "..., 4096) = 4096 +11347 read(4, "(\\x\\x\\x\\)\\@!\\l\\+\\ze [0-9a-f]'),\n"..., 4096) = 4096 +11347 read(4, "ion)\n let status = s:Do{a"..., 4096) = 4096 +11347 read(4, "eturn 'Git! diff --no-ext-diff -"..., 4096) = 4096 +11347 read(4, ") abort\n exe 'edit' s:fnameesca"..., 4096) = 4096 +11347 read(4, "rgs =~# '\\%(^\\| \\)-\\%(-interacti"..., 4096) = 4096 +11347 read(4, "TCH_HEAD\\nMERGE_HEAD\\nORIG_HEAD\""..., 4096) = 4096 +11347 read(4, "dit\\|--abort\\|-m\\)\\>' || a:cmd ="..., 4096) = 4096 +11347 read(4, "f:%l:%c:%m,%f:%l:%m,%m %f match%"..., 4096) = 4096 +11347 read(4, "ose\n if winnr('$') > 1\n"..., 4096) = 4096 +11347 read(4, "l s:command(\"-bar -bang -nargs=*"..., 4096) = 4096 +11347 read(4, " restorewinnr = 1\n endif\n"..., 4096) = 4096 +11347 read(4, "fthis() abort\n if !&diff\n le"..., 4096) = 4096 +11347 read(4, "f\n endif\n return post\n ca"..., 4096) = 4096 +11347 read(4, "len(s:gsub(matchstr(getline('.')"..., 4096) = 4096 +11347 read(4, "ve:[\\\\/][\\\\/]\"Geditend"..., 4096) = 4096 +11347 read(4, "ameAnnotation,fugitiveblameOrigi"..., 4096) = 4096 +11347 read(4, "\n else\n let expanded = s"..., 4096) = 4096 +11347 read(4, "# '^ref: ' && i < 10\n let"..., 4096) = 4096 +11347 read(4, "U>.,.+2Gblame\n else\n "..., 4096) = 4096 +11347 read(4, "==# 'Unstaged' && info.sigil !=#"..., 4096) = 4096 +11347 read(4, "eif getline('.') =~# '^[+-]' && "..., 4096) = 4096 +11347 read(4, "(...) abort\n if empty(s:Dir())\n"..., 4096) = 3445 +11347 read(4, "", 4096) = 0 +11334 <... read resumed> "\33[27m\33[23m\33[29m\33[m\33[H\33[2J\33[?25l\33"..., 4096) = 2029 +11334 read(7, "\33[25;1H\33[38;5;242m[No Name] "..., 4096) = 564 +11334 read(7, +11339 read(3, ":", 128) = 1 +11339 read(3, 0xc0002f0000, 128) = -1 EAGAIN (Resource temporarily unavailable) +11347 read(0, ":", 4096) = 1 +11334 <... read resumed> "\33[?25l\33[26;1H:", 4096) = 14 +11334 read(7, "\33[?2004h\33[?25h", 4096) = 14 +11334 read(7, +11333 read(3, "q", 128) = 1 +11333 read(3, 0xc0002f0080, 128) = -1 EAGAIN (Resource temporarily unavailable) +11347 read(0, "q", 4096) = 1 +11334 <... read resumed> "q\33[?25l\33[?25h", 4096) = 13 +11334 read(7, +11336 read(3, "!", 128) = 1 +11336 read(3, 0xc00009e000, 128) = -1 EAGAIN (Resource temporarily unavailable) +11347 read(0, "!", 4096) = 1 +11334 <... read resumed> "!\33[?25l\33[?25h", 4096) = 13 +11334 read(7, +11336 read(3, "\r", 128) = 1 +11336 read(3, 0xc0002f0000, 128) = -1 EAGAIN (Resource temporarily unavailable) +11347 read(0, "\r", 4096) = 1 +11334 <... read resumed> "\r", 4096) = 1 +11334 read(7, +11347 read(4, "\" =============================="..., 4096) = 2886 +11347 read(4, "", 4096) = 0 +11347 read(4, "/home/sircmpwn/sources/pangoterm"..., 4096) = 4096 +11347 read(4, "home/sircmpwn/sources/musl/src/i"..., 4096) = 4096 +11347 read(4, "p/mutt-homura-1000-10676-1575043"..., 4096) = 4096 +11347 read(4, "sources/godot/platform/generic-u"..., 4096) = 1059 +11347 read(4, "", 4096) = 0 +11347 read(4, "# This viminfo file was generate"..., 4096) = 4096 +11347 read(4, "9919,47,\"SelectedTab\"\n?/Global\n|"..., 4096) = 4096 +11347 read(4, " drown in emails...\n\t> \n\t> Thank"..., 4096) = 4096 +11347 read(4, " At first I wanted to patch teh "..., 4096) = 4096 +11347 read(4, "~/sources/go-libvterm/.git/COMMI"..., 4096) = 4096 +11347 read(4, "/neovim/src/nvim/terminal.c\n|4,3"..., 4096) = 4096 +11347 read(4, " ~/sources/neovim/src/nvim/term"..., 4096) = 4096 +11347 read(4, "1553214152\t0\n\t\"\t1\t18\n\t^\t1\t19\n\t.\t"..., 4096) = 4096 +11347 read(4, "\"\t219\t0\n\t^\t176\t15\n\t.\t177\t34\n\t+\t1"..., 4096) = 4096 +11347 read(4, "0\n\t^\t1\t15\n\t.\t1\t14\n\t+\t10\t1\n\t+\t1\t1"..., 4096) = 4096 +11347 read(4, "/asdf\n\t*\t1553186123\t0\n\t\"\t1\t0\n\n> "..., 4096) = 1482 +11347 read(4, "", 4096) = 0 +11334 <... read resumed> "\33[?25l\33[?1000l\33[?2004l", 4096) = 22 +11334 read(7, "\33[23;2t\33[23;1t\33[22;2t\33[22;1t\33[23"..., 4096) = 97 +11334 read(7, 0xc0003be000, 4096) = -1 EIO (Input/output error) +11347 +++ exited with 0 +++ +11334 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=11347, si_uid=1000, si_status=0, si_utime=5, si_stime=3} --- +11336 read(3, "q", 128) = 1 +11336 read(3, 0xc0002f0080, 128) = -1 EAGAIN (Resource temporarily unavailable) +11349 +++ exited with 0 +++ +11348 +++ exited with 0 +++ +11340 +++ exited with 0 +++ +11341 +++ exited with 0 +++ +11339 +++ exited with 0 +++ +11338 +++ exited with 0 +++ +11337 +++ exited with 0 +++ +11336 +++ exited with 0 +++ +11335 +++ exited with 0 +++ +11334 +++ exited with 0 +++ +11333 +++ exited with 0 +++ +11332 +++ exited with 0 +++ +11331 +++ exited with 0 +++ +11330 +++ exited with 0 +++ diff --git a/widgets/msglist.go b/widgets/msglist.go index ac941c8..b72fb03 100644 --- a/widgets/msglist.go +++ b/widgets/msglist.go @@ -149,6 +149,9 @@ func (ml *MessageList) Select(index int) { } func (ml *MessageList) nextPrev(delta int) { + if ml.store == nil || len(ml.store.Uids) == 0 { + return + } ml.selected += delta if ml.selected < 0 { ml.selected = 0 diff --git a/widgets/terminal.go b/widgets/terminal.go index d9772e6..d817023 100644 --- a/widgets/terminal.go +++ b/widgets/terminal.go @@ -93,6 +93,7 @@ type Terminal struct { colors map[tcell.Color]tcell.Color ctx *ui.Context cursorShown bool + cursorPos vterm.Pos damage []vterm.Rect err error focus bool @@ -106,14 +107,17 @@ type Terminal struct { } func NewTerminal(cmd *exec.Cmd) (*Terminal, error) { - term := &Terminal{} + term := &Terminal{ + cursorShown: true, + } term.cmd = cmd term.vterm = vterm.New(24, 80) term.vterm.SetUTF8(true) term.start = make(chan interface{}) + screen := term.vterm.ObtainScreen() go func() { <-term.start - buf := make([]byte, 2048) + buf := make([]byte, 4096) for { n, err := term.pty.Read(buf) if err != nil { @@ -126,10 +130,10 @@ func NewTerminal(cmd *exec.Cmd) (*Terminal, error) { term.Close(err) return } + screen.Flush() term.Invalidate() } }() - screen := term.vterm.ObtainScreen() screen.OnDamage = term.onDamage screen.OnMoveCursor = term.onMoveCursor screen.OnSetTermProp = term.onSetTermProp @@ -165,7 +169,7 @@ func NewTerminal(cmd *exec.Cmd) (*Terminal, error) { } func (term *Terminal) flushTerminal() { - buf := make([]byte, 2048) + buf := make([]byte, 4096) for { n, err := term.vterm.Read(buf) if err != nil { @@ -253,7 +257,6 @@ func (term *Terminal) Draw(ctx *ui.Context) { } screen := term.vterm.ObtainScreen() - screen.Flush() type coords struct { x int @@ -287,8 +290,7 @@ func (term *Terminal) Draw(ctx *ui.Context) { if !term.cursorShown { ctx.HideCursor() } else { - row, col := term.vterm.ObtainState().GetCursorPos() - ctx.SetCursor(col, row) + ctx.SetCursor(term.cursorPos.Col(), term.cursorPos.Row()) } } @@ -382,7 +384,13 @@ func (term *Terminal) onDamage(rect *vterm.Rect) int { func (term *Terminal) onMoveCursor(old *vterm.Pos, pos *vterm.Pos, visible bool) int { - term.cursorShown = visible + rows, cols, _ := pty.Getsize(term.pty) + if pos.Row() >= rows || pos.Col() >= cols { + return 1 + } + + term.cursorPos = *pos + term.Invalidate() return 1 } @@ -392,6 +400,9 @@ func (term *Terminal) onSetTermProp(prop int, val *vterm.VTermValue) int { if term.OnTitle != nil { term.OnTitle(val.String) } + case vterm.VTERM_PROP_CURSORVISIBLE: + term.cursorShown = val.Boolean + term.Invalidate() } return 1 }