From a43c63111fcd0ef4116ebf1e45f64aa111132300 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sun, 24 Jul 2022 09:36:21 -0700 Subject: [PATCH] count = 0 implies 1 for all cursor movement, fixes one line of vttest --- src/terminal/Terminal.zig | 22 ++++++++++++++++++---- test/cases/vttest/1_1.sh.ghostty.png | Bin 10493 -> 10486 bytes test/cases/vttest/1_2.sh.ghostty.png | Bin 10749 -> 10745 bytes 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/terminal/Terminal.zig b/src/terminal/Terminal.zig index 71ee8f37f..2c6cd940e 100644 --- a/src/terminal/Terminal.zig +++ b/src/terminal/Terminal.zig @@ -417,6 +417,9 @@ pub fn eraseDisplay( .complete => { const all = self.screen.getVisible(); std.mem.set(Screen.Cell, all, self.screen.cursor.pen); + + // Unsets pending wrap state + self.screen.cursor.pending_wrap = false; }, .below => { @@ -438,6 +441,9 @@ pub fn eraseDisplay( cell.char = 0; } } + + // Unsets pending wrap state + self.screen.cursor.pending_wrap = false; }, .above => { @@ -459,6 +465,9 @@ pub fn eraseDisplay( cell.char = 0; } } + + // Unsets pending wrap state + self.screen.cursor.pending_wrap = false; }, else => { @@ -483,6 +492,9 @@ pub fn eraseLine( .left => { const row = self.screen.getRow(self.screen.cursor.y); std.mem.set(Screen.Cell, row[0..self.screen.cursor.x], self.screen.cursor.pen); + + // Unsets pending wrap state + self.screen.cursor.pending_wrap = false; }, .complete => { @@ -558,7 +570,8 @@ pub fn cursorRight(self: *Terminal, count: usize) void { const tracy = trace(@src()); defer tracy.end(); - self.screen.cursor.x += count; + self.screen.cursor.x += if (count == 0) 1 else count; + self.screen.cursor.pending_wrap = false; if (self.screen.cursor.x >= self.cols) { self.screen.cursor.x = self.cols - 1; } @@ -572,7 +585,7 @@ pub fn cursorDown(self: *Terminal, count: usize) void { const tracy = trace(@src()); defer tracy.end(); - self.screen.cursor.y += count; + self.screen.cursor.y += if (count == 0) 1 else count; if (self.screen.cursor.y >= self.rows) { self.screen.cursor.y = self.rows - 1; } @@ -586,7 +599,8 @@ pub fn cursorUp(self: *Terminal, count: usize) void { const tracy = trace(@src()); defer tracy.end(); - self.screen.cursor.y -|= count; + self.screen.cursor.y -|= if (count == 0) 1 else count; + self.screen.cursor.pending_wrap = false; } /// Backspace moves the cursor back a column (but not less than 0). @@ -594,7 +608,7 @@ pub fn backspace(self: *Terminal) void { const tracy = trace(@src()); defer tracy.end(); - self.screen.cursor.x -|= 1; + self.cursorLeft(1); } /// Horizontal tab moves the cursor to the next tabstop, clearing diff --git a/test/cases/vttest/1_1.sh.ghostty.png b/test/cases/vttest/1_1.sh.ghostty.png index e1b728f670bff80284853b576eb1a00aad42cc64..eb7a1382db7640bdad454309f975c06b4d08a7a0 100644 GIT binary patch delta 6670 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 diff --git a/test/cases/vttest/1_2.sh.ghostty.png b/test/cases/vttest/1_2.sh.ghostty.png index e7c72d55214c5dc344837fdffae723449bd6a788..2b7af46134413b51043994906284be8326fba3d0 100644 GIT binary patch delta 6733 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 delta 6784 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