diff --git a/src/terminal/Terminal.zig b/src/terminal/Terminal.zig index f7f50de7f..83736c55f 100644 --- a/src/terminal/Terminal.zig +++ b/src/terminal/Terminal.zig @@ -1655,7 +1655,7 @@ pub fn insertBlanks(self: *Terminal, count: usize) void { // Determine our indexes. const start = self.screen.cursor.x; - const pivot = self.screen.cursor.x + count; + const pivot = @min(self.screen.cursor.x + count, right_limit); // This is the number of spaces we have left to shift existing data. // If count is bigger than the available space left after the cursor, @@ -4289,6 +4289,25 @@ test "Terminal: insertBlanks outside left/right scroll region" { } } +test "Terminal: insertBlanks left/right scroll region large count" { + const alloc = testing.allocator; + var t = try init(alloc, 10, 10); + defer t.deinit(alloc); + + t.modes.set(.origin, true); + t.modes.set(.enable_left_and_right_margin, true); + t.setLeftAndRightMargin(3, 5); + t.setCursorPos(1, 1); + t.insertBlanks(140); + try t.print('X'); + + { + var str = try t.plainString(testing.allocator); + defer testing.allocator.free(str); + try testing.expectEqualStrings(" X", str); + } +} + test "Terminal: insert mode with space" { const alloc = testing.allocator; var t = try init(alloc, 10, 2);