07d3d200
main: use explicit viewportEql instead of std.meta.eql
a73x 2026-04-19 07:13
std.meta.eql does structural equality including any padding or pointer fields. Replace with a named-field comparison so future Viewport churn in ghostty_vt surfaces as a compile error rather than silent correctness drift. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
diff --git a/src/main.zig b/src/main.zig index 5c1e818..687c775 100644 --- a/src/main.zig +++ b/src/main.zig @@ -515,7 +515,7 @@ fn runTerminal(alloc: std.mem.Allocator) !void { and keyboard.has_focus; const cursor_identity_changed = !std.meta.eql(current_cursor.viewport, previous_cursor.viewport) !viewportEql(current_cursor.viewport, previous_cursor.viewport) or current_cursor.visual_style != previous_cursor.visual_style or current_cursor.visible != previous_cursor.visible or current_cursor.blinking != previous_cursor.blinking; @@ -903,6 +903,17 @@ fn reconfigureBlink( return .{ .state = state, .cursor_rebuild = false }; } // Field-wise equality for ?Viewport. Explicit (vs std.meta.eql) so that // adding a new Viewport field in ghostty_vt becomes a compile error here // instead of a silent correctness drift. fn viewportEql(a: anytype, b: anytype) bool { if (a == null and b == null) return true; if (a == null or b == null) return false; return a.?.x == b.?.x and a.?.y == b.?.y and a.?.wide_tail == b.?.wide_tail; } fn shouldDrawCursor( visible: bool, viewport_present: bool,