浏览代码

fix altscreen swap detection

Jan Klemkow 6 年之前
父节点
当前提交
ece8a533fc
共有 1 个文件被更改,包括 13 次插入13 次删除
  1. 13 13
      scroll.c

+ 13 - 13
scroll.c

@@ -196,13 +196,13 @@ isaltscreen(char c)
 		if (c == '\033')
 			state = BREK;
 		break;
-	case BREK: break;
+	case BREK:
 		if (c == '[')
 			state = ESC;
 		else
 			state = CHAR;
 		break;
-	case ESC: break;
+	case ESC:
 		buf[i++] = c;
 		if (i == sizeof buf) {
 			/* TODO: find a better way to handle this situation */
@@ -373,17 +373,17 @@ main(int argc, char *argv[])
 			ssize_t n = read(mfd, &c, 1);
 			if (n == -1 && errno != EINTR)
 				die("read:");
-			if (isaltscreen(c))
-				continue;
-			if (c == '\r') {
-				addline(buf, pos);
-				memset(buf, 0, size);
-				pos = 0;
-			}
-			buf[pos++] = c;
-			if (pos == size) {
-				size *= 2;
-				buf = earealloc(buf, size);
+			if (!isaltscreen(c)) {
+				if (c == '\r') {
+					addline(buf, pos);
+					memset(buf, 0, size);
+					pos = 0;
+				}
+				buf[pos++] = c;
+				if (pos == size) {
+					size *= 2;
+					buf = earealloc(buf, size);
+				}
 			}
 			if (write(STDOUT_FILENO, &c, 1) == -1)
 				die("write:");