shithub: patch

ref: 70d650eb94605d73027a80a37c94362f635dc98a
dir: /vdir-tweaks/

View raw version
diff 663d1a8c4432f3cef70466c04699fb6ebaafbc22 uncommitted
--- a/vdir.c
+++ b/vdir.c
@@ -273,7 +273,7 @@
 }
 
 int
-plumbfile(char *path, char *name)
+plumbfile(char *path, char *name, int isdir)
 {
 	char *f;
 	int e;
@@ -280,9 +280,12 @@
 
 	f = smprint("%s/%s", path, name);
 	e = access(f, 0)==0;
-	if(e)
-		plumbsendtext(plumbfd, "vdir", nil, path, name);
-	else{
+	if(e){
+	    if(isdir)
+			plumbsendtext(plumbfd, "vdir", nil, nil, f);
+		else
+			plumbsendtext(plumbfd, "vdir", nil, path, name);
+	}else{
 		alert("Error", "File does not exist anymore", nil, mctl, kctl);
 		loaddirs();
 		redraw();
@@ -588,40 +591,10 @@
 	else if(m.buttons == 0)
 		scrolling = 0;
 
-	if(m.buttons&1){
-		if(scrolling){
-			dy = 1+nlines*((double)(m.xy.y - scrollr.min.y)/Dy(scrollr));
-			scrollup(dy);
-		}
-	}else if(m.buttons&2){
-		if(ptinrect(m.xy, viewr)){
-			n = indexat(m.xy);
-			if(n==-1)
-				return;
-			d = dirs[offset+n];
-			switch(menuhit(2, mctl, &menu2, nil)){
-			case Mdelete:
-				rm(d.name);
-				redraw();
-				break;
-			case Mrename:
-				snprint(buf, sizeof buf, "%s", d.name);
-				if(enter("Rename to", buf, sizeof buf, mctl, kctl, nil)>0){
-					mv(d.name, buf);
-					redraw();
-				}
-				break;
-			}
-		}else if(scrolling){
-			if(nlines<ndirs){
-				offset = scrollclamp((m.xy.y - scrollr.min.y) * ndirs/Dy(scrollr));
-				redraw();
-			}
-		}
-	}if((m.buttons&4) && oldbuttons == 0){
-		if(scrolling){
-			dy = 1+nlines*((double)(m.xy.y - scrollr.min.y)/Dy(scrollr));
-			scrolldown(dy);
+	if(m.buttons&1 && oldbuttons == 0){
+ 		if(scrolling){
+ 			dy = 1+nlines*((double)(m.xy.y - scrollr.min.y)/Dy(scrollr));
+ 			scrollup(dy);
 		}else if(ptinrect(m.xy, homer)){
 			cd(nil);
 			redraw();
@@ -634,8 +607,6 @@
 				cd(buf);
 				redraw();
 			}
-		}else if(ptinrect(m.xy, pathr)){
-			plumbsendtext(plumbfd, "vdir", nil, nil, path);
 		}else if(ptinrect(m.xy, newdirr)){
 			m.xy = cept("Create directory");
 			if(enter("Create directory", buf, sizeof buf, mctl, kctl, nil)>0){
@@ -656,10 +627,47 @@
 			if(d.qid.type & QTDIR){
 				cd(d.name);
 				redraw();
-			}else{
-				if(plumbfile(path, d.name))
-					flash(n);
 			}
+ 		}
+	}else if(m.buttons&2 && oldbuttons == 0){
+ 		if(ptinrect(m.xy, viewr)){
+ 			n = indexat(m.xy);
+ 			if(n==-1)
+ 				return;
+ 			d = dirs[offset+n];
+			menu2.lasthit = 0;
+ 			switch(menuhit(2, mctl, &menu2, nil)){
+ 			case Mdelete:
+				rm(d.name);
+				redraw();
+				break;
+			case Mrename:
+				snprint(buf, sizeof buf, "%s", d.name);
+				if(enter("Rename to", buf, sizeof buf, mctl, kctl, nil)>0){
+					mv(d.name, buf);
+					redraw();
+				}
+				break;
+			}
+		}else if(scrolling){
+			if(nlines<ndirs){
+				offset = scrollclamp((m.xy.y - scrollr.min.y) * ndirs/Dy(scrollr));
+				redraw();
+			}
+		}
+	}if((m.buttons&4) && oldbuttons == 0){
+		if(scrolling){
+			dy = 1+nlines*((double)(m.xy.y - scrollr.min.y)/Dy(scrollr));
+			scrolldown(dy);
+		}else if(ptinrect(m.xy, pathr)){
+			plumbsendtext(plumbfd, "vdirw", nil, nil, path);
+		}else if(ptinrect(m.xy, viewr)){
+			n = indexat(m.xy);
+			if(n==-1)
+				return;
+			d = dirs[offset+n];
+			if(plumbfile(path, d.name, d.qid.type & QTDIR))
+				flash(n);
 		}
 	}else if(m.buttons&8)
 		scrollup(Slowscroll);