diff options
author | cinap_lenrek <cinap_lenrek@rei2.9hal> | 2012-02-10 01:40:13 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@rei2.9hal> | 2012-02-10 01:40:13 +0100 |
commit | 0c22c05a968645722e870b2254111b93f02baf83 (patch) | |
tree | d534bc96546d0ae910655f1ef059e3707ebf15d8 | |
parent | c00f5f5192582bdcbb19bd56d49e024c334c94ca (diff) |
sam: chording
-rw-r--r-- | sys/src/cmd/samterm/flayer.c | 19 | ||||
-rw-r--r-- | sys/src/cmd/samterm/main.c | 23 |
2 files changed, 29 insertions, 13 deletions
diff --git a/sys/src/cmd/samterm/flayer.c b/sys/src/cmd/samterm/flayer.c index 4e5797c3a..c61a531f7 100644 --- a/sys/src/cmd/samterm/flayer.c +++ b/sys/src/cmd/samterm/flayer.c @@ -252,21 +252,18 @@ fldelete(Flayer *l, long p0, long p1) 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 diff --git a/sys/src/cmd/samterm/main.c b/sys/src/cmd/samterm/main.c index 1548a7d4a..315b69d80 100644 --- a/sys/src/cmd/samterm/main.c +++ b/sys/src/cmd/samterm/main.c @@ -28,7 +28,7 @@ int autoindent; 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 @@ threadmain(int argc, char *argv[]) startnewfile(Tstartcmdfile, &cmd); got = 0; + chord = 0; for(;;got = waitforio()){ if(hasunlocked && RESIZED()) resize(); @@ -77,7 +78,23 @@ threadmain(int argc, char *argv[]) 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 @@ threadmain(int argc, char *argv[]) t->lock++; }else if(t!=&cmd) outcmd(); + if(mousep->buttons&1) + chord = mousep->buttons; } } }else if((mousep->buttons&2) && which){ |