diff --git a/src/syncterm/menu.c b/src/syncterm/menu.c
index 9cefc78cb8bf32af2fe34e52491a43edc9f55b67..1ea087ea63f07f5617dd290559c623abb7defece 100644
--- a/src/syncterm/menu.c
+++ b/src/syncterm/menu.c
@@ -34,10 +34,16 @@ void viewscroll(void)
 		puttext(term.x-1,term.y-1,term.x+term.width-2,term.y+term.height-2,scrollback+(term.width*2*top));
 		key=getch();
 		switch(key) {
+			case 0xff:
 			case 0:
-				switch(getch()<<8) {
+				switch(key|getch()<<8) {
 					case CIO_KEY_MOUSE:
 						getmouse(&mevent);
+						switch(mevent.event) {
+							case CIOLIB_BUTTON_1_DRAG_START:
+								mousedrag(scrollback);
+								break;
+						}
 						break;
 					case CIO_KEY_UP:
 						top--;
diff --git a/src/syncterm/term.h b/src/syncterm/term.h
index ce607467c5b3767d37e9a7abd5283bfbedca8b06..df2480e209ee649dbee2bc1d0b6b6a4529efd092 100644
--- a/src/syncterm/term.h
+++ b/src/syncterm/term.h
@@ -12,5 +12,6 @@ extern struct terminal term;
 extern int backlines;
 
 void doterm(void);
+void mousedrag(unsigned char *scrollback);
 
 #endif