Commit: ff7eb7ae337b13b9bd1a3a3dd803d64cc85d557a
Parent: c59f7f3220bce900dc34675b20d20dc022c7b193
Author: Randy Palamar
Date:   Fri,  8 Nov 2024 12:27:29 -0700
fix two cursor movement bugs shown by pacman
first: '\r' when the cursor is past the end of the line needs to
clear WRAP_NEXT since we don't need to wrap if we have already
moved to the start of the line.
second: ORONE() macro needs to be wrapped in parentheses so that
the c order of operations doesn't break our check by computing the
math on the left side first.
Diffstat:
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/terminal.c b/terminal.c
@@ -842,7 +842,7 @@ handle_csi(Term *t, CSI *csi)
 	i32 ret = parse_csi(&raw, csi);
 	ASSERT(ret != -1);
 
-	#define ORONE(x) (x)? (x) : 1
+	#define ORONE(x) ((x)? (x) : 1)
 
 	iv2 p = t->cursor.pos;
 
@@ -1077,10 +1077,10 @@ push_control(Term *t, s8 *line, u32 cp, Arena a)
 		if (!line->len) result = 1;
 		else            result = handle_escape(t, line, a);
 		break;
-	case '\r': t->cursor.pos.x = 0;                break;
-	case '\n': push_newline(t, t->mode & TM_CRLF); break;
-	case '\t': push_tab(t, 1);                     break;
-	case '\a': /* TODO: ding ding? */              break;
+	case '\r': cursor_move_to(t, t->cursor.pos.y, 0); break;
+	case '\n': push_newline(t, t->mode & TM_CRLF);    break;
+	case '\t': push_tab(t, 1);                        break;
+	case '\a': /* TODO: ding ding? */                 break;
 	case '\b':
 		cursor_move_to(t, t->cursor.pos.y, t->cursor.pos.x - 1);
 		break;