Buttons 4 and 5.
diff --git a/src/cmd/acme/acme.c b/src/cmd/acme/acme.c
index 8d0413f..7913eb1 100644
--- a/src/cmd/acme/acme.c
+++ b/src/cmd/acme/acme.c
@@ -536,6 +536,18 @@
 				}
 				goto Continue;
 			}
+			/* scroll buttons, wheels, etc. */
+			if(t->what==Body && w != nil && (m.buttons & (8|16))){
+				if(m.buttons & 8)
+					but = Kscrolloneup;
+				else
+					but = Kscrollonedown;
+				winlock(w, 'M');
+				t->eq0 = ~0;
+				texttype(t, but);
+				winunlock(w);
+				goto Continue;
+			}
 			if(ptinrect(m.xy, t->scrollr)){
 				if(but){
 					if(t->what == Columntag)
diff --git a/src/cmd/acme/dat.h b/src/cmd/acme/dat.h
index 789ce1c..fe4b060 100644
--- a/src/cmd/acme/dat.h
+++ b/src/cmd/acme/dat.h
@@ -529,7 +529,12 @@
 int			erroutfd;
 int			messagesize;		/* negotiated in 9P version setup */
 int			globalautoindent;
-int			nodotfiles;
+
+enum
+{
+	Kscrolloneup		= KF|0x20,
+	Kscrollonedown	= KF|0x21,
+};
 
 Channel	*ckeyboard;	/* chan(Rune)[10] */
 Channel	*cplumb;		/* chan(Plumbmsg*) */
diff --git a/src/cmd/acme/text.c b/src/cmd/acme/text.c
index 37613d8..a69b46f 100644
--- a/src/cmd/acme/text.c
+++ b/src/cmd/acme/text.c
@@ -224,8 +224,6 @@
 		dbuf = nil;
 		while((n=dirread(fd, &dbuf)) > 0){
 			for(i=0; i<n; i++){
-				if(nodotfiles && dbuf[i].name[0] == '.')
-					continue;
 				dl = emalloc(sizeof(Dirlist));
 				j = strlen(dbuf[i].name);
 				tmp = emalloc(j+1+1);
@@ -660,6 +658,9 @@
 	case Kdown:
 		n = t->fr.maxlines/3;
 		goto case_Down;
+	case Kscrollonedown:
+		n = 1;
+		goto case_Down;
 	case Kpgdown:
 		n = 2*t->fr.maxlines/3;
 	case_Down:
@@ -669,6 +670,9 @@
 	case Kup:
 		n = t->fr.maxlines/3;
 		goto case_Up;
+	case Kscrolloneup:
+		n = 2;	/* feels like this should be n=1, but that does nothing */
+		goto case_Up;
 	case Kpgup:
 		n = 2*t->fr.maxlines/3;
 	case_Up: