git: 9front

Download patch

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){
--