From 93ef9797d5d8171d84934c34bdb80cb4a0fadee7 Mon Sep 17 00:00:00 2001 From: "Jeffrey C. Ollie" Date: Tue, 14 Apr 2026 23:39:45 -0500 Subject: [PATCH] pass buffer to vxfw.App.init rather than allocating it internally --- README.md | 13 ++++++------- build.zig | 2 ++ examples/counter.zig | 4 ++-- examples/fuzzy.zig | 10 +++++----- examples/image.zig | 13 ------------- examples/list_view.zig | 30 +++++++++++++++--------------- examples/scroll.zig | 40 ++++++++++++++++++++-------------------- examples/split_view.zig | 10 +++++----- src/vxfw/App.zig | 8 +++----- 9 files changed, 58 insertions(+), 72 deletions(-) diff --git a/README.md b/README.md index 621b1a8..9e5bcd3 100644 --- a/README.md +++ b/README.md @@ -214,18 +214,17 @@ const Model = struct { } }; -pub fn main() !void { - var gpa = std.heap.GeneralPurposeAllocator(.{}){}; - defer _ = gpa.deinit(); +pub fn main(init: std.process.Init) !void { + const io = init.io; + const alloc = init.gpa; - const allocator = gpa.allocator(); - - var app = try vxfw.App.init(allocator); + var buffer: [1024]u8 = undefined; + var app: vxfw.App = try .init(io, alloc, init.environ_map, &buffer); defer app.deinit(); // We heap allocate our model because we will require a stable pointer to it in our Button // widget - const model = try allocator.create(Model); + const model = try alloc.create(Model); defer allocator.destroy(model); // Set the initial state of our button diff --git a/build.zig b/build.zig index ee06e5d..9750249 100644 --- a/build.zig +++ b/build.zig @@ -71,6 +71,8 @@ pub fn build(b: *std.Build) void { .root_module = examples.get(example_option) orelse unreachable, }); + b.getInstallStep().dependOn(&example.step); + const example_run = b.addRunArtifact(example); example_step.dependOn(&example_run.step); diff --git a/examples/counter.zig b/examples/counter.zig index 4993fcc..7742e90 100644 --- a/examples/counter.zig +++ b/examples/counter.zig @@ -115,8 +115,8 @@ pub fn main(init: std.process.Init) !void { const io = init.io; const allocator = init.gpa; - var app: vxfw.App = undefined; - try app.init(io, allocator, init.environ_map); + var buffer: [1024]u8 = undefined; + var app: vxfw.App = try .init(io, allocator, init.environ_map, &buffer); defer app.deinit(); // We heap allocate our model because we will require a stable pointer to it in our Button diff --git a/examples/fuzzy.zig b/examples/fuzzy.zig index 4b99d4b..d7a167e 100644 --- a/examples/fuzzy.zig +++ b/examples/fuzzy.zig @@ -204,9 +204,9 @@ pub fn main(init: std.process.Init) !u8 { const io = init.io; const alloc = init.gpa; - var app: vxfw.App = undefined; - try app.init(io, alloc, init.environ_map); - errdefer app.deinit(); + var buffer: [1024]u8 = undefined; + var app: vxfw.App = try .init(io, alloc, init.environ_map, &buffer); + defer app.deinit(); const model = try Model.init(alloc); defer model.deinit(alloc); @@ -229,8 +229,8 @@ pub fn main(init: std.process.Init) !u8 { if (model.result.len > 0) { var stdout_file: std.Io.File = .stdout(); - var buffer: [1024]u8 = undefined; - var stdout_writer = stdout_file.writer(io, &buffer); + var stdout_buffer: [1024]u8 = undefined; + var stdout_writer = stdout_file.writer(io, &stdout_buffer); const stdout = &stdout_writer.interface; try stdout.writeAll(model.result); try stdout.writeByte('\n'); diff --git a/examples/image.zig b/examples/image.zig index 9c9f5e7..e551f3c 100644 --- a/examples/image.zig +++ b/examples/image.zig @@ -9,48 +9,35 @@ const Event = union(enum) { }; pub fn main(init: std.process.Init) !void { - std.log.warn("YYYYY", .{}); const io = init.io; const alloc = init.gpa; var buffer: [1024]u8 = undefined; - std.log.warn("ZZZZ", .{}); var tty = try vaxis.Tty.init(io, &buffer); defer tty.deinit(); - std.log.warn("1111", .{}); var vx = try vaxis.init(io, alloc, init.environ_map, .{}); defer vx.deinit(alloc, tty.writer()); - std.log.warn("2222", .{}); var loop: vaxis.Loop(Event) = .init(io, &tty, &vx); - std.log.warn("AAAA", .{}); try loop.start(); defer loop.stop(); - std.log.warn("BBBB", .{}); try vx.enterAltScreen(tty.writer()); - std.log.warn("CCCC", .{}); try vx.queryTerminal(tty.writer(), .fromSeconds(1)); - std.log.warn("DDDD", .{}); var read_buffer: [1024 * 1024]u8 = undefined; // 1MB buffer var img1 = try vaxis.zigimg.Image.fromFilePath(alloc, io, "examples/zig.png", &read_buffer); - std.log.warn("EEEE", .{}); defer img1.deinit(alloc); - std.log.warn("FFFF", .{}); const imgs = [_]vaxis.Image{ try vx.transmitImage(alloc, tty.writer(), &img1, .rgba), // var img1 = try vaxis.zigimg.Image.fromFilePath(alloc, "examples/zig.png"); // try vx.loadImage(alloc, tty.writer(), .{ .path = "examples/zig.png" }), try vx.loadImage(alloc, tty.writer(), .{ .path = "examples/vaxis.png" }), }; - std.log.warn("GGGG", .{}); defer vx.freeImage(tty.writer(), imgs[0].id); - std.log.warn("HHHH", .{}); defer vx.freeImage(tty.writer(), imgs[1].id); - std.log.warn("JJJJ", .{}); var n: usize = 0; diff --git a/examples/list_view.zig b/examples/list_view.zig index 0c19098..67cd2bf 100644 --- a/examples/list_view.zig +++ b/examples/list_view.zig @@ -54,33 +54,33 @@ const Model = struct { pub fn main(init: std.process.Init) !void { const io = init.io; - const allocator = init.gpa; + const alloc = init.gpa; - var app: vxfw.App = undefined; - try app.init(io, allocator, init.environ_map); + var buffer: [1024]u8 = undefined; + var app: vxfw.App = try .init(io, alloc, init.environ_map, &buffer); defer app.deinit(); - const model = try allocator.create(Model); - defer allocator.destroy(model); + const model = try alloc.create(Model); + defer alloc.destroy(model); const n = 80; - var texts: std.ArrayList(Widget) = try .initCapacity(allocator, n); - var allocs: std.ArrayList(*Text) = try .initCapacity(allocator, n); + var texts: std.ArrayList(Widget) = try .initCapacity(alloc, n); + var allocs: std.ArrayList(*Text) = try .initCapacity(alloc, n); defer { for (allocs.items) |tw| { - allocator.free(tw.text); - allocator.destroy(tw); + alloc.free(tw.text); + alloc.destroy(tw); } - allocs.deinit(allocator); - texts.deinit(allocator); + allocs.deinit(alloc); + texts.deinit(alloc); } for (0..n) |i| { - const t = std.fmt.allocPrint(allocator, "List Item {d} of {d}", .{ i, n }) catch "placeholder"; - const tw = try allocator.create(Text); + const t = std.fmt.allocPrint(alloc, "List Item {d} of {d}", .{ i, n }) catch "placeholder"; + const tw = try alloc.create(Text); tw.* = .{ .text = t }; - _ = try allocs.append(allocator, tw); - _ = try texts.append(allocator, tw.widget()); + _ = try allocs.append(alloc, tw); + _ = try texts.append(alloc, tw.widget()); } model.* = .{ diff --git a/examples/scroll.zig b/examples/scroll.zig index 9d96657..8bbdc06 100644 --- a/examples/scroll.zig +++ b/examples/scroll.zig @@ -153,17 +153,17 @@ const Model = struct { pub fn main(init: std.process.Init) !void { const io = init.io; - const allocator = init.gpa; + const alloc = init.gpa; - var app: vxfw.App = undefined; - try app.init(io, allocator, init.environ_map); + var buffer: [1024]u8 = undefined; + var app: vxfw.App = try .init(io, alloc, init.environ_map, &buffer); defer app.deinit(); - var arena: std.heap.ArenaAllocator = .init(allocator); + var arena: std.heap.ArenaAllocator = .init(alloc); defer arena.deinit(); - const model = try allocator.create(Model); - defer allocator.destroy(model); + const model = try alloc.create(Model); + defer alloc.destroy(model); model.* = .{ .scroll_bars = .{ .scroll_view = .{ @@ -183,28 +183,28 @@ pub fn main(init: std.process.Init) !void { }, .rows = .empty, }; - defer model.rows.deinit(allocator); + defer model.rows.deinit(alloc); var lipsum: std.ArrayList([]const u8) = .empty; - defer lipsum.deinit(allocator); - - try lipsum.append(allocator, " Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc sit amet nunc porta, commodo tellus eu, blandit lectus. Aliquam dignissim rhoncus mi eu ultrices. Suspendisse lectus massa, bibendum sed lorem sit amet, egestas aliquam ante. Mauris venenatis nibh neque. Nulla a mi eget purus porttitor malesuada. Sed ac porta felis. Morbi ultricies urna nisi, et maximus elit convallis a. Morbi ut felis nec orci euismod congue efficitur egestas ex. Quisque eu feugiat magna. Pellentesque porttitor tortor ut iaculis dictum. Nulla erat neque, sollicitudin vitae enim nec, pharetra blandit tortor. Sed orci ante, condimentum vitae sodales in, sodales ut nulla. Suspendisse quam felis, aliquet ut neque a, lacinia sagittis turpis. Vivamus nec dui purus. Proin tempor nisl et porttitor consequat."); - try lipsum.append(allocator, " Vivamus elit massa, commodo in laoreet nec, scelerisque ac orci. Donec nec ante sit amet nisi ullamcorper dictum quis non enim. Proin ante libero, consequat sit amet semper a, vulputate non odio. Mauris ut suscipit lacus. Mauris nec dolor id ex mollis tempor at quis ligula. Integer varius commodo ipsum id gravida. Sed ut lobortis est, id egestas nunc. In fringilla ullamcorper porttitor. Donec quis dignissim arcu, vitae sagittis tortor. Sed tempor porttitor arcu, sit amet elementum est ornare id. Morbi rhoncus, ipsum eget tincidunt volutpat, mauris enim vestibulum nibh, mollis iaculis ante enim quis enim. Donec pharetra odio vel ex fringilla, ut laoreet ipsum commodo. Praesent tempus, leo a pellentesque sodales, erat ipsum pretium nulla, id faucibus sem turpis at nibh. Aenean ut dui luctus, vehicula felis vel, aliquam nulla."); - try lipsum.append(allocator, " Cras interdum mattis elit non varius. In condimentum velit a tellus sollicitudin interdum. Etiam pulvinar semper ex, eget congue ante tristique ut. Phasellus commodo magna magna, at fermentum tortor porttitor ac. Fusce a efficitur diam, a congue ante. Mauris maximus ultrices leo, non viverra ex hendrerit eu. Donec laoreet turpis nulla, eget imperdiet tortor mollis aliquam. Donec a est eget ante consequat rhoncus."); - try lipsum.append(allocator, " Morbi facilisis libero nec viverra imperdiet. Ut dictum faucibus bibendum. Vestibulum ut nisl eu magna sollicitudin elementum vel eu ante. Phasellus euismod ligula massa, vel rutrum elit hendrerit ut. Vivamus id luctus lectus, at ullamcorper leo. Pellentesque in risus finibus, viverra ligula sed, porta nisl. Aliquam pretium accumsan placerat. Etiam a elit posuere, varius erat sed, aliquet quam. Morbi finibus gravida erat, non imperdiet dolor sollicitudin dictum. Aenean eget ullamcorper lacus, et hendrerit lorem. Quisque sed varius mauris."); - try lipsum.append(allocator, " Nullam vitae euismod mauris, eu gravida dolor. Nunc vel urna laoreet justo faucibus tempus. Vestibulum tincidunt sagittis metus ac dignissim. Curabitur eleifend dolor consequat malesuada posuere. In hac habitasse platea dictumst. Fusce eget ipsum tincidunt, placerat orci ut, malesuada ante. Vivamus ultrices purus vel orci posuere, sed posuere eros porta. Vestibulum a tellus et tortor scelerisque varius. Pellentesque vel leo sed est semper bibendum. Mauris tellus ante, cursus et nunc vitae, dictum pellentesque ex. In tristique purus felis, non efficitur ante mollis id. Nulla quam nisi, suscipit sit amet mattis vel, placerat sit amet lectus. Vestibulum cursus auctor quam, at convallis felis euismod non. Sed nec magna nisi. Morbi scelerisque accumsan nunc, sed sagittis sem varius sit amet. Maecenas arcu dui, euismod et sem quis, condimentum blandit tellus."); - try lipsum.append(allocator, " Nullam auctor lobortis libero non viverra. Mauris a imperdiet eros, a luctus est. Integer pellentesque eros et metus rhoncus egestas. Suspendisse eu risus mauris. Mauris posuere nulla in justo pharetra molestie. Maecenas sagittis at nunc et finibus. Vestibulum quis leo ac mauris malesuada vestibulum vitae eu enim. Ut et maximus elit. Pellentesque lorem felis, tristique vitae posuere vitae, auctor tempus magna. Fusce cursus purus sit amet risus pulvinar, non egestas ligula imperdiet."); - try lipsum.append(allocator, " Proin rhoncus tincidunt congue. Curabitur pretium mauris eu erat iaculis semper. Vestibulum augue tortor, vehicula id maximus at, semper eu leo. Vivamus feugiat at purus eu dapibus. Mauris luctus sollicitudin nibh, in placerat est mattis vitae. Morbi ut risus felis. Etiam lobortis mollis diam, id tempor odio sollicitudin a. Morbi congue, lacus ac accumsan consequat, ipsum eros facilisis est, in congue metus ex nec ligula. Vestibulum dolor ligula, interdum nec iaculis vel, interdum a diam. Curabitur mattis, risus at rhoncus gravida, diam est viverra diam, ut mattis augue nulla sed lacus."); - try lipsum.append(allocator, " Duis rutrum orci sit amet dui imperdiet porta. In pulvinar imperdiet enim nec tristique. Etiam egestas pulvinar arcu, viverra mollis ipsum. Ut sit amet sapien nibh. Maecenas ut velit egestas, suscipit dolor vel, interdum tellus. Pellentesque faucibus euismod risus, ac vehicula erat sodales a. Aliquam egestas sit amet enim ac posuere. In id venenatis eros, et pharetra neque. Proin facilisis, odio id vehicula elementum, sapien ligula interdum dui, quis vestibulum est quam sit amet nisl. Aliquam in orci et felis aliquet tempus quis id magna. Sed interdum malesuada sem. Proin sagittis est metus, eu vestibulum nunc lacinia in. Vestibulum enim erat, cursus at justo at, porta feugiat quam. Phasellus vestibulum finibus nulla, at egestas augue imperdiet dapibus. Nunc in felis at ante congue interdum ut nec sapien."); - try lipsum.append(allocator, " Etiam lacinia ornare mauris, ut lacinia elit sollicitudin non. Morbi cursus dictum enim, et vulputate mi sollicitudin vel. Fusce rutrum augue justo. Phasellus et mauris tincidunt erat lacinia bibendum sed eu orci. Sed nunc lectus, dignissim sit amet ultricies sit amet, efficitur eu urna. Fusce feugiat malesuada ipsum nec congue. Praesent ultrices metus eu pulvinar laoreet. Maecenas pellentesque, metus ac lobortis rhoncus, ligula eros consequat urna, eget dictum lectus sem ut orci. Donec lobortis, lacus sed bibendum auctor, odio turpis suscipit odio, vitae feugiat leo metus ac lectus. Curabitur sed sem arcu."); - try lipsum.append(allocator, " Mauris nisi tortor, auctor venenatis turpis a, finibus condimentum lectus. Donec id velit odio. Curabitur ac varius lorem. Nam cursus quam in velit gravida, in bibendum purus fermentum. Sed non rutrum dui, nec ultrices ligula. Integer lacinia blandit nisl non sollicitudin. Praesent nec malesuada eros, sit amet tincidunt nunc."); + defer lipsum.deinit(alloc); + + try lipsum.append(alloc, " Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc sit amet nunc porta, commodo tellus eu, blandit lectus. Aliquam dignissim rhoncus mi eu ultrices. Suspendisse lectus massa, bibendum sed lorem sit amet, egestas aliquam ante. Mauris venenatis nibh neque. Nulla a mi eget purus porttitor malesuada. Sed ac porta felis. Morbi ultricies urna nisi, et maximus elit convallis a. Morbi ut felis nec orci euismod congue efficitur egestas ex. Quisque eu feugiat magna. Pellentesque porttitor tortor ut iaculis dictum. Nulla erat neque, sollicitudin vitae enim nec, pharetra blandit tortor. Sed orci ante, condimentum vitae sodales in, sodales ut nulla. Suspendisse quam felis, aliquet ut neque a, lacinia sagittis turpis. Vivamus nec dui purus. Proin tempor nisl et porttitor consequat."); + try lipsum.append(alloc, " Vivamus elit massa, commodo in laoreet nec, scelerisque ac orci. Donec nec ante sit amet nisi ullamcorper dictum quis non enim. Proin ante libero, consequat sit amet semper a, vulputate non odio. Mauris ut suscipit lacus. Mauris nec dolor id ex mollis tempor at quis ligula. Integer varius commodo ipsum id gravida. Sed ut lobortis est, id egestas nunc. In fringilla ullamcorper porttitor. Donec quis dignissim arcu, vitae sagittis tortor. Sed tempor porttitor arcu, sit amet elementum est ornare id. Morbi rhoncus, ipsum eget tincidunt volutpat, mauris enim vestibulum nibh, mollis iaculis ante enim quis enim. Donec pharetra odio vel ex fringilla, ut laoreet ipsum commodo. Praesent tempus, leo a pellentesque sodales, erat ipsum pretium nulla, id faucibus sem turpis at nibh. Aenean ut dui luctus, vehicula felis vel, aliquam nulla."); + try lipsum.append(alloc, " Cras interdum mattis elit non varius. In condimentum velit a tellus sollicitudin interdum. Etiam pulvinar semper ex, eget congue ante tristique ut. Phasellus commodo magna magna, at fermentum tortor porttitor ac. Fusce a efficitur diam, a congue ante. Mauris maximus ultrices leo, non viverra ex hendrerit eu. Donec laoreet turpis nulla, eget imperdiet tortor mollis aliquam. Donec a est eget ante consequat rhoncus."); + try lipsum.append(alloc, " Morbi facilisis libero nec viverra imperdiet. Ut dictum faucibus bibendum. Vestibulum ut nisl eu magna sollicitudin elementum vel eu ante. Phasellus euismod ligula massa, vel rutrum elit hendrerit ut. Vivamus id luctus lectus, at ullamcorper leo. Pellentesque in risus finibus, viverra ligula sed, porta nisl. Aliquam pretium accumsan placerat. Etiam a elit posuere, varius erat sed, aliquet quam. Morbi finibus gravida erat, non imperdiet dolor sollicitudin dictum. Aenean eget ullamcorper lacus, et hendrerit lorem. Quisque sed varius mauris."); + try lipsum.append(alloc, " Nullam vitae euismod mauris, eu gravida dolor. Nunc vel urna laoreet justo faucibus tempus. Vestibulum tincidunt sagittis metus ac dignissim. Curabitur eleifend dolor consequat malesuada posuere. In hac habitasse platea dictumst. Fusce eget ipsum tincidunt, placerat orci ut, malesuada ante. Vivamus ultrices purus vel orci posuere, sed posuere eros porta. Vestibulum a tellus et tortor scelerisque varius. Pellentesque vel leo sed est semper bibendum. Mauris tellus ante, cursus et nunc vitae, dictum pellentesque ex. In tristique purus felis, non efficitur ante mollis id. Nulla quam nisi, suscipit sit amet mattis vel, placerat sit amet lectus. Vestibulum cursus auctor quam, at convallis felis euismod non. Sed nec magna nisi. Morbi scelerisque accumsan nunc, sed sagittis sem varius sit amet. Maecenas arcu dui, euismod et sem quis, condimentum blandit tellus."); + try lipsum.append(alloc, " Nullam auctor lobortis libero non viverra. Mauris a imperdiet eros, a luctus est. Integer pellentesque eros et metus rhoncus egestas. Suspendisse eu risus mauris. Mauris posuere nulla in justo pharetra molestie. Maecenas sagittis at nunc et finibus. Vestibulum quis leo ac mauris malesuada vestibulum vitae eu enim. Ut et maximus elit. Pellentesque lorem felis, tristique vitae posuere vitae, auctor tempus magna. Fusce cursus purus sit amet risus pulvinar, non egestas ligula imperdiet."); + try lipsum.append(alloc, " Proin rhoncus tincidunt congue. Curabitur pretium mauris eu erat iaculis semper. Vestibulum augue tortor, vehicula id maximus at, semper eu leo. Vivamus feugiat at purus eu dapibus. Mauris luctus sollicitudin nibh, in placerat est mattis vitae. Morbi ut risus felis. Etiam lobortis mollis diam, id tempor odio sollicitudin a. Morbi congue, lacus ac accumsan consequat, ipsum eros facilisis est, in congue metus ex nec ligula. Vestibulum dolor ligula, interdum nec iaculis vel, interdum a diam. Curabitur mattis, risus at rhoncus gravida, diam est viverra diam, ut mattis augue nulla sed lacus."); + try lipsum.append(alloc, " Duis rutrum orci sit amet dui imperdiet porta. In pulvinar imperdiet enim nec tristique. Etiam egestas pulvinar arcu, viverra mollis ipsum. Ut sit amet sapien nibh. Maecenas ut velit egestas, suscipit dolor vel, interdum tellus. Pellentesque faucibus euismod risus, ac vehicula erat sodales a. Aliquam egestas sit amet enim ac posuere. In id venenatis eros, et pharetra neque. Proin facilisis, odio id vehicula elementum, sapien ligula interdum dui, quis vestibulum est quam sit amet nisl. Aliquam in orci et felis aliquet tempus quis id magna. Sed interdum malesuada sem. Proin sagittis est metus, eu vestibulum nunc lacinia in. Vestibulum enim erat, cursus at justo at, porta feugiat quam. Phasellus vestibulum finibus nulla, at egestas augue imperdiet dapibus. Nunc in felis at ante congue interdum ut nec sapien."); + try lipsum.append(alloc, " Etiam lacinia ornare mauris, ut lacinia elit sollicitudin non. Morbi cursus dictum enim, et vulputate mi sollicitudin vel. Fusce rutrum augue justo. Phasellus et mauris tincidunt erat lacinia bibendum sed eu orci. Sed nunc lectus, dignissim sit amet ultricies sit amet, efficitur eu urna. Fusce feugiat malesuada ipsum nec congue. Praesent ultrices metus eu pulvinar laoreet. Maecenas pellentesque, metus ac lobortis rhoncus, ligula eros consequat urna, eget dictum lectus sem ut orci. Donec lobortis, lacus sed bibendum auctor, odio turpis suscipit odio, vitae feugiat leo metus ac lectus. Curabitur sed sem arcu."); + try lipsum.append(alloc, " Mauris nisi tortor, auctor venenatis turpis a, finibus condimentum lectus. Donec id velit odio. Curabitur ac varius lorem. Nam cursus quam in velit gravida, in bibendum purus fermentum. Sed non rutrum dui, nec ultrices ligula. Integer lacinia blandit nisl non sollicitudin. Praesent nec malesuada eros, sit amet tincidunt nunc."); // Try playing around with the amount of items in the scroll view to see how the scrollbar // reacts. for (0..10) |i| { for (lipsum.items, 0..) |paragraph, j| { const number = i * 10 + j; - try model.rows.append(allocator, .{ .idx = number, .text = paragraph }); + try model.rows.append(alloc, .{ .idx = number, .text = paragraph }); } } diff --git a/examples/split_view.zig b/examples/split_view.zig index 07f95a5..df7956d 100644 --- a/examples/split_view.zig +++ b/examples/split_view.zig @@ -51,14 +51,14 @@ const Model = struct { pub fn main(init: std.process.Init) !void { const io = init.io; - const allocator = init.gpa; + const alloc = init.gpa; - var app: vxfw.App = undefined; - try app.init(io, allocator, init.environ_map); + var buffer: [1024]u8 = undefined; + var app: vxfw.App = try .init(io, alloc, init.environ_map, &buffer); defer app.deinit(); - const model = try allocator.create(Model); - defer allocator.destroy(model); + const model = try alloc.create(Model); + defer alloc.destroy(model); model.* = .{ .lhs = .{ .text = "Left hand side" }, .rhs = .{ .text = "right hand side" }, diff --git a/src/vxfw/App.zig b/src/vxfw/App.zig index 64caf41..279f605 100644 --- a/src/vxfw/App.zig +++ b/src/vxfw/App.zig @@ -17,7 +17,6 @@ tty: vaxis.Tty, vx: vaxis.Vaxis, timers: std.ArrayList(vxfw.Tick), wants_focus: ?vxfw.Widget, -buffer: [1024]u8, /// Runtime options pub const Options = struct { @@ -28,11 +27,11 @@ pub const Options = struct { /// Create an application. We require stable pointers to do the set up, so this will create an App /// object on the heap. Call destroy when the app is complete to reset terminal state and release /// resources -pub fn init(self: *App, io: std.Io, allocator: Allocator, env_map: *std.process.Environ.Map) !void { - self.* = .{ +pub fn init(io: std.Io, allocator: Allocator, env_map: *std.process.Environ.Map, buffer: []u8) !App { + return .{ .io = io, .allocator = allocator, - .tty = try vaxis.Tty.init(io, &self.buffer), + .tty = try vaxis.Tty.init(io, buffer), .vx = try vaxis.init(io, allocator, env_map, .{ .system_clipboard_allocator = allocator, .kitty_keyboard_flags = .{ @@ -41,7 +40,6 @@ pub fn init(self: *App, io: std.Io, allocator: Allocator, env_map: *std.process. }), .timers = .empty, .wants_focus = null, - .buffer = undefined, }; } -- 2.51.2