Hallo allerseits!
Ich möchte hier mein Projekt crazy-complete vorstellen.
Hierbei handelt es sich um ein Tool, das mittels einer Konfigurationsdatei Autovervollständigungs-Skripte generiert.
crazy-complete bietet alles, was das Entwickler-Herz begehrt, verpackt in einem benutzerfreundlichen Interface.
Hauptmerkmale
* Einfache Konfiguration: Das Programm verwendet ein einfaches YAML-Format
* Shell-Unterstützung: Bash, Fish und Zsh werden unterstützt
* Options-Typen: Es werden long-options (--option), short-options (-o) und old-style-options (-option) unterstützt
* Argumente für Optionen: Optionen unterstützen erforderliche, optionale oder keine Argumente
* Wiederholbare Optionen: Man kann steuern, ob Optionen mehrmals in der Befehlszeile vorkommen, oder nur einmal erscheinen
* Options-Gruppen: Man kann Gruppen von Optionen definieren, von der jeweils nur eine Option in der Befehlszeile erscheinen darf ("mutually-exclusive")
* Programm Argumente: Man kann Argumente für das Programm angeben ("positionals")
* Integrierte Vervollständigungen: Von Haus aus wird folgendes unterstützt: file, directory, choices, value_list, range, signal, process, pid, command, user, group, service, variable, environment
* Benutzerdefinierte Vervollständigungen: Mittels exec kann man benutzerdefinierten Code aufrufen, um Vervollständigungen einzublenden.
* Bedingte Optionen/Argumente: Es ist möglich, Optionen und Argumente nur bedingt anzuzeigen, z.B. nur wenn eine andere Option in der Befehlszeile vorhanden ist oder sie einen bestimmten Wert hat.
* Subcommands: Es werden beliebig viele Subcommands unterstützt (auch verschachtelt)
* Robuste Skripte: Im Gegensatz zu anderen Generatoren, parsed crazy-complete die komplette Kommandozeile, anstatt nur auf die letzten zwei Argumente zu schauen
* Effiziente Skripte: Die Skripte wurden mit Blick auf Effizienz entwickelt ("you only pay for what you use")
* Ausgiebig getestet: Für jede unterstützte Shell liegen über 50 Testfälle vor um korrekte Funktionalität sicherzustellen
Weitere Features
* argparse-Unterstützung: Sofern man Python's argparse-Modul nutzt, gibt es die Möglichkeit anhand des Python-Codes Autovervollständigungs-Skripte oder YAML-Definitionsdateien zu erstellen.
* Hilfe-Text-Parsing: Für bestehende Programme gibt es die Möglichkeit, den Hilfe-Text des Programms zu parsen und eine YAML-Definitionsdatei zu erstellen.
Also, wenn ihr keine Lust habt, Autovervollständigungs-Skripte von Hand zu schreiben, solltet ihr diesem Tool eine Chance geben.
Selbst wenn man sich dagegen entscheidet die generierten Skripte zu nutzen, kann der generierte Code als Inspiration dienen.
Lasst mich wissen, was ihr darüber denkt. Bei Fragen zur Nutzung oder Verbesserungsvorschlägen stehe ich euch gerne zur Seite.
(Und wenn euch das Projekt gefällt, dann lasst doch bitte einen Stern auf Github da.)
Hier noch ein Beispiel für eine Konfigurationsdatei:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | # Fictional example of a program with subcommands. prog: "net" help: "Network utility program" options: - option_strings: ["-h", "--help"] help: "show this help message and exit" --- prog: "net configure" aliases: ["setup"] help: "Configure a network interface" options: - option_strings: ["--mode", "-m"] metavar: "mode" help: "Specify the mode for the interface" complete: ["choices", {"static": "Use static IP mode", "dhcp": "Use DHCP mode"}] - option_strings: ["--ip"] metavar: "IP" help: "Set IP address (for --mode=static)" complete: ["none"] # Only show this option if --mode=static, or -m static when: "option_is --mode -m -- static" positionals: - number: 1 metavar: "interface" help: "Specify interface" # Complete files that are found in /sys/class/net complete: ["file", {"directory": "/sys/class/net"}] --- prog: "net monitor" aliases: ["watch"] help: "Monitor network" options: - option_strings: ["--protocol", "-p"] help: "Specify which protocol to monitor" # Use the first word of each line in /etc/protocols for argument completion complete: ["exec", "grep -o -E '^\\w+' /etc/protocols"] - option_strings: ["--verbose", "-v"] multiple_option: true # can be specified multiple times help: "Enable verbose mode" group: "output_mode" # mutually exclusive to --quiet - option_strings: ["--quiet", "-q"] help: "Enable quiet mode" group: "output_mode" # mutually exclusive to --verbose |
Moderiert von rklm:
Ins passende Forum verschoben. Bitte beachte die Themen-Stickies! Mach Dich bitte außerdem mit den Formatierungsmöglichkeiten vertraut und nutze die Vorschaufunktion!