<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Packages on Zigcli</title><link>https://jiacai2050.github.io/zigcli/packages/</link><description>Recent content in Packages on Zigcli</description><generator>Hugo</generator><language>en-us</language><copyright>&amp;copy; 2023-2026 Jiacai Liu. Built with &lt;a href="https://gohugo.io/"&gt;Hugo&lt;/a&gt; using &lt;a href="https://www.docsy.dev/"&gt;docsy theme&lt;/a&gt; &lt;br&gt;
&lt;a href="https://github.com/jiacai2050/zigcli"&gt;Source Code&lt;/a&gt;</copyright><lastBuildDate>Fri, 09 Oct 2026 16:34:39 +0800</lastBuildDate><atom:link href="https://jiacai2050.github.io/zigcli/packages/index.xml" rel="self" type="application/rss+xml"/><item><title>structargs</title><link>https://jiacai2050.github.io/zigcli/packages/structargs/</link><pubDate>Sat, 21 Oct 2023 12:04:40 +0800</pubDate><guid>https://jiacai2050.github.io/zigcli/packages/structargs/</guid><description>&lt;p&gt;&#10;&lt;code class="verbatim"&gt;structargs&lt;/code&gt; turns a Zig struct into a command-line interface.&lt;/p&gt;&#10;&lt;p&gt;&#10;Instead of building a parser through chained builder calls, you declare one options struct, and&#10;&lt;code class="verbatim"&gt;structargs&lt;/code&gt; derives the flags, defaults, enums, subcommands, and help output from that type at&#10;comptime.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Features&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;The CLI schema lives in one Zig struct:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;normal fields become options&lt;/li&gt;&#10;&lt;li&gt;optional fields and default values become optional flags&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;__shorts__&lt;/code&gt; declares short aliases&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;__messages__&lt;/code&gt; declares help text&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Nested subcommands are declared with &lt;code class="verbatim"&gt;__commands__: union(enum)&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;Help and usage text are generated from the same type definition&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;--version&lt;/code&gt; support is enabled through &lt;code class="verbatim"&gt;version_string&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;print_help_on_error&lt;/code&gt; can print stderr help before returning parse errors&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Supported option value types include:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;All &lt;a href="https://ziglang.org/documentation/0.17.0/#Primitive-Types"&gt;primitive types&lt;/a&gt;, such as &lt;code class="verbatim"&gt;i8&lt;/code&gt;, &lt;code class="verbatim"&gt;u16&lt;/code&gt;, &lt;code class="verbatim"&gt;f32&lt;/code&gt;, &lt;code class="verbatim"&gt;bool&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;[]const u8&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;Enum&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>pretty-table</title><link>https://jiacai2050.github.io/zigcli/packages/pretty-table/</link><pubDate>Sat, 17 Aug 2024 17:48:29 +0800</pubDate><guid>https://jiacai2050.github.io/zigcli/packages/pretty-table/</guid><description>&lt;p&gt;&#10;&lt;code class="verbatim"&gt;pretty-table&lt;/code&gt; provides two table types plus one owning helper:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;Table(N)&lt;/code&gt; — fixed-size rows and fixed column count, both known at &lt;strong&gt;comptime&lt;/strong&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;Table(N).Owned&lt;/code&gt; — runtime row collection for &lt;code class="verbatim"&gt;Table(N)&lt;/code&gt;, while keeping the same fixed column count.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;RuntimeTable&lt;/code&gt; — both row count and column count are driven at runtime.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;The key constraint is Zig&amp;#39;s comptime generics: &lt;code class="verbatim"&gt;Table(N)&lt;/code&gt; requires &lt;code class="verbatim"&gt;N&lt;/code&gt; to be a compile-time constant.&#10;If the column count comes from runtime data (e.g. parsing a CSV header), &lt;code class="verbatim"&gt;RuntimeTable&lt;/code&gt; is the only option.&lt;/p&gt;</description></item><item><title>csv</title><link>https://jiacai2050.github.io/zigcli/packages/csv/</link><pubDate>Sun, 22 Mar 2026 16:20:00 +0800</pubDate><guid>https://jiacai2050.github.io/zigcli/packages/csv/</guid><description>&lt;p&gt;&#10;&lt;code class="verbatim"&gt;csv&lt;/code&gt; parses CSV-style delimited text into rows and fields.&lt;/p&gt;&#10;&lt;p&gt;&#10;With the default comma delimiter, &lt;code class="verbatim"&gt;parseDocument()&lt;/code&gt; implements RFC 4180 record and quoted-field&#10;parsing, including embedded CRLF, doubled-quote escaping, consistent field counts, and explicit&#10;parse errors for malformed input.&lt;/p&gt;&#10;&lt;p&gt;&#10;It also supports a few explicit extensions: alternate delimiters, optional empty-line skipping, and&#10;LF-only line endings.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Usage&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;div class="src src-zig"&gt;&#10;&lt;div class="highlight"&gt;&lt;div style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&#10;&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;&#10;&lt;pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 1&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 2&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 3&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 4&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 5&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 6&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 7&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 8&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 9&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;10&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;11&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;12&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;13&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;14&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;15&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;16&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;17&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;18&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;&#10;&lt;pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-zig" data-lang="zig"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;const&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;std&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000"&gt;@import&lt;/span&gt;(&lt;span style="color:#ba2121"&gt;&amp;#34;std&amp;#34;&lt;/span&gt;);&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;const&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;zigcli&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000"&gt;@import&lt;/span&gt;(&lt;span style="color:#ba2121"&gt;&amp;#34;zigcli&amp;#34;&lt;/span&gt;);&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;const&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;csv&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;zigcli.csv;&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;const&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;allocator&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;std.heap.page_allocator;&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;const&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;input&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#ba2121"&gt;&amp;#34;name,age,city&lt;/span&gt;&lt;span style="color:#b62;font-weight:bold"&gt;\r\n&lt;/span&gt;&lt;span style="color:#ba2121"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;++&lt;/span&gt;&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#ba2121"&gt;&amp;#34;alice,30,beijing&lt;/span&gt;&lt;span style="color:#b62;font-weight:bold"&gt;\r\n&lt;/span&gt;&lt;span style="color:#ba2121"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;++&lt;/span&gt;&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#ba2121"&gt;&amp;#34;bob,25,&lt;/span&gt;&lt;span style="color:#b62;font-weight:bold"&gt;\&amp;#34;&lt;/span&gt;&lt;span style="color:#ba2121"&gt;new york&lt;/span&gt;&lt;span style="color:#b62;font-weight:bold"&gt;\&amp;#34;\r\n&lt;/span&gt;&lt;span style="color:#ba2121"&gt;&amp;#34;&lt;/span&gt;;&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;var&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;document&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;try&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;csv.&lt;span style="color:#00f"&gt;parseDocument&lt;/span&gt;(allocator,&lt;span style="color:#bbb"&gt; &lt;/span&gt;input,&lt;span style="color:#bbb"&gt; &lt;/span&gt;.{&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;.delimiter&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#ba2121"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;,&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;});&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;defer&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;document.&lt;span style="color:#00f"&gt;deinit&lt;/span&gt;(allocator);&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;for&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(document.rows)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;|&lt;/span&gt;row&lt;span style="color:#666"&gt;|&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;std.debug.&lt;span style="color:#00f"&gt;print&lt;/span&gt;(&lt;span style="color:#ba2121"&gt;&amp;#34;{s}&lt;/span&gt;&lt;span style="color:#b62;font-weight:bold"&gt;\n&lt;/span&gt;&lt;span style="color:#ba2121"&gt;&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;.{row[&lt;span style="color:#666"&gt;0&lt;/span&gt;]});&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;API&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;&lt;code class="verbatim"&gt;parseLine(allocator, line, delimiter)&lt;/code&gt;&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;&lt;p&gt;&#10;Parse one line and return a newly allocated slice of fields.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;&lt;code class="verbatim"&gt;parseDocument(allocator, input, options)&lt;/code&gt;&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;&lt;p&gt;&#10;Parse a whole input buffer and return a &lt;code class="verbatim"&gt;Document&lt;/code&gt;:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;rows&lt;/code&gt;: parsed rows&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;num_cols&lt;/code&gt;: column count inferred from the first parsed row&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Malformed input returns a parse error such as &lt;code class="verbatim"&gt;error.InvalidQuotedField&lt;/code&gt;,&#10;&lt;code class="verbatim"&gt;error.InvalidRecordTerminator&lt;/code&gt;, &lt;code class="verbatim"&gt;error.InconsistentFieldCount&lt;/code&gt;, or&#10;&lt;code class="verbatim"&gt;error.UnclosedQuotedField&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;code class="verbatim"&gt;Document&lt;/code&gt; owns the row and field storage. Call &lt;code class="verbatim"&gt;document.deinit(allocator)&lt;/code&gt; when you are done with&#10;it.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>gitignore</title><link>https://jiacai2050.github.io/zigcli/packages/gitignore/</link><pubDate>Fri, 20 Mar 2026 08:45:00 +0800</pubDate><guid>https://jiacai2050.github.io/zigcli/packages/gitignore/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Features&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Full &lt;a href="https://git-scm.com/docs/gitignore"&gt;.gitignore spec&lt;/a&gt; support: &lt;code class="verbatim"&gt;*&lt;/code&gt;, &lt;code class="verbatim"&gt;?&lt;/code&gt;, &lt;code class="verbatim"&gt;[abc]&lt;/code&gt;, &lt;code class="verbatim"&gt;**/&lt;/code&gt;, negation (&lt;code class="verbatim"&gt;!&lt;/code&gt;)&lt;/li&gt;&#10;&lt;li&gt;Recursive &lt;code class="verbatim"&gt;.gitignore&lt;/code&gt; filtering via &lt;code class="verbatim"&gt;GitignoreStack&lt;/code&gt; (per-directory layers)&lt;/li&gt;&#10;&lt;li&gt;Pure Zig implementation — no &lt;code class="verbatim"&gt;libc&lt;/code&gt; &lt;code class="verbatim"&gt;fnmatch&lt;/code&gt; dependency&lt;/li&gt;&#10;&lt;li&gt;Last-match-wins semantics across all layers&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;API&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;&lt;code class="verbatim"&gt;Gitignore&lt;/code&gt;&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;&lt;p&gt;Parse a single &lt;code class="verbatim"&gt;.gitignore&lt;/code&gt; file and match paths against it.&lt;/p&gt;&#10;&lt;div class="src src-zig"&gt;&#10;&lt;div class="highlight"&gt;&lt;div style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&#10;&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;&#10;&lt;pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;1&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;2&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;3&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;4&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;5&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;6&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;7&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;8&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;9&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;&#10;&lt;pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-zig" data-lang="zig"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;const&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;zigcli&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000"&gt;@import&lt;/span&gt;(&lt;span style="color:#ba2121"&gt;&amp;#34;zigcli&amp;#34;&lt;/span&gt;);&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;const&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;gitignore&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;zigcli.gitignore;&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;var&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;gi&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;try&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;gitignore.Gitignore.&lt;span style="color:#00f"&gt;init&lt;/span&gt;(allocator,&lt;span style="color:#bbb"&gt; &lt;/span&gt;content);&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;defer&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;gi.&lt;span style="color:#00f"&gt;deinit&lt;/span&gt;();&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(gi.&lt;span style="color:#00f"&gt;shouldIgnore&lt;/span&gt;(&lt;span style="color:#ba2121"&gt;&amp;#34;build/output.o&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;false&lt;/span&gt;))&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#408080;font-style:italic"&gt;// path is ignored&lt;/span&gt;&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;&lt;code class="verbatim"&gt;GitignoreStack&lt;/code&gt;&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;&lt;p&gt;Manage a stack of &lt;code class="verbatim"&gt;.gitignore&lt;/code&gt; layers for recursive directory walks.&#10;Each layer is anchored to its directory, and patterns are evaluated with&#10;correct relative paths.&lt;/p&gt;&#10;&lt;div class="src src-zig"&gt;&#10;&lt;div class="highlight"&gt;&lt;div style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&#10;&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;&#10;&lt;pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 1&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 2&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 3&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 4&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 5&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 6&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 7&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 8&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 9&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;10&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;11&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;12&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;13&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;14&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;15&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;&#10;&lt;pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-zig" data-lang="zig"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;const&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;zigcli&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000"&gt;@import&lt;/span&gt;(&lt;span style="color:#ba2121"&gt;&amp;#34;zigcli&amp;#34;&lt;/span&gt;);&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;const&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;gitignore&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;zigcli.gitignore;&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;var&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;stack&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;gitignore.GitignoreStack.&lt;span style="color:#00f"&gt;init&lt;/span&gt;();&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;defer&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;stack.&lt;span style="color:#00f"&gt;deinit&lt;/span&gt;(allocator);&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#408080;font-style:italic"&gt;// Push a layer when entering a directory.&lt;/span&gt;&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;const&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;pushed&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;try&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;stack.&lt;span style="color:#00f"&gt;tryPushDir&lt;/span&gt;(dir,&lt;span style="color:#bbb"&gt; &lt;/span&gt;rel_dir,&lt;span style="color:#bbb"&gt; &lt;/span&gt;allocator);&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(stack.&lt;span style="color:#00f"&gt;shouldIgnore&lt;/span&gt;(rel_path,&lt;span style="color:#bbb"&gt; &lt;/span&gt;is_dir))&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#408080;font-style:italic"&gt;// path is ignored&lt;/span&gt;&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#408080;font-style:italic"&gt;// Pop when leaving the directory.&lt;/span&gt;&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(pushed)&lt;span style="color:#bbb"&gt; &lt;/span&gt;stack.&lt;span style="color:#00f"&gt;pop&lt;/span&gt;(allocator);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>term</title><link>https://jiacai2050.github.io/zigcli/packages/term/</link><pubDate>Sat, 21 Mar 2026 21:05:00 +0800</pubDate><guid>https://jiacai2050.github.io/zigcli/packages/term/</guid><description>&lt;p&gt;&#10;&lt;code class="verbatim"&gt;term&lt;/code&gt; provides the small terminal-focused building blocks shared by &lt;code class="verbatim"&gt;zigcli&lt;/code&gt; packages and&#10;programs.&lt;/p&gt;&#10;&lt;p&gt;&#10;Use it when you want reusable ANSI styling, a shared color type, or lightweight terminal&#10;capability checks without pulling table rendering into your own code.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Features&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;Style.Color&lt;/code&gt; defines the standard ANSI foreground/background colors, including bright variants&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;Style&lt;/code&gt; combines bold, italic, foreground color, and background color into one reusable value&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;isTty(file)&lt;/code&gt; reports whether a file is attached to an interactive terminal&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;terminalWidth(file)&lt;/code&gt; returns the terminal width when it can be detected, otherwise &lt;code class="verbatim"&gt;null&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;stdoutWidth()&lt;/code&gt; is a convenience wrapper for the common stdout case&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Usage&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;div class="src src-zig"&gt;&#10;&lt;div class="highlight"&gt;&lt;div style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&#10;&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;&#10;&lt;pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 1&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 2&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 3&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 4&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 5&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 6&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 7&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 8&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 9&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;10&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;11&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;12&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;13&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;14&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;15&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;16&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;&#10;&lt;pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-zig" data-lang="zig"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;const&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;std&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000"&gt;@import&lt;/span&gt;(&lt;span style="color:#ba2121"&gt;&amp;#34;std&amp;#34;&lt;/span&gt;);&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;const&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;zigcli&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000"&gt;@import&lt;/span&gt;(&lt;span style="color:#ba2121"&gt;&amp;#34;zigcli&amp;#34;&lt;/span&gt;);&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;const&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;term&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;zigcli.term;&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;const&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;stdout&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;std.fs.File.&lt;span style="color:#00f"&gt;stdout&lt;/span&gt;();&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;var&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;buffer:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[&lt;span style="color:#666"&gt;1024&lt;/span&gt;]&lt;span style="color:#b00040"&gt;u8&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;undefined&lt;/span&gt;;&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;var&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;writer&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;stdout.&lt;span style="color:#00f"&gt;writer&lt;/span&gt;(&lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;buffer);&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;const&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;style:&lt;span style="color:#bbb"&gt; &lt;/span&gt;term.Style&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;.{&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;.bold&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;true&lt;/span&gt;,&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;.fg&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;.bright_green,&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;};&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;try&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;style.&lt;span style="color:#00f"&gt;writeString&lt;/span&gt;(&lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;writer.interface,&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#ba2121"&gt;&amp;#34;OK&amp;#34;&lt;/span&gt;);&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;try&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;writer.interface.&lt;span style="color:#00f"&gt;writeByte&lt;/span&gt;(&lt;span style="color:#ba2121"&gt;&amp;#39;\n&amp;#39;&lt;/span&gt;);&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;try&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;writer.interface.&lt;span style="color:#00f"&gt;flush&lt;/span&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-2"&gt;&#10;&lt;h2 id="headline-3"&gt;&#10;&lt;code class="verbatim"&gt;Style.Color&lt;/code&gt;&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-2"&gt;&#10;&lt;p&gt;&#10;&lt;code class="verbatim"&gt;Style.Color&lt;/code&gt; is the shared ANSI color enum used by &lt;code class="verbatim"&gt;pretty-table&lt;/code&gt; cell styling and by any program&#10;that wants plain colored output.&lt;/p&gt;&#10;&lt;p&gt;&#10;Available colors:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;black&lt;/code&gt;, &lt;code class="verbatim"&gt;red&lt;/code&gt;, &lt;code class="verbatim"&gt;green&lt;/code&gt;, &lt;code class="verbatim"&gt;yellow&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;blue&lt;/code&gt;, &lt;code class="verbatim"&gt;magenta&lt;/code&gt;, &lt;code class="verbatim"&gt;cyan&lt;/code&gt;, &lt;code class="verbatim"&gt;white&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;bright variants such as &lt;code class="verbatim"&gt;bright_red&lt;/code&gt; and &lt;code class="verbatim"&gt;bright_cyan&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Useful helpers:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;toEscapeCode()&lt;/code&gt;: foreground color escape sequence&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;toBgEscapeCode()&lt;/code&gt;: background color escape sequence&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;writeString(writer, text)&lt;/code&gt;: write colored text and reset afterward&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;reset&lt;/code&gt;: the ANSI reset sequence&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="src src-zig"&gt;&#10;&lt;div class="highlight"&gt;&lt;div style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&#10;&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;&#10;&lt;pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;1&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;&#10;&lt;pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-zig" data-lang="zig"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;try&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;term.Style.Color.yellow.&lt;span style="color:#00f"&gt;writeString&lt;/span&gt;(&lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;writer.interface,&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#ba2121"&gt;&amp;#34;warning&amp;#34;&lt;/span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>progress</title><link>https://jiacai2050.github.io/zigcli/packages/progress/</link><pubDate>Fri, 17 Apr 2026 11:55:10 +0800</pubDate><guid>https://jiacai2050.github.io/zigcli/packages/progress/</guid><description>&lt;p&gt;&#10;&lt;code class="verbatim"&gt;progress&lt;/code&gt; renders progress bars and spinners to the terminal. It handles ANSI&#10;cursor control, terminal width detection, render throttling, and rate/ETA&#10;calculation automatically.&lt;/p&gt;&#10;&lt;p&gt;&#10;Output is hidden when the target file is not a TTY, so piping or redirecting&#10;will not produce garbled escape sequences.&lt;/p&gt;&#10;&lt;p&gt;&#10;Timing uses a monotonic clock (&lt;code class="verbatim"&gt;std.time.Timer&lt;/code&gt;), so rate and ETA calculations&#10;are immune to wall-clock adjustments.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Quick start&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-3"&gt;&#10;&lt;h3 id="headline-2"&gt;&#10;Progress bar&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-3"&gt;&#10;&lt;div class="src src-zig"&gt;&#10;&lt;div class="highlight"&gt;&lt;div style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&#10;&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;&#10;&lt;pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 1&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 2&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 3&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 4&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 5&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 6&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 7&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 8&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 9&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;10&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;11&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;12&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;13&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;14&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;15&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;16&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;&#10;&lt;pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-zig" data-lang="zig"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;const&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;std&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000"&gt;@import&lt;/span&gt;(&lt;span style="color:#ba2121"&gt;&amp;#34;std&amp;#34;&lt;/span&gt;);&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;const&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;zigcli&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000"&gt;@import&lt;/span&gt;(&lt;span style="color:#ba2121"&gt;&amp;#34;zigcli&amp;#34;&lt;/span&gt;);&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;const&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;progress&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;zigcli.progress;&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;var&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;bar&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;progress.Progress.&lt;span style="color:#00f"&gt;bar&lt;/span&gt;(allocator,&lt;span style="color:#bbb"&gt; &lt;/span&gt;.{&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;.total&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;100&lt;/span&gt;,&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;.prefix&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#ba2121"&gt;&amp;#34;download&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;.message&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#ba2121"&gt;&amp;#34;fetching data&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;});&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;defer&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;bar.&lt;span style="color:#00f"&gt;deinit&lt;/span&gt;();&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;for&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(&lt;span style="color:#666"&gt;0&lt;/span&gt;&lt;span style="color:#666"&gt;..&lt;/span&gt;&lt;span style="color:#666"&gt;100&lt;/span&gt;)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;|&lt;/span&gt;_&lt;span style="color:#666"&gt;|&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;bar.&lt;span style="color:#00f"&gt;inc&lt;/span&gt;(&lt;span style="color:#666"&gt;1&lt;/span&gt;);&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;try&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;bar.&lt;span style="color:#00f"&gt;render&lt;/span&gt;();&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;try&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;bar.&lt;span style="color:#00f"&gt;finish&lt;/span&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;&#10;Output:&lt;/p&gt;&#10;&lt;pre class="example"&gt;&#10;download [==========&amp;gt;---------] 55.0% 55/100 27/s ETA 0:01 fetching data&#10;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;Spinner&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;&lt;div class="src src-zig"&gt;&#10;&lt;div class="highlight"&gt;&lt;div style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&#10;&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;&#10;&lt;pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 1&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 2&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 3&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 4&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 5&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 6&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 7&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 8&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 9&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;10&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;11&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;&#10;&lt;pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-zig" data-lang="zig"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;var&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;spinner&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;progress.Progress.&lt;span style="color:#00f"&gt;spinner&lt;/span&gt;(allocator,&lt;span style="color:#bbb"&gt; &lt;/span&gt;.{&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;.prefix&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#ba2121"&gt;&amp;#34;build&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;.message&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#ba2121"&gt;&amp;#34;compiling&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;});&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;defer&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;spinner.&lt;span style="color:#00f"&gt;deinit&lt;/span&gt;();&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;for&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(&lt;span style="color:#666"&gt;0&lt;/span&gt;&lt;span style="color:#666"&gt;..&lt;/span&gt;&lt;span style="color:#666"&gt;40&lt;/span&gt;)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;|&lt;/span&gt;_&lt;span style="color:#666"&gt;|&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;spinner.&lt;span style="color:#00f"&gt;tick&lt;/span&gt;();&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;try&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;spinner.&lt;span style="color:#00f"&gt;render&lt;/span&gt;();&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;try&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;spinner.&lt;span style="color:#00f"&gt;finish&lt;/span&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;&#10;Output:&lt;/p&gt;&#10;&lt;pre class="example"&gt;&#10;build | elapsed 0:05 compiling&#10;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item></channel></rss>