<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Zsh on ferkakta.dev</title><link>https://ferkakta.dev/tags/zsh/</link><description>Recent content in Zsh on ferkakta.dev</description><generator>Hugo</generator><language>en-US</language><copyright>Copyright fizz.</copyright><lastBuildDate>Thu, 02 Apr 2026 08:00:00 -0500</lastBuildDate><atom:link href="https://ferkakta.dev/tags/zsh/index.xml" rel="self" type="application/rss+xml"/><item><title>I replaced the AWS CLI completer with a datalake</title><link>https://ferkakta.dev/aws-completer-datalake-replacement/</link><pubDate>Thu, 02 Apr 2026 08:00:00 -0500</pubDate><guid>https://ferkakta.dev/aws-completer-datalake-replacement/</guid><description>&lt;p&gt;I needed to tell someone in Italy my availability in their timezone, typed &lt;code&gt;TZ=&lt;/code&gt; and hit tab, and &lt;a href="https://ferkakta.dev/blog/zsh-completions-vocabulary-construction-kit/"&gt;discovered a completer that&amp;rsquo;s apparently been sitting in zsh since the Pleistocene&lt;/a&gt;. That made me finally look at how completion actually works: &lt;code&gt;#compdef&lt;/code&gt;, the dispatch table, &lt;code&gt;_files&lt;/code&gt;, the whole vocabulary kit I&amp;rsquo;d been leaning on for years without really seeing. And in the middle of that I remembered the thing that had made me write off tab completion in the first place: &lt;code&gt;aws_completer&lt;/code&gt;, the Python-spawning hog that claims every argument position and still makes a mockery of my left pinky finger when it innocently asks for a filename, interrupting to say: &lt;em&gt;but wait, are you sure you don&amp;rsquo;t want to marry one of my 428 eligible daughters first?&lt;/em&gt;&lt;/p&gt;</description></item><item><title>I was wrong about shell completions for 15 years</title><link>https://ferkakta.dev/zsh-completions-vocabulary-construction-kit/</link><pubDate>Wed, 01 Apr 2026 15:00:00 -0500</pubDate><guid>https://ferkakta.dev/zsh-completions-vocabulary-construction-kit/</guid><description>&lt;p&gt;I thought shell completions were tab-operated Jinja — fill in the blank, template-style. Type half a filename, press tab, get the rest. That&amp;rsquo;s all I thought they did.&lt;/p&gt;
&lt;p&gt;And the AWS CLI completer kept confirming that impression in the worst way. When you&amp;rsquo;re typing &lt;code&gt;aws s3 cp somefile.txt s3://bucket/&lt;/code&gt;, the completer hijacks tab on the local path argument and sits there forever trying to guess AWS-side completions that will never come. You&amp;rsquo;re done with the AWS part of the command. You just want to tab-complete a filename. It won&amp;rsquo;t let you. AWS hogs the empty space where your possibilities want to go, because it thinks it&amp;rsquo;s important to block your progress in case you wanted to speak to any of its 867 pet names. As John Roderick and Merlin Mann put it on &lt;a href="http://www.intotv.com/rotl/ep1"&gt;Roderick on the Line&lt;/a&gt;: keep moving and get out of the way.&lt;/p&gt;</description></item></channel></rss>