commit 3d991901316747fa00d754b2e93f71a41adb9d33 from: rsc date: Wed Jun 09 14:54:37 2004 UTC mouse scrolling commit - 863f36263154c5b9fe6ae67f0f1f67719d9dd242 commit + 3d991901316747fa00d754b2e93f71a41adb9d33 blob - 1e2bdfd1fd9b06d943022b86898d4b0f2014786a blob + 9ac91c8f28600aad0c66a7b1af2ad09b150f62d2 --- NOTES +++ NOTES @@ -164,6 +164,31 @@ acme -W spec where spec can be WIDTHxHEIGHT, WIDTHxHEIGHT@XMIN,YMIN 'XMIN YMIN XMAX YMAX' or XMIN,YMIN,XMAX,YMAX. +* Mouse scrolling + +The libraries pass along buttons 4 and 5, so if you have a +scroll mouse and have X configured to send the up/down +events as buttons 4 and 5, acme and 9term will scroll in +response. + +You will likely need to change your X config to enable this. +In my XF86Config-4 I have + +Section "InputDevice" + Identifier "Mouse0" + Driver "mouse" + Option "Buttons" "5" + Option "Emulate3Buttons" "off" + Option "Protocol" "ImPS/2" + Option "ZAxisMapping" "4 5" + Option "Device" "/dev/psaux" +EndSection + +You'll want to find your mouse section (which may have +a different Identifier -- just leave it alone) and edit that. +The "Buttons", "Protocol", "ZAxisMapping", and "Emulate3Buttons" +lines are all important. + * Helping out If you'd like to help out, great! blob - 3dafb38524fa295e202ef54ced147e366bfa6f9d blob + 2827eb866c17301d09b57dd779a8ca5d68dd9406 --- src/cmd/9term/9term.c +++ src/cmd/9term/9term.c @@ -115,6 +115,8 @@ void plumbstart(void); void plumb(uint, uint); void plumbclick(uint*, uint*); uint insert(Rune*, int, uint, int); +void scrolldown(int); +void scrollup(int); #define runemalloc(n) malloc((n)*sizeof(Rune)) #define runerealloc(a, n) realloc(a, (n)*sizeof(Rune)) @@ -519,7 +521,7 @@ mouse(void) but = t.m.buttons; - if(but != 1 && but != 2 && but != 4) + if(but != 1 && but != 2 && but != 4 && but != 8 && but != 16) return; if (ptinrect(t.m.xy, scrollr)) { @@ -558,6 +560,12 @@ mouse(void) plumb(q0, q1); break; */ + case 8: + scrollup(3); + break; + case 16: + scrolldown(3); + break; } } @@ -792,6 +800,20 @@ namecomplete(void) free(path); free(str); return rp; +} + +void +scrollup(int n) +{ + setorigin(backnl(t.org, n), 1); +} + +void +scrolldown(int n) +{ + setorigin(line2q(n), 1); + if(t.qh<=t.org+t.f->nchars) + consread(); } void @@ -804,20 +826,16 @@ key(Rune r) return; switch(r){ case Kpgup: - setorigin(backnl(t.org, t.f->maxlines*2/3), 1); + scrollup(t.f->maxlines*2/3); return; case Kpgdown: - setorigin(line2q(t.f->maxlines*2/3), 1); - if(t.qh<=t.org+t.f->nchars) - consread(); + scrolldown(t.f->maxlines*2/3); return; case Kup: - setorigin(backnl(t.org, t.f->maxlines/3), 1); + scrollup(t.f->maxlines/3); return; case Kdown: - setorigin(line2q(t.f->maxlines/3), 1); - if(t.qh<=t.org+t.f->nchars) - consread(); + scrolldown(t.f->maxlines/3); return; case Kleft: if(t.q0 > 0){