aboutsummaryrefslogtreecommitdiff
path: root/vendor/libghostty-vt/src/terminal/device_status.zig
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-07-16 23:28:05 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-07-16 23:29:28 +0300
commit4a3302d19a2baa3a33e910e0088c24e780905b90 (patch)
treedcaf76fae1c82102d933c9225b17ca7ac5d3a847 /vendor/libghostty-vt/src/terminal/device_status.zig
parent550e9f8cc085f428429f5cf2da0bb2dba897e8b8 (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.zig42
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());
+}