this repo has no description
13
fork

Configure Feed

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

at 3943a6f42f7f4c73ab9493dfb0a4e123be15d302 66 lines 2.0 kB view raw
1const std = @import("std"); 2const log = std.log.scoped(.main); 3const vaxis = @import("vaxis"); 4 5const TextView = vaxis.widgets.TextView; 6 7const Event = union(enum) { 8 key_press: vaxis.Key, 9 winsize: vaxis.Winsize, 10}; 11 12pub fn main() !void { 13 var gpa = std.heap.GeneralPurposeAllocator(.{}){}; 14 15 defer { 16 const deinit_status = gpa.deinit(); 17 if (deinit_status == .leak) { 18 log.err("memory leak", .{}); 19 } 20 } 21 22 const alloc = gpa.allocator(); 23 var buffer: [1024]u8 = undefined; 24 var tty = try vaxis.Tty.init(&buffer); 25 defer tty.deinit(); 26 var vx = try vaxis.init(alloc, .{}); 27 defer vx.deinit(alloc, tty.writer()); 28 var loop: vaxis.Loop(Event) = .{ 29 .vaxis = &vx, 30 .tty = &tty, 31 }; 32 try loop.init(); 33 try loop.start(); 34 defer loop.stop(); 35 try vx.enterAltScreen(tty.writer()); 36 try vx.queryTerminal(tty.writer(), 20 * std.time.ns_per_s); 37 var text_view = TextView{}; 38 var text_view_buffer = TextView.Buffer{}; 39 defer text_view_buffer.deinit(alloc); 40 try text_view_buffer.append(alloc, .{ .bytes = "Press Enter to add a line, Up/Down to scroll, 'c' to close." }); 41 42 var counter: i32 = 0; 43 var lineBuf: [128]u8 = undefined; 44 45 while (true) { 46 const event = loop.nextEvent(); 47 switch (event) { 48 .key_press => |key| { 49 // Close demo 50 if (key.matches('c', .{})) break; 51 if (key.matches(vaxis.Key.enter, .{})) { 52 counter += 1; 53 const new_content = try std.fmt.bufPrint(&lineBuf, "\nLine {d}", .{counter}); 54 try text_view_buffer.append(alloc, .{ .bytes = new_content }); 55 } 56 text_view.input(key); 57 }, 58 .winsize => |ws| try vx.resize(alloc, tty.writer(), ws), 59 } 60 const win = vx.window(); 61 win.clear(); 62 text_view.draw(win, text_view_buffer); 63 try vx.render(tty.writer()); 64 try tty.writer.flush(); 65 } 66}