diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-07-16 23:28:05 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-07-16 23:29:28 +0300 |
| commit | 4a3302d19a2baa3a33e910e0088c24e780905b90 (patch) | |
| tree | dcaf76fae1c82102d933c9225b17ca7ac5d3a847 /vendor/libghostty-vt/src/terminal/device_status.zig | |
| parent | 550e9f8cc085f428429f5cf2da0bb2dba897e8b8 (diff) | |
chore: update vendored libghostty-vt
refs #276
Diffstat (limited to 'vendor/libghostty-vt/src/terminal/device_status.zig')
| -rw-r--r-- | vendor/libghostty-vt/src/terminal/device_status.zig | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/vendor/libghostty-vt/src/terminal/device_status.zig b/vendor/libghostty-vt/src/terminal/device_status.zig index 42b4bf01..fd1a9b7e 100644 --- a/vendor/libghostty-vt/src/terminal/device_status.zig +++ b/vendor/libghostty-vt/src/terminal/device_status.zig @@ -7,6 +7,32 @@ pub const ColorScheme = lib.Enum(lib.target, &.{ "dark", }); +/// Maximum number of bytes that `encodeColorSchemeReport` will write. +pub const max_color_scheme_report_encode_size = max: { + var result: usize = 0; + for (@typeInfo(ColorScheme).@"enum".fields) |field| { + var discarding: std.Io.Writer.Discarding = .init(&.{}); + encodeColorSchemeReport( + &discarding.writer, + @enumFromInt(field.value), + ) catch unreachable; + result = @max(result, @as(usize, @intCast(discarding.count))); + } + + break :max result; +}; + +/// Encode a color scheme report response for CSI ? 996 n queries. +pub fn encodeColorSchemeReport( + writer: *std.Io.Writer, + scheme: ColorScheme, +) std.Io.Writer.Error!void { + try writer.writeAll(switch (scheme) { + .dark => "\x1B[?997;1n", + .light => "\x1B[?997;2n", + }); +} + /// An enum(u16) of the available device status requests. pub const Request = dsr_enum: { const EnumField = std.builtin.Type.EnumField; @@ -72,3 +98,19 @@ const entries: []const Entry = &.{ .{ .name = "cursor_position", .value = 6 }, .{ .name = "color_scheme", .value = 996, .question = true }, }; + +test "encode color scheme report dark" { + try std.testing.expectEqual(@as(usize, 9), max_color_scheme_report_encode_size); + + var buf: [max_color_scheme_report_encode_size]u8 = undefined; + var writer: std.Io.Writer = .fixed(&buf); + try encodeColorSchemeReport(&writer, .dark); + try std.testing.expectEqualStrings("\x1B[?997;1n", writer.buffered()); +} + +test "encode color scheme report light" { + var buf: [max_color_scheme_report_encode_size]u8 = undefined; + var writer: std.Io.Writer = .fixed(&buf); + try encodeColorSchemeReport(&writer, .light); + try std.testing.expectEqualStrings("\x1B[?997;2n", writer.buffered()); +} |
