this repo has no description
13
fork

Configure Feed

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

fix: parsing of negative mouse coordinates (required by mode 1016)

authored by

CJ van den Berg and committed by
Tim Culverhouse
cec2f383 fa42ea03

+26 -7
+2 -2
src/Mouse.zig
··· 41 41 drag, 42 42 }; 43 43 44 - col: u16, 45 - row: u16, 44 + col: i16, 45 + row: i16, 46 46 xoffset: u16 = 0, 47 47 yoffset: u16 = 0, 48 48 button: Button,
+24 -5
src/Parser.zig
··· 670 670 /// Parse a param buffer, returning a default value if the param was empty 671 671 inline fn parseParam(comptime T: type, buf: []const u8, default: ?T) ?T { 672 672 if (buf.len == 0) return default; 673 - return std.fmt.parseUnsigned(T, buf, 10) catch return null; 673 + return std.fmt.parseInt(T, buf, 10) catch return null; 674 674 } 675 675 676 676 /// Parse a mouse event ··· 678 678 const null_event: Result = .{ .event = null, .n = input.len }; 679 679 680 680 var button_mask: u16 = undefined; 681 - var px: u16 = undefined; 682 - var py: u16 = undefined; 681 + var px: i16 = undefined; 682 + var py: i16 = undefined; 683 683 var xterm: bool = undefined; 684 684 if (input.len == 3 and (input[2] == 'M') and full_input.len >= 6) { 685 685 xterm = true; ··· 691 691 const delim1 = std.mem.indexOfScalarPos(u8, input, 3, ';') orelse return null_event; 692 692 button_mask = parseParam(u16, input[3..delim1], null) orelse return null_event; 693 693 const delim2 = std.mem.indexOfScalarPos(u8, input, delim1 + 1, ';') orelse return null_event; 694 - px = parseParam(u16, input[delim1 + 1 .. delim2], 1) orelse return null_event; 695 - py = parseParam(u16, input[delim2 + 1 .. input.len - 1], 1) orelse return null_event; 694 + px = parseParam(i16, input[delim1 + 1 .. delim2], 1) orelse return null_event; 695 + py = parseParam(i16, input[delim2 + 1 .. input.len - 1], 1) orelse return null_event; 696 696 } else { 697 697 return null_event; 698 698 } ··· 1237 1237 .event = .{ .mouse = .{ 1238 1238 .col = 0, 1239 1239 .row = 0, 1240 + .button = .none, 1241 + .type = .motion, 1242 + .mods = .{}, 1243 + } }, 1244 + .n = input.len, 1245 + }; 1246 + 1247 + try testing.expectEqual(expected.n, result.n); 1248 + try testing.expectEqual(expected.event, result.event); 1249 + } 1250 + 1251 + test "parse(csi): mouse (negative)" { 1252 + var buf: [1]u8 = undefined; 1253 + const input = "\x1b[<35;-50;-100m"; 1254 + const result = parseCsi(input, &buf); 1255 + const expected: Result = .{ 1256 + .event = .{ .mouse = .{ 1257 + .col = -51, 1258 + .row = -101, 1240 1259 .button = .none, 1241 1260 .type = .motion, 1242 1261 .mods = .{},