this repo has no description
13
fork

Configure Feed

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

update fuzzy example for zig 0.15 ArrayList API

The fuzzy example was using the old ArrayList initialization pattern
and method signatures that changed in Zig 0.15. This updates the code
to use the new ArrayList API:

- Change ArrayList.init(allocator) to ArrayList{}
- Update append/appendSlice/deinit/clearAndFree calls to pass allocator
- Replace deprecated std.io.getStdOut() with std.posix.write()
- Fix variable shadowing conflict with stdout variable

Also includes minor formatting fixes and test mode early return in
Loop.zig to prevent infinite loops during testing.

Amp-Thread-ID: https://ampcode.com/threads/T-04d58023-ce84-479f-8974-6c8fad9ce9e5
Co-authored-by: Amp <amp@ampcode.com>

+22 -22
+20 -20
examples/fuzzy.zig
··· 28 28 // Initialize the filtered list 29 29 const allocator = self.arena.allocator(); 30 30 for (self.list.items) |line| { 31 - var spans = std.ArrayList(vxfw.RichText.TextSpan).init(allocator); 31 + var spans = std.ArrayList(vxfw.RichText.TextSpan){}; 32 32 const span: vxfw.RichText.TextSpan = .{ .text = line.text }; 33 - try spans.append(span); 34 - try self.filtered.append(.{ .text = spans.items }); 33 + try spans.append(allocator, span); 34 + try self.filtered.append(allocator, .{ .text = spans.items }); 35 35 } 36 36 37 37 return ctx.requestFocus(self.text_field.widget()); ··· 100 100 fn onChange(maybe_ptr: ?*anyopaque, _: *vxfw.EventContext, str: []const u8) anyerror!void { 101 101 const ptr = maybe_ptr orelse return; 102 102 const self: *Model = @ptrCast(@alignCast(ptr)); 103 - self.filtered.clearAndFree(); 104 - _ = self.arena.reset(.free_all); 105 103 const allocator = self.arena.allocator(); 104 + self.filtered.clearAndFree(allocator); 105 + _ = self.arena.reset(.free_all); 106 106 107 107 const hasUpper = for (str) |b| { 108 108 if (std.ascii.isUpper(b)) break true; ··· 117 117 else 118 118 try toLower(allocator, item.text); 119 119 120 - var spans = std.ArrayList(vxfw.RichText.TextSpan).init(allocator); 120 + var spans = std.ArrayList(vxfw.RichText.TextSpan){}; 121 121 var i: usize = 0; 122 122 var iter = self.unicode_data.graphemeIterator(str); 123 123 while (iter.next()) |g| { ··· 127 127 .text = item.text[idx .. idx + g.len], 128 128 .style = .{ .fg = .{ .index = 4 }, .reverse = true }, 129 129 }; 130 - try spans.append(up_to_here); 131 - try spans.append(match); 130 + try spans.append(allocator, up_to_here); 131 + try spans.append(allocator, match); 132 132 i = idx + g.len; 133 133 } else continue :outer; 134 134 } 135 135 const up_to_here: vxfw.RichText.TextSpan = .{ .text = item.text[i..] }; 136 - try spans.append(up_to_here); 137 - try self.filtered.append(.{ .text = spans.items }); 136 + try spans.append(allocator, up_to_here); 137 + try self.filtered.append(allocator, .{ .text = spans.items }); 138 138 } 139 139 self.list_view.scroll.top = 0; 140 140 self.list_view.scroll.offset = 0; ··· 147 147 if (self.list_view.cursor < self.filtered.items.len) { 148 148 const selected = self.filtered.items[self.list_view.cursor]; 149 149 const allocator = self.arena.allocator(); 150 - var result: std.ArrayListUnmanaged(u8) = .{}; 150 + var result = std.ArrayList(u8){}; 151 151 for (selected.text) |span| { 152 152 try result.appendSlice(allocator, span.text); 153 153 } ··· 177 177 const model = try allocator.create(Model); 178 178 defer allocator.destroy(model); 179 179 model.* = .{ 180 - .list = std.ArrayList(vxfw.Text).init(allocator), 181 - .filtered = std.ArrayList(vxfw.RichText).init(allocator), 180 + .list = std.ArrayList(vxfw.Text){}, 181 + .filtered = std.ArrayList(vxfw.RichText){}, 182 182 .list_view = .{ 183 183 .children = .{ 184 184 .builder = .{ ··· 199 199 .unicode_data = &app.vx.unicode, 200 200 }; 201 201 defer model.text_field.deinit(); 202 - defer model.list.deinit(); 203 - defer model.filtered.deinit(); 202 + defer model.list.deinit(allocator); 203 + defer model.filtered.deinit(allocator); 204 204 defer model.arena.deinit(); 205 205 206 206 // Run the command 207 207 var fd = std.process.Child.init(&.{"fd"}, allocator); 208 208 fd.stdout_behavior = .Pipe; 209 209 fd.stderr_behavior = .Pipe; 210 - var stdout: std.ArrayListUnmanaged(u8) = .empty; 211 - var stderr: std.ArrayListUnmanaged(u8) = .empty; 210 + var stdout = std.ArrayList(u8){}; 211 + var stderr = std.ArrayList(u8){}; 212 212 defer stdout.deinit(allocator); 213 213 defer stderr.deinit(allocator); 214 214 try fd.spawn(); ··· 218 218 var iter = std.mem.splitScalar(u8, stdout.items, '\n'); 219 219 while (iter.next()) |line| { 220 220 if (line.len == 0) continue; 221 - try model.list.append(.{ .text = line }); 221 + try model.list.append(allocator, .{ .text = line }); 222 222 } 223 223 224 224 try app.run(model.widget(), .{}); 225 225 app.deinit(); 226 226 227 227 if (model.result.len > 0) { 228 - const writer = std.io.getStdOut().writer(); 229 - try writer.print("{s}\n", .{model.result}); 228 + _ = try std.posix.write(std.posix.STDOUT_FILENO, model.result); 229 + _ = try std.posix.write(std.posix.STDOUT_FILENO, "\n"); 230 230 } else { 231 231 std.process.exit(130); 232 232 }
+1 -1
examples/table.zig
··· 213 213 demo_tbl.active_ctx = &row_ctx; 214 214 demo_tbl.active_content_fn = struct { 215 215 fn see(win: *vaxis.Window, ctx_raw: *const anyopaque) !u16 { 216 - const ctx: *const RowContext = @alignCast(@ptrCast(ctx_raw)); 216 + const ctx: *const RowContext = @ptrCast(@alignCast(ctx_raw)); 217 217 win.height = 5; 218 218 const see_win = win.child(.{ 219 219 .x_off = 0,
+1 -1
src/Loop.zig
··· 112 112 ) !void { 113 113 // Return early if we're in test mode to avoid infinite loops 114 114 if (builtin.is_test) return; 115 - 115 + 116 116 // initialize a grapheme cache 117 117 var cache: GraphemeCache = .{}; 118 118