diff --git a/src/ui/menu_proc.cpp b/src/ui/menu_proc.cpp
index 012068d0f..5539df2a9 100644
--- a/src/ui/menu_proc.cpp
+++ b/src/ui/menu_proc.cpp
@@ -1185,12 +1185,21 @@ local void MenuHandleMouseMove(int x,int y)
 				char* s;
 
 				j = strtol(mi->d.input.buffer, &s, 0);
-				if (!*s || s[0]=='~' ) {
-				    mi->d.input.nch =
-					sprintf(mi->d.input.buffer, "%d~!_",
-						j + x - ox
-						+ (y - oy)*1000);
-				    redraw_flag = 1;
+				if ((!*s || s[0]=='~') && (j!=0 || *mi->d.input.buffer=='0') ) {
+				    int num;
+				    num = j + x - ox + (y - oy)*1000;
+				    if (num < 0) {
+					num = 0;
+				    }
+				    if ((mi->d.input.maxch == 3 && num < 1000) ||
+					(mi->d.input.maxch == 4 && num < 10000) ||
+					(mi->d.input.maxch == 5 && num < 100000) ||
+					(mi->d.input.maxch == 6 && num < 1000000) ||
+					(mi->d.input.maxch >= 7)) {
+					mi->d.input.nch =
+					    sprintf(mi->d.input.buffer, "%d~!_", num) - 3;
+					redraw_flag = 1;
+				    }
 				}
 			    }
 			}