From 9eeb776fe572515ae9dad8f67dfaf027de3727c6 Mon Sep 17 00:00:00 2001 From: RGBCube Date: Wed, 17 May 2023 23:40:38 +0300 Subject: [PATCH] Write README --- README.md | 27 +++++++++++++++++++++++++++ src/Spinner.zig | 28 ++++++++++++++-------------- 2 files changed, 41 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 366cd75..f81cf52 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,33 @@ Terminal abstraction library for Zig. +## Contents + +This is a simple guide to using the library. +The contents will be briefly covered here. + +### Spinner + +```zig +const std = @import("std"); +const zterm = @import("zterm"); + +pub fn main() !void { + var sp = zterm.Spinner{ + .loading_charset = [_][]const u8{"⣾", "⣽", "⣻", "⢿", "⡿", "⣟", "⣯", "⣷"}; + .loading_message = "Selling all your data to the CCP...", + .finished_charset = "✓", + .finished_message = "Lock your doors.", + }; + try sp.start(); + + var stdOut = std.io.getOut(); + try stdOut.writeAll("Calculating very important stuff..."); + + try sp.stop(); +} +``` + ## License ``` diff --git a/src/Spinner.zig b/src/Spinner.zig index 542ce18..70d68d8 100644 --- a/src/Spinner.zig +++ b/src/Spinner.zig @@ -8,17 +8,17 @@ const Spinner = @This(); const default_loading_charset = [_][]const u8{ "|", "/", "-", "\\" }; const default_finished_charset = "✓"; +loading_charset: []const []const u8 = &default_loading_charset, +loading_message: []const u8 = "", + +finished_charset: []const u8 = default_finished_charset, +finished_message: []const u8 = "", + keep_going: Atomic(bool) = Atomic(bool).init(false), spinner_thread: ?Thread = null, framerate_ns: u64 = 100 * time.ns_per_ms, -loading_charset: []const []const u8 = &default_loading_charset, -finished_charset: []const u8 = default_finished_charset, - -loading_message: []const u8 = "", -finished_message: []const u8 = "", - pub fn start(sp: *Spinner) !void { sp.keep_going.store(true, .SeqCst); sp.spinner_thread = try Thread.spawn(.{}, writer, .{sp}); @@ -30,10 +30,10 @@ pub fn stop(sp: *Spinner) !void { var stdErr = std.io.getStdErr(); - _ = try stdErr.write("\r"); - _ = try stdErr.write(sp.finished_charset); - _ = try stdErr.write(" "); - _ = try stdErr.write(sp.finished_message); + try stdErr.writeAll("\r"); + try stdErr.writeAll(sp.finished_charset); + try stdErr.writeAll(" "); + try stdErr.writeAll(sp.finished_message); } fn writer(sp: *Spinner) !void { @@ -44,11 +44,11 @@ fn writer(sp: *Spinner) !void { if (!sp.keep_going.load(.SeqCst)) break; if (current_char_idx >= sp.loading_charset.len - 1) current_char_idx = 0; - _ = try stdErr.write("\r"); + try stdErr.writeAll("\r"); - _ = try stdErr.write(sp.loading_charset[current_char_idx]); - _ = try stdErr.write(" "); - _ = try stdErr.write(sp.loading_message); + try stdErr.writeAll(sp.loading_charset[current_char_idx]); + try stdErr.writeAll(" "); + try stdErr.writeAll(sp.loading_message); time.sleep(sp.framerate_ns); }