Ich möchte hier mein Projekt crazy-complete (https://github.com/crazy-complete/crazy-complete) vorstellen.
Hierbei handelt es sich um ein Tool, das mittels einer Konfigurationsdatei Autovervollständigungs-Skripte für alle bekannten Shells (Bash, Fish und Zsh) erstellen kann. Das sind die Dateien, die dafür sorgen, dass man im Terminal per Tab-Taste Optionen und Argumente vervollständigen kann.
crazy-complete bietet alles, was das Entwickler-Herz begehrt, verpackt in einem benutzerfreundlichen Interface.
Das Ziel ist es, Autovervollständigungs-Skripte für alle beliebigen Programme erstellen zu können, auch wenn diese komplex sind (zum Beispiel: Optionen, die nur unter bestimmten Bedingungen angezeigt werden sollen, oder Optionen, die benutzerdefinierten Code benötigen).
Das Schreiben von Autovervollständigungs-Skripten kann sehr mühsam und zeitaufwändig sein. Mit crazy-complete kann man diesen Prozess automatisieren und sicherstellen, dass sich die generierten Skripte unter allen Shells gleich verhalten.
Hauptmerkmale:
- Einfache Konfiguration: Das Programm verwendet ein einfaches YAML-Format, das es leicht macht, Optionen und Argumente für ein Programm zu definieren.
- Verschiedene 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.
- 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.
Code: Alles auswählen
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", "-i"]
metavar: "IP"
help: "Set IP address (for --mode=static)"
complete: ["none"]
when: "option_is --mode -m -- static"
positionals:
- number: 1
metavar: "interface"
help: "Specify interface"
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"
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
Also, wenn ihr keine Lust habt, Autovervollständigungs-Skripte von Hand zu schreiben, solltet ihr diesem Tool eine Chance geben.
Lasst mich wissen, was ihr darüber denkt. Bei Fragen oder Verbesserungsvorschlägen stehe ich euch gerne zur Seite.
(Und wenn euch das Projekt gefällt, dann lasst doch bitte einen Stern auf GitHub (https://github.com/crazy-complete/crazy-complete) da.)