this repo has no description
13
fork

Configure Feed

Select the types of activity you want to include in your feed.

widgets(terminal): handle scrolling_region in CUU, CUD

+19 -10
+1 -4
src/widgets/terminal/Screen.zig
··· 318 318 self.scrolling_region.left, 319 319 ) 320 320 else 321 - self.cursor.col = @max( 322 - self.cursor.col -| n, 323 - 0, 324 - ); 321 + self.cursor.col = self.cursor.col -| n; 325 322 } 326 323 327 324 pub fn eraseRight(self: *Screen) void {
+18 -6
src/widgets/terminal/Terminal.zig
··· 255 255 .ss3 => |ss3| std.log.err("unhandled ss3: {c}", .{ss3}), 256 256 .csi => |seq| { 257 257 switch (seq.final) { 258 - 'A' => { 258 + 'A', 'k' => { 259 259 var iter = seq.iterator(u16); 260 260 const delta = iter.next() orelse 1; 261 - self.back_screen.cursor.row = self.back_screen.cursor.row -| delta; 261 + if (self.back_screen.withinScrollingRegion()) 262 + self.back_screen.cursor.row = @max( 263 + self.back_screen.cursor.row -| delta, 264 + self.back_screen.scrolling_region.top, 265 + ) 266 + else 267 + self.back_screen.cursor.row = self.back_screen.cursor.row -| delta; 262 268 }, 263 269 'B' => { // CUD 264 270 var iter = seq.iterator(u16); 265 271 const delta = iter.next() orelse 1; 266 - self.back_screen.cursor.row = @min( 267 - self.back_screen.height - 1, 268 - self.back_screen.cursor.row + delta, 269 - ); 272 + if (self.back_screen.withinScrollingRegion()) 273 + self.back_screen.cursor.row = @min( 274 + self.back_screen.scrolling_region.bottom, 275 + self.back_screen.cursor.row + delta, 276 + ) 277 + else 278 + self.back_screen.cursor.row = @min( 279 + self.back_screen.height - 1, 280 + self.back_screen.cursor.row + delta, 281 + ); 270 282 }, 271 283 'C' => { 272 284 self.back_screen.cursor.pending_wrap = false;