aboutsummaryrefslogtreecommitdiff
path: root/vendor/libghostty-vt/src/terminal/c/row.zig
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-05-07 18:29:21 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-05-07 18:29:21 +0300
commitdcfe11a7588fcd42471159453810abc9b7720a57 (patch)
treec32a77266028e73ca2382b96c96f8438a5fcd621 /vendor/libghostty-vt/src/terminal/c/row.zig
parent2dfed860103c4e4505ac7f25def9fe37da1e1e6a (diff)
build: update libghostty-vt vendor
vendor ghostty 063ac3e and remove the musl libc++ link workaround. expose the new selection formatter and hyperlink uri apis for follow-up rendering work. add manual artifact validation for static linux builds.
Diffstat (limited to 'vendor/libghostty-vt/src/terminal/c/row.zig')
-rw-r--r--vendor/libghostty-vt/src/terminal/c/row.zig61
1 files changed, 61 insertions, 0 deletions
diff --git a/vendor/libghostty-vt/src/terminal/c/row.zig b/vendor/libghostty-vt/src/terminal/c/row.zig
index d4532706..66c398c8 100644
--- a/vendor/libghostty-vt/src/terminal/c/row.zig
+++ b/vendor/libghostty-vt/src/terminal/c/row.zig
@@ -83,6 +83,27 @@ pub fn get(
};
}
+pub fn get_multi(
+ row_: CRow,
+ count: usize,
+ keys: ?[*]const RowData,
+ values: ?[*]?*anyopaque,
+ out_written: ?*usize,
+) callconv(lib.calling_conv) Result {
+ const k = keys orelse return .invalid_value;
+ const v = values orelse return .invalid_value;
+
+ for (0..count) |i| {
+ const result = get(row_, k[i], v[i]);
+ if (result != .success) {
+ if (out_written) |w| w.* = i;
+ return result;
+ }
+ }
+ if (out_written) |w| w.* = count;
+ return .success;
+}
+
fn getTyped(
row_: CRow,
comptime data: RowData,
@@ -130,3 +151,43 @@ test "get dirty" {
try testing.expectEqual(Result.success, get(row, .dirty, @ptrCast(&dirty)));
try testing.expect(dirty);
}
+
+test "get_multi success" {
+ var zig_row: Row = @bitCast(@as(u64, 0));
+ zig_row.wrap = true;
+ zig_row.dirty = true;
+ const row_val: CRow = @bitCast(zig_row);
+
+ var wrap: bool = false;
+ var dirty: bool = false;
+ var written: usize = 0;
+
+ const keys = [_]RowData{ .wrap, .dirty };
+ var values = [_]?*anyopaque{ @ptrCast(&wrap), @ptrCast(&dirty) };
+ try testing.expectEqual(Result.success, get_multi(row_val, keys.len, &keys, &values, &written));
+ try testing.expectEqual(keys.len, written);
+ try testing.expect(wrap);
+ try testing.expect(dirty);
+}
+
+test "get_multi error sets out_written" {
+ var zig_row: Row = @bitCast(@as(u64, 0));
+ zig_row.wrap = true;
+ const row_val: CRow = @bitCast(zig_row);
+
+ var wrap: bool = false;
+ var written: usize = 99;
+
+ const keys = [_]RowData{ .wrap, .invalid };
+ var values = [_]?*anyopaque{ @ptrCast(&wrap), @ptrCast(&wrap) };
+ try testing.expectEqual(Result.invalid_value, get_multi(row_val, keys.len, &keys, &values, &written));
+ try testing.expectEqual(1, written);
+ try testing.expect(wrap);
+}
+
+test "get_multi null keys returns invalid_value" {
+ const row_val: CRow = @bitCast(@as(u64, 0));
+ var wrap: bool = false;
+ var values = [_]?*anyopaque{@ptrCast(&wrap)};
+ try testing.expectEqual(Result.invalid_value, get_multi(row_val, 1, null, &values, null));
+}