--- /n/sources/plan9/sys/src/cmd/samterm/scroll.c Wed Jan 13 17:22:35 2010 +++ /sys/src/cmd/samterm/scroll.c Sat Feb 13 21:38:30 2021 @@ -120,7 +120,7 @@ draw(scrback, Rect(0,0,Dx(l->scroll), Dy(l->scroll)), l->f.b, nil, l->scroll.min); do{ oin = in; - in = abs(x-mousep->xy.x)<=FLSCROLLWID/2; + in = (but>3) ||(but==2) || abs(x-mousep->xy.x)<=FLSCROLLWID/2; if(oin && !in) scrunmark(l, r); if(in){ @@ -131,9 +131,7 @@ my = s.min.y; if(my >= s.max.y) my = s.max.y; - if(!eqpt(mousep->xy, Pt(x, my))) - moveto(mousectl, Pt(x, my)); - if(but == 1){ + if(but == 1 || but == 4){ p0 = l->origin-frcharofpt(&l->f, Pt(s.max.x, my)); rt = scrpos(l->scroll, p0, p0+l->f.nchars, tot); y = rt.min.y; @@ -141,7 +139,7 @@ y = my; if(y > s.max.y-2) y = s.max.y-2; - }else if(but == 3){ + }else if(but == 3 || but == 5){ p0 = l->origin+frcharofpt(&l->f, Pt(s.max.x, my)); rt = scrpos(l->scroll, p0, p0+l->f.nchars, tot); y = rt.min.y; @@ -152,19 +150,21 @@ scrmark(l, r); } } - }while(button(but)); + }while(but<3 && button(but)); if(in){ h = s.max.y-s.min.y; scrunmark(l, r); p0 = 0; - if(but == 1) + if(but == 1 || but == 4){ + but = 1; p0 = (long)(my-s.min.y)/l->f.font->height+1; - else if(but == 2){ + }else if(but == 2){ if(tot > 1024L*1024L) p0 = ((tot>>10)*(y-s.min.y)/h)<<10; else p0 = tot*(y-s.min.y)/h; - }else if(but == 3){ + }else if(but == 3 || but == 5){ + but = 3; p0 = l->origin+frcharofpt(&l->f, Pt(s.max.x, my)); if(p0 > tot) p0 = tot; --- /n/sources/plan9/sys/src/cmd/samterm/main.c Mon Apr 29 22:39:33 2013 +++ /sys/src/cmd/samterm/main.c Sat Feb 13 16:39:13 2021 @@ -104,6 +104,10 @@ scroll(which, 3); else menu3hit(); + }else if((mousep->buttons&8)){ + scroll(which, 4); + }else if((mousep->buttons&16)){ + scroll(which, 5); } mouseunblock(); } @@ -432,6 +436,7 @@ #define PAGEUP Kpgup #define RIGHTARROW Kright #define SCROLLKEY Kdown +#define Kstx 0x02 int nontypingkey(int c) @@ -447,6 +452,7 @@ case PAGEUP: case RIGHTARROW: case SCROLLKEY: + case Kstx: return 1; } return 0; @@ -604,6 +610,19 @@ } } } + }else if((mousep->buttons&8)){ + scroll(which, 4); + }else if((mousep->buttons&16)){ + scroll(which, 5); + }else if(c == Kstx){ + t = &cmd; + for(l=t->l; l->textfn==0; l++) + ; + current(l); + flushtyping(0); + a = t->rasp.nrunes; + flsetselect(l, a, a); + center(l, a); }else{ if(c==ESC && typeesc>=0){ l->p0 = typeesc;