Really cool.
It’s surprisingly pleasant to use (with a Mac laptop, a Magic Trackpad or aMagic Mouse)commit d782c880d4ca30fcacddfbab298dad82fe8277c3Author: marius a. eriksen <marius@grailbio.com>Date: Sat Feb 25 21:48:50 2017 -0800devdraw/acme: support for inertial scrolling on macOS.diff --git a/src/cmd/acme/acme.c b/src/cmd/acme/acme.cindex b471a29..d84322f 100644--- a/src/cmd/acme/acme.c+++ b/src/cmd/acme/acme.c@@ -614,6 +614,14 @@ mousethread(void *v)}/* scroll buttons, wheels, etc. */if(w != nil && (m.buttons & (8|16))){+ if((m.buttons >> 2) != 0){+ winlock(w, 'M');+ t->eq0 = ~0;+ xtextscroll(t, m.buttons>>2);+ winunlock(w);+ goto Continue;+ }+if(m.buttons & 8)but = Kscrolloneup;elsediff --git a/src/cmd/acme/text.c b/src/cmd/acme/text.cindex 7634d92..72b29c2 100644--- a/src/cmd/acme/text.c+++ b/src/cmd/acme/text.c@@ -653,6 +653,35 @@ textcomplete(Text *t)return rp;}+void+xtextscroll(Text *t, int n)+{+ uint q0;+++ if(n == 0)+ return;++ if(t->what == Tag){+ if(n<0)+ texttype(t, Kscrolloneup);+ else+ texttype(t, Kscrollonedown);+ return;+ }++ fprint(2, "n=%d\n", n);++ if(n < 0){+ n = -n;+ q0 = t->org+frcharofpt(&t->fr, Pt(t->fr.r.min.x, t->fr.r.min.y+n*t->fr.font->height));+ textsetorigin(t, q0, TRUE);+ }else{+ q0 = textbacknl(t, t->org, n);+ textsetorigin(t, q0, TRUE);+ }+}+voidtexttype(Text *t, Rune r){diff --git a/src/cmd/devdraw/cocoa-screen.m b/src/cmd/devdraw/cocoa-screen.mindex 100cdd5..b83a3ff 100644--- a/src/cmd/devdraw/cocoa-screen.m+++ b/src/cmd/devdraw/cocoa-screen.m@@ -1044,7 +1044,8 @@ static voidgetmouse(NSEvent *e){float d;- int b, m;+ int b, m, i;+ static int accum;if([WIN isKeyWindow] == 0)return;@@ -1080,11 +1081,22 @@ getmouse(NSEvent *e)#elsed = [e deltaY];#endif+++// fprint(2, "delta: %d\n", (short)d);++ //fprint(2, "d: %f %d\n", d, [e hasPreciseScrollingDeltas]);++ if((short)d==0)+ return;+if(d>0)in.mscroll = 8;elseif(d<0)in.mscroll = 16;++ in.mscroll |= ((short)d)<<1;break;case NSMouseMoved: