this repo has no description
13
fork

Configure Feed

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

widgets(terminal): refactor CUD and CR

+50 -21
+24
src/widgets/terminal/Screen.zig
··· 321 321 self.cursor.col = self.cursor.col -| n; 322 322 } 323 323 324 + pub fn cursorDown(self: *Screen, n: usize) void { 325 + self.cursor.pending_wrap = false; 326 + if (self.withinScrollingRegion()) 327 + self.cursor.row = @min( 328 + self.scrolling_region.bottom, 329 + self.cursor.row + n, 330 + ) 331 + else 332 + self.cursor.row = @min( 333 + self.height -| 1, 334 + self.cursor.row + n, 335 + ); 336 + } 337 + 324 338 pub fn eraseRight(self: *Screen) void { 325 339 self.cursor.pending_wrap = false; 326 340 const end = (self.cursor.row * self.width) + (self.width); ··· 381 395 } 382 396 } 383 397 } 398 + 399 + pub fn carriageReturn(self: *Screen) void { 400 + self.cursor.pending_wrap = false; 401 + self.cursor.col = if (self.mode.origin) 402 + self.scrolling_region.left 403 + else if (self.cursor.col >= self.scrolling_region.left) 404 + self.scrolling_region.left 405 + else 406 + 0; 407 + }
+26 -21
src/widgets/terminal/Terminal.zig
··· 258 258 .ss3 => |ss3| std.log.err("unhandled ss3: {c}", .{ss3}), 259 259 .csi => |seq| { 260 260 switch (seq.final) { 261 + // Cursor up 261 262 'A', 'k' => { 263 + self.back_screen.cursor.pending_wrap = false; 262 264 var iter = seq.iterator(u16); 263 265 const delta = iter.next() orelse 1; 264 266 if (self.back_screen.withinScrollingRegion()) ··· 269 271 else 270 272 self.back_screen.cursor.row = self.back_screen.cursor.row -| delta; 271 273 }, 272 - 'B' => { // CUD 274 + // Cursor Down 275 + 'B' => { 273 276 var iter = seq.iterator(u16); 274 277 const delta = iter.next() orelse 1; 275 - if (self.back_screen.withinScrollingRegion()) 276 - self.back_screen.cursor.row = @min( 277 - self.back_screen.scrolling_region.bottom, 278 - self.back_screen.cursor.row + delta, 279 - ) 280 - else 281 - self.back_screen.cursor.row = @min( 282 - self.back_screen.height - 1, 283 - self.back_screen.cursor.row + delta, 284 - ); 278 + self.back_screen.cursorDown(delta); 285 279 }, 280 + // Cursor Right 286 281 'C' => { 287 282 self.back_screen.cursor.pending_wrap = false; 288 283 var iter = seq.iterator(u16); ··· 299 294 self.back_screen.width, 300 295 ); 301 296 }, 297 + // Cursor Left 302 298 'D', 'j' => { 303 299 self.back_screen.cursor.pending_wrap = false; 304 300 var iter = seq.iterator(u16); 305 301 const delta = iter.next() orelse 1; 306 302 self.back_screen.cursorLeft(delta); 307 303 }, 308 - 'H', 'f' => { // CUP 304 + // Cursor Next Line 305 + 'E' => { 306 + var iter = seq.iterator(u16); 307 + const delta = iter.next() orelse 1; 308 + self.back_screen.cursorDown(delta); 309 + self.carriageReturn(); 310 + }, 311 + 'H', 'f' => { 309 312 var iter = seq.iterator(u16); 310 313 const row = iter.next() orelse 1; 311 314 const col = iter.next() orelse 1; ··· 392 395 .BS => self.back_screen.cursorLeft(1), 393 396 .HT => {}, // TODO: HT 394 397 .LF, .VT, .FF => try self.back_screen.index(), 395 - .CR => { 396 - self.back_screen.cursor.pending_wrap = false; 397 - self.back_screen.cursor.col = if (self.mode.origin) 398 - self.back_screen.scrolling_region.left 399 - else if (self.back_screen.cursor.col >= self.back_screen.scrolling_region.left) 400 - self.back_screen.scrolling_region.left 401 - else 402 - 0; 403 - }, 398 + .CR => self.carriageReturn(), 404 399 .SO => {}, // TODO: Charset shift out 405 400 .SI => {}, // TODO: Charset shift in 406 401 else => log.warn("unhandled C0: 0x{x}", .{@intFromEnum(b)}), ··· 440 435 false => {}, 441 436 } 442 437 } 438 + 439 + pub fn carriageReturn(self: *Terminal) void { 440 + self.back_screen.cursor.pending_wrap = false; 441 + self.back_screen.cursor.col = if (self.mode.origin) 442 + self.back_screen.scrolling_region.left 443 + else if (self.back_screen.cursor.col >= self.back_screen.scrolling_region.left) 444 + self.back_screen.scrolling_region.left 445 + else 446 + 0; 447 + }