Hacking Thy Fearful Symmetry

Hacker, hacker coding bright
Powered by a Gamboling Beluga

Something Fishy

created: November 21, 2013

This one will be terse. I just needed to share the bounty.

So after tackling that fish shell completion for perlbrew, I went on and churned a few more.

Perldoc

First and foremost, a port of one of my shiniest sparks: the perldoc bash completion that started here and has been improved on by Aristotle.

Dist::Zilla and Got

And then, just because it's so easy, I also went ahead and did the same for the sub-commands of both dzil and got.

And when I say easy, I mean easy. In both cases, the autocompletion is auto-munged from the 'help' output in a glorious one-liner. I'm not kidding, here's the content of dzil.fish:


eval (dzil help | perl                               \
-ne'print qq{complete -c dzil -a $1 -f -d \"$2\";\n} \
          if /(\w+):\s+(.*?)\s+$/')

If you want to join the fun, the syntax of complete is really not that complicated. If we take the same example and expand on the arguments used, we have:


complete -c dzil        # the command to auto-complete
         -a authordeps  # one, or many (whitespace-separated), options
         -f             # can't be followed by a filename 
         -d "do stuff"  # a description         

There are more to know than that, like how to deal with subcommands and conditional suggestions, but that's already a good start.

In all cases, the fish files are in my environment repo, and should be PRed soon enough to the different projects they belong to. While I'm at it, I might also begin to gather those completions under a 'perl' umbrella within the Oh My Fish! project. Oh, and you can expect a MooX::Cmd (or maybe for MooseX::App::Cmd) plugin to auto-generate the fish autocomplete file pretty soon.

Enjoy!

comments powered by Disqus

About the author

Yanick Champoux
Perl necrohacker, ACP writer, orchid lover. Slightly bonker all around. Works at Infinity Interactive