DEV Community

Benjamin Abendroth
Benjamin Abendroth

Posted on

crazy-complete: Generate shell auto-completion files with a single configuration file

Hello everyone!

I want to introduce my current project crazy-complete.

It is a tool that generates shell auto-completion files using a single configuration file.

Key Features

  • Simple configuration: The tool uses an easy-to-use YAML format
  • Multi shell support: The tool supports Bash, Fish and Zsh
  • Option types: All common option types are supported: long-options (--option), short-options (-o) and old-style-options (-option)
  • Argument types: Options with required arguments, with optional arguments and no arguments are supported
  • Mutually exclusive options: You can define groups of options that can't be used together
  • Repeatable options: You can control if an option may be repeated on commandline, or should appear only once
  • Positional arguments: You can easily define arguments for your program
  • Built-in completion types: The tool comes with these completions: file, directory, choices, value_list, range, signal, process, pid, command, user, group, service, variable, environment
  • Custom completions: If the built-ins aren't sufficient, there is the exec command to complete stuff based of a command's output
  • Conditional options/positionals: You can enable options and positionals based on conditions, like "is there an option present?" or "does an option have a specific value?"
  • Subommands: You can specify arbitrary levels of subcommands
  • Robust scripts: Unlike other generation tools, cracy-complete parses the whole commandline according to the specified options (instead of only looking at the last two args, for example)
  • Efficient scripts: Scripts were made with efficiency in mind. You pay only for what you use.
  • Well tested: There are over fifty tests per shell to ensure correct behaviour

Other Features

  • argparse Support: If your program is written in Python and uses the arparse-module, there is a chance that you can generate scripts (or YAML files) from the argparse.ArgumentParsers's definitions
  • Help text parser: If your program comes with a help text, there is a chance that you can generate YAML definition files by parsing it's output

If you're tired of maintaining completion scripts for different shells, crazy-complete may be for you.

Even if you decide against using generated scripts, the output of the tool may serve as an inspiration.

Let me know what you think. If you need support or have any questions or improvement-ideas, don't hesitate to ask!

And if you like the tool, please give it a star on GitHub

Here you can find an example definition file

Speedy emails, satisfied customers

Postmark Image

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

The Most Contextual AI Development Assistant

Pieces.app image

Our centralized storage agent works on-device, unifying various developer tools to proactively capture and enrich useful materials, streamline collaboration, and solve complex problems through a contextual understanding of your unique workflow.

👥 Ideal for solo developers, teams, and cross-company projects

Learn more

👋 Kindness is contagious

Discover a treasure trove of wisdom within this insightful piece, highly respected in the nurturing DEV Community enviroment. Developers, whether novice or expert, are encouraged to participate and add to our shared knowledge basin.

A simple "thank you" can illuminate someone's day. Express your appreciation in the comments section!

On DEV, sharing ideas smoothens our journey and strengthens our community ties. Learn something useful? Offering a quick thanks to the author is deeply appreciated.

Okay