v1->v2: - [cc0] Fix Alt+BackSpace in parser - Fix translation of certain C0 control keys This series replaces tcell with a library I wrote called vaxis. It's got a similar API and more features. Some specific ones that could be useful to senpai: - Image support (kitty, sixel) - Proper grapheme segmentation detection and support (via DECMODE 2027) - Mouse shapes (implemented in patch 2/2 in these series for changing the channel list width, so ridiculous but very cool) - Curly underlines - Kitty keyboard protocol This is likely to have lots of bugs. I've been running it myself for quite awhile, but the kitty keyboard protocol specifically can create a lot of bugs with key matching, especially with non-us layouts. I've got a similar patch series going with aerc and fixing lots of these bugs already, but I expect there will be more. There are two new packages brought in: vaxis and vaxis-tcell. Vaxis-tcell is an implementation of a tcell "screen", using vaxis as the renderer, but exposing the internals of vaxis so you can slowly bring in the vaxis types without blowing up the entire UI code. By no means do I expect this to be merged, this is a feeler for testing. The goal I have with aerc (and would also do here) is to do a longer series using the 'vaxis-tcell' package as a bridge to enable smaller commits, with the goal being that by the end of the series 'vaxis-tcell' is no longer needed and the entire application is using vaxis types everywhere. Tim Culverhouse (2): ui: use vaxis rendering engine mouse: add mouse shape and events app.go | 21 +++++++++++++----- go.mod | 22 ++++++++++++++----- go.sum | 65 ++++++++++++++++++++++---------------------------------- ui/ui.go | 26 +++++++++++++++++++++++ 4 files changed, 84 insertions(+), 50 deletions(-) -- 2.42.0
Copy & paste the following snippet into your terminal to import this patchset into git:
curl -s https://lists.sr.ht/~delthas/senpai-dev/patches/46061/mbox | git am -3Learn more about email & git
Signed-off-by: Tim Culverhouse <tim@timculverhouse.com> --- v2: changes occured in libraries only app.go | 3 ++- go.mod | 22 +++++++++++++++----- go.sum | 65 ++++++++++++++++++++++------------------------------------ 3 files changed, 44 insertions(+), 46 deletions(-) diff --git a/app.go b/app.go index 509a51841a49..49f73da5791c 100644 --- a/app.go +++ b/app.go @@ -272,6 +272,7 @@ func (app *App) eventLoop() { } }() } + func (app *App) handleEvent(ev event) bool { if ev.src == "*" { if ev.content == nil { @@ -475,7 +476,7 @@ func (app *App) handleUIEvent(ev interface{}) bool { case statusLine: app.addStatusLine(ev.netID, ev.line) default: - panic("unreachable") + return true } return true } diff --git a/go.mod b/go.mod index 22e4cc070574..5400bfe739c4 100644 --- a/go.mod +++ b/go.mod @@ -1,17 +1,29 @@ module git.sr.ht/~taiite/senpai -go 1.16 +go 1.18 require ( git.sr.ht/~emersion/go-scfg v0.0.0-20201019143924-142a8aa629fc github.com/delthas/go-libnp v0.0.0-20221222161248-0e45ece1f878 github.com/delthas/go-localeinfo v0.0.0-20221116001557-686a1e185118 github.com/gdamore/tcell/v2 v2.6.1-0.20230327043120-47ec3a77754f - github.com/mattn/go-runewidth v0.0.14 - golang.org/x/net v0.0.0-20220722155237-a158d28d115b - golang.org/x/term v0.5.0 + github.com/mattn/go-runewidth v0.0.15 + golang.org/x/net v0.6.0 golang.org/x/time v0.0.0-20210611083556-38a9dc6acbc6 mvdan.cc/xurls/v2 v2.3.0 ) -replace github.com/gdamore/tcell/v2 => github.com/delthas/tcell/v2 v2.4.1-0.20230710100648-1489e78d90fb +require ( + git.sr.ht/~rockorager/vaxis v0.2.5 // indirect + github.com/godbus/dbus/v5 v5.1.0 // indirect + github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect + github.com/mattn/go-sixel v0.0.5 // indirect + github.com/rivo/uniseg v0.4.4 // indirect + github.com/soniakeys/quant v1.0.0 // indirect + golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect + golang.org/x/image v0.13.0 // indirect + golang.org/x/sys v0.13.0 // indirect + golang.org/x/term v0.13.0 // indirect +) + +replace github.com/gdamore/tcell/v2 => git.sr.ht/~rockorager/vaxis-tcell v0.2.5 diff --git a/go.sum b/go.sum index af42d207d8e7..bb4250333973 100644 --- a/go.sum +++ b/go.sum @@ -1,15 +1,15 @@ git.sr.ht/~emersion/go-scfg v0.0.0-20201019143924-142a8aa629fc h1:51BD67xFX+bozd3ZRuOUfalrhx4/nQSh6A9lI08rYOk= git.sr.ht/~emersion/go-scfg v0.0.0-20201019143924-142a8aa629fc/go.mod h1:t+Ww6SR24yYnXzEWiNlOY0AFo5E9B73X++10lrSpp4U= +git.sr.ht/~rockorager/vaxis v0.2.5 h1:wNg8bR3xTl3rKx3zVkOjqU+RBHNNsjQtZd4BRfDBNg8= +git.sr.ht/~rockorager/vaxis v0.2.5/go.mod h1:NbdpZvO5yxItiLbmMjpNXQT/oMb+cBZFpCmnlcbPPlA= +git.sr.ht/~rockorager/vaxis-tcell v0.2.5 h1:vAa0QqUfkg9Y3RQ/9Mo5NXRX2bXPsSPDPM13opHwjWE= +git.sr.ht/~rockorager/vaxis-tcell v0.2.5/go.mod h1:v9zOOgj1+0c2sEYqu+4nkG+Cb+8q6mdIO+jIjbMfdgM= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/delthas/go-libnp v0.0.0-20221222161248-0e45ece1f878 h1:v8W8eW7eb2bHFXBA80UKcoe0TvEu46NlTHSDRvgAbMU= github.com/delthas/go-libnp v0.0.0-20221222161248-0e45ece1f878/go.mod h1:aGVXnhWpDlt5U4SphG97o1gszctZKvBTXy320E8Buw4= github.com/delthas/go-localeinfo v0.0.0-20221116001557-686a1e185118 h1:Xzf9ra1QRJXD62gwudjI2iBq7x9CusvHd83Dg2OnUmE= github.com/delthas/go-localeinfo v0.0.0-20221116001557-686a1e185118/go.mod h1:sG54BxlyQgIskYURLrg7mvhoGBe0Qq12DNtYRALwNa4= -github.com/delthas/tcell/v2 v2.4.1-0.20230710100648-1489e78d90fb h1:x0hrYPzXpmn3L/4QnW0UXJnHX9oz0OcZNcsSgregusw= -github.com/delthas/tcell/v2 v2.4.1-0.20230710100648-1489e78d90fb/go.mod h1:be9omFATkdr0D9qewWW3d+MEvl5dha+Etb5y65J2H8Y= -github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko= -github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= @@ -17,48 +17,33 @@ github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3 github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= -github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= -github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= -github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= +github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-sixel v0.0.5 h1:55w2FR5ncuhKhXrM5ly1eiqMQfZsnAHIpYNGZX03Cv8= +github.com/mattn/go-sixel v0.0.5/go.mod h1:h2Sss+DiUEHy0pUqcIB6PFXo5Cy8sTQEFr3a9/5ZLNw= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.4.3 h1:utMvzDsuh3suAEnhH0RdHmoPbU648o6CvXxTx4SBMOw= -github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= +github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b h1:PxfKdU9lEEDYjdIzOtC4qFWgkU2rGHdKlKowJSMN9h0= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +github.com/soniakeys/quant v1.0.0 h1:N1um9ktjbkZVcywBVAAYpZYSHxEfJGzshHCxx/DaI0Y= +github.com/soniakeys/quant v1.0.0/go.mod h1:HI1k023QuVbD4H8i9YdfZP2munIHU4QpjsImz6Y6zds= +github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY= +golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI= +golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo= +golang.org/x/image v0.13.0 h1:3cge/F/QTkNLauhf2QoE9zp+7sr+ZcL4HnoZmdwg9sg= +golang.org/x/image v0.13.0/go.mod h1:6mmbMOeV28HuMTgA6OSRkdXKYw/t5W9Uwn2Yv1r3Yxk= +golang.org/x/net v0.6.0 h1:L4ZwwTvKW9gr0ZMS1yrHD9GZhIuVjOBBnaKH+SPQK0Q= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= +golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= golang.org/x/time v0.0.0-20210611083556-38a9dc6acbc6 h1:Vv0JUPWTyeqUq42B2WJ1FeIDjjvGKoA2Ss+Ts0lAVbs= golang.org/x/time v0.0.0-20210611083556-38a9dc6acbc6/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= mvdan.cc/xurls/v2 v2.3.0 h1:59Olnbt67UKpxF1EwVBopJvkSUBmgtb468E4GVWIZ1I= mvdan.cc/xurls/v2 v2.3.0/go.mod h1:AjuTy7gEiUArFMjgBBDU4SMxlfUYsRokpJQgNWOt3e4= -- 2.42.0
Signed-off-by: Tim Culverhouse <tim@timculverhouse.com> --- v2: no change app.go | 18 ++++++++++++++---- go.mod | 2 +- ui/ui.go | 26 ++++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 5 deletions(-) diff --git a/app.go b/app.go index 49f73da5791c..10a1b02ae502 100644 --- a/app.go +++ b/app.go @@ -13,6 +13,7 @@ import ( "unicode" "unicode/utf8" + "git.sr.ht/~rockorager/vaxis" "git.sr.ht/~taiite/senpai/irc" "git.sr.ht/~taiite/senpai/ui" "github.com/gdamore/tcell/v2" @@ -504,16 +505,21 @@ func (app *App) handleMouseEvent(ev *tcell.EventMouse) { } } if ev.Buttons()&tcell.ButtonPrimary != 0 { - if x < app.win.ChannelWidth() { + switch { + case app.win.ChannelColClicked(): + app.win.ResizeChannelCol(x + 1) + case x == app.win.ChannelWidth()-1: + app.win.ClickChannelCol(true) + case x < app.win.ChannelWidth(): app.win.ClickBuffer(y + app.win.ChannelOffset()) - } else if app.win.ChannelWidth() == 0 && y == h-1 { + case app.win.ChannelWidth() == 0 && y == h-1: app.win.ClickBuffer(app.win.HorizontalBufferOffset(x)) - } else if x > w-app.win.MemberWidth() && y >= 2 { + case x > w-app.win.MemberWidth() && y >= 2: app.win.ClickMember(y - 2 + app.win.MemberOffset()) } } if ev.Buttons() == 0 { - if x < app.win.ChannelWidth() { + if x < app.win.ChannelWidth()-1 { if i := y + app.win.ChannelOffset(); i == app.win.ClickedBuffer() { app.win.GoToBufferNo(i) } @@ -542,6 +548,10 @@ func (app *App) handleMouseEvent(ev *tcell.EventMouse) { } app.win.ClickBuffer(-1) app.win.ClickMember(-1) + app.win.ClickChannelCol(false) + if x == app.win.ChannelWidth()-1 { + app.win.SetMouseShape(vaxis.MouseShapeResizeHorizontal) + } } } diff --git a/go.mod b/go.mod index 5400bfe739c4..96c562265f2c 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,7 @@ go 1.18 require ( git.sr.ht/~emersion/go-scfg v0.0.0-20201019143924-142a8aa629fc + git.sr.ht/~rockorager/vaxis v0.2.5 github.com/delthas/go-libnp v0.0.0-20221222161248-0e45ece1f878 github.com/delthas/go-localeinfo v0.0.0-20221116001557-686a1e185118 github.com/gdamore/tcell/v2 v2.6.1-0.20230327043120-47ec3a77754f @@ -14,7 +15,6 @@ require ( ) require ( - git.sr.ht/~rockorager/vaxis v0.2.5 // indirect github.com/godbus/dbus/v5 v5.1.0 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/mattn/go-sixel v0.0.5 // indirect diff --git a/ui/ui.go b/ui/ui.go index fa72fb0a690f..cd0fdc613c42 100644 --- a/ui/ui.go +++ b/ui/ui.go @@ -6,6 +6,7 @@ import ( "sync/atomic" "time" + "git.sr.ht/~rockorager/vaxis" "git.sr.ht/~taiite/senpai/irc" "github.com/gdamore/tcell/v2" ) @@ -48,6 +49,8 @@ type UI struct { channelWidth int memberWidth int + + channelColClicked bool } func New(config Config) (ui *UI, err error) { @@ -153,6 +156,25 @@ func (ui *UI) ClickBuffer(i int) { } } +func (ui *UI) ClickChannelCol(v bool) { + ui.channelColClicked = v + switch v { + case true: + ui.screen.Vaxis().SetMouseShape(vaxis.MouseShapeResizeHorizontal) + default: + ui.screen.Vaxis().SetMouseShape(vaxis.MouseShapeDefault) + } +} + +func (ui *UI) ChannelColClicked() bool { + return ui.channelColClicked +} + +func (ui *UI) ResizeChannelCol(x int) { + ui.channelWidth = x + ui.Resize() +} + func (ui *UI) GoToBufferNo(i int) { if ui.bs.To(i) { ui.memberOffset = 0 @@ -362,6 +384,10 @@ func (ui *UI) SetTitle(title string) { ui.screen.SetTitle(title) } +func (ui *UI) SetMouseShape(shape vaxis.MouseShape) { + ui.screen.Vaxis().SetMouseShape(shape) +} + // InputContent result must not be modified. func (ui *UI) InputContent() []rune { return ui.e.Content() -- 2.42.0