ref: b8a33aa1cd627994bcca80672f6c879b5032df26
parent: d091e9f0123b86ddabfd76d3637f49486b0b16df
author: cinap_lenrek <cinap_lenrek@rei2.9hal>
date: Thu Feb 9 20:40:13 EST 2012
sam: chording
--- a/sys/src/cmd/samterm/flayer.c
+++ b/sys/src/cmd/samterm/flayer.c
@@ -252,21 +252,18 @@
int
flselect(Flayer *l)
{- int ret;
if(l->visible!=All)
flupfront(l);
- frselect(&l->f, mousectl);
- ret = 0;
- if(l->f.p0==l->f.p1){- if(mousep->msec-l->click<Clicktime && l->f.p0+l->origin==l->p0){- ret = 1;
+ if(l->f.p0==l->f.p1)
+ if(mousep->msec-l->click<Clicktime && l->f.p0+l->origin==l->p0 &&
+ l->f.p0==frcharofpt(&l->f, mousep->xy)){l->click = 0;
- }else
- l->click = mousep->msec;
- }else
- l->click = 0;
+ return 1;
+ }
+ l->click = mousep->msec;
+ frselect(&l->f, mousectl);
l->p0 = l->f.p0+l->origin, l->p1 = l->f.p1+l->origin;
- return ret;
+ return 0;
}
void
--- a/sys/src/cmd/samterm/main.c
+++ b/sys/src/cmd/samterm/main.c
@@ -28,7 +28,7 @@
void
threadmain(int argc, char *argv[])
{- int i, got, scr;
+ int i, got, scr, chord;
Text *t;
Rectangle r;
Flayer *nwhich;
@@ -51,6 +51,7 @@
startnewfile(Tstartcmdfile, &cmd);
got = 0;
+ chord = 0;
for(;;got = waitforio()){if(hasunlocked && RESIZED())
resize();
@@ -77,7 +78,23 @@
scr = which && ptinrect(mousep->xy, which->scroll);
if(mousep->buttons)
flushtyping(1);
- if(mousep->buttons&1){+ if((mousep->buttons&1) == 0)
+ chord = 0;
+ if(chord && which && which==nwhich){+ chord |= mousep->buttons;
+ t = (Text *)which->user1;
+ if(!t->lock){+ int w = which-t->l;
+ if(chord&2){+ cut(t, w, 1, 1);
+ chord &= ~2;
+ }
+ if(chord&4){+ paste(t, w);
+ chord &= ~4;
+ }
+ }
+ } else if(mousep->buttons&1){ if(nwhich){if(nwhich!=which)
current(nwhich);
@@ -90,6 +107,8 @@
t->lock++;
}else if(t!=&cmd)
outcmd();
+ if(mousep->buttons&1)
+ chord = mousep->buttons;
}
}
}else if((mousep->buttons&2) && which){--
⑨