commit - 863f36263154c5b9fe6ae67f0f1f67719d9dd242
commit + 3d991901316747fa00d754b2e93f71a41adb9d33
blob - 1e2bdfd1fd9b06d943022b86898d4b0f2014786a
blob + 9ac91c8f28600aad0c66a7b1af2ad09b150f62d2
--- NOTES
+++ NOTES
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
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))
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)) {
plumb(q0, q1);
break;
*/
+ case 8:
+ scrollup(3);
+ break;
+ case 16:
+ scrolldown(3);
+ break;
}
}
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
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){