Bläddra i källkod

handle carriage0-return correctly

Jan Klemkow 5 år sedan
förälder
incheckning
f0e76e5f8c
1 ändrade filer med 11 tillägg och 8 borttagningar
  1. 11 8
      scroll.c

+ 11 - 8
scroll.c

@@ -179,8 +179,6 @@ skipesc(char c)
 
 	switch (state) {
 	case CHAR:
-		if (c == '\r')
-			return true;
 		if (c == '\033')
 			state = BREK;
 		break;
@@ -493,7 +491,7 @@ main(int argc, char *argv[])
 	if (tcsetattr(STDIN_FILENO, TCSANOW, &new) == -1)
 		die("tcsetattr:");
 
-	size_t size = BUFSIZ, pos = 0;
+	size_t size = BUFSIZ, len = 0, pos = 0;
 	char *buf = calloc(size, sizeof *buf);
 	if (buf == NULL)
 		die("calloc:");
@@ -536,7 +534,7 @@ main(int argc, char *argv[])
 					if (rules[i].event == SCROLL_UP)
 						scrollup(rules[i].lines);
 					if (rules[i].event == SCROLL_DOWN)
-						scrolldown(buf, pos,
+						scrolldown(buf, len,
 						    rules[i].lines);
 					goto out;
 				}
@@ -546,7 +544,7 @@ main(int argc, char *argv[])
 				die("write:");
 
 			if (bottom != TAILQ_FIRST(&head))
-				jumpdown(buf, pos);
+				jumpdown(buf, len);
 		}
  out:
 		if (pfd[1].revents & POLLIN) {
@@ -572,7 +570,7 @@ main(int argc, char *argv[])
 					continue;
 
 				if (*c == '\n') {
-					addline(buf, pos);
+					addline(buf, len);
 					/* only advance bottom if scroll is */
 					/* at the end of the scroll back */
 					if (bottom == NULL ||
@@ -581,11 +579,16 @@ main(int argc, char *argv[])
 						bottom = TAILQ_FIRST(&head);
 
 					memset(buf, 0, size);
-					pos = 0;
+					len = pos = 0;
 					buf[pos++] = '\r';
+				} else if (*c == '\r') {
+					pos = 0;
+					continue;
 				}
 				buf[pos++] = *c;
-				if (pos == size) {
+				if (pos > len)
+					len = pos;
+				if (len == size) {
 					size *= 2;
 					buf = earealloc(buf, size);
 				}