Commit Diff


commit - 0cd1385d9f8a151fa1e42dfbac4d16d35a6056d0
commit + fdddf6f01849a37d70b15581cd3e9713476b40ec
blob - 7f6762adb4f4d3bb7c4b49ddc14f07406ce9a65f
blob + 65647099fcfa4b656c85e3a099c84dc9a38a94e2
--- src/cmd/acme/wind.c
+++ src/cmd/acme/wind.c
@@ -134,10 +134,11 @@ wintaglines(Window *w, Rectangle r)
 
 	/* if tag ends with \n, include empty line at end for typing */
 	n = w->tag.fr.nlines;
-	if(w->tag.file->b.nc > 0)
+	if(w->tag.file->b.nc > 0){
 		bufread(&w->tag.file->b, w->tag.file->b.nc-1, &rune, 1);
-	if(rune == '\n')
-		n++;
+		if(rune == '\n')
+			n++;
+	}
 	if(n == 0)
 		n = 1;
 	return n;
@@ -162,10 +163,8 @@ if(0) fprint(2, "winresize %d %R safe=%d keep=%d h=%d\
 	r1.max.y = min(r.max.y, r1.min.y + w->taglines*font->height);
 	y = r1.max.y;
 	mouseintag = ptinrect(mouse->xy, w->tag.all);
-	if(!safe || !w->tagsafe || !eqrect(w->tag.all, r1)){
-
+	if(!safe || !w->tagsafe || !eqrect(w->tag.all, r1))
 		w->taglines = wintaglines(w, r);
-	}
 /* END TAG */
 
 	r1 = r;
@@ -182,9 +181,16 @@ if(0) fprint(2, "=> %R (%R)\n", w->tag.all, w->tag.fr.
 		windrawbutton(w);
 		w->tagsafe = TRUE;
 /* TAG */
+		/* If mouse is in tag, pull up as tag closes. */
 		if(mouseintag && !ptinrect(mouse->xy, w->tag.all)){
 			p = mouse->xy;
 			p.y = w->tag.all.max.y-3;
+			moveto(mousectl, p);
+		}
+		/* If mouse is in body, push down as tag expands. */
+		if(!mouseintag && ptinrect(mouse->xy, w->tag.all)){
+			p = mouse->xy;
+			p.y = w->tag.all.max.y+3;
 			moveto(mousectl, p);
 		}
 /* END TAG */