Something went wrong. Try again.
A charm-like tui library
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768//! Single dot spinner; q/esc/ctrl-c quits.const std = @import("std");const matcha = @import("matcha");const blush = @import("blush");const leaves = @import("leaves");
const Writer = std.Io.Writer;
const Model = struct { model: matcha.Model = .{ .vtable = &.{ .init = init, .update = update, .view = view, } }, spinner: leaves.Spinner = .{ .preset = .dot, .style = .{ .foreground = .{ .ansi256 = 205 } }, }, quitting: bool = false,
fn init(m: *matcha.Model) ?matcha.Cmd { const self: *Model = @fieldParentPtr("model", m); return self.spinner.start(m.gpa); }
fn update(m: *matcha.Model, msg: matcha.Msg) ?matcha.Cmd { const self: *Model = @fieldParentPtr("model", m); switch (msg) { .key_press => |k| switch (k.kind) { .escape => { self.quitting = true; return .quit; }, .rune => switch (k.rune) { 'q' => { self.quitting = true; return .quit; }, 'c' => if (k.mods.ctrl) { self.quitting = true; return .quit; }, else => {}, }, else => {}, }, else => return self.spinner.update(m.gpa, msg), } return null; }
fn view(m: *matcha.Model, w: *Writer) Writer.Error!matcha.View { const self: *Model = @fieldParentPtr("model", m); try w.writeAll("\n\n "); try self.spinner.view(w); try w.writeAll(" Loading forever...press q to quit\n\n"); if (self.quitting) try w.writeByte('\n'); return .{}; }};
pub fn spinner(init: std.process.Init) !void { var m: Model = .{}; var program: matcha.Program = try .init(init, &m.model, .{}); defer program.deinit(); try program.run();}