Auto-Vervollständigungs-Skripte generieren mit crazy-complete

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
CrazyComplete
Beiträge: 1
Registriert: 24.10.2024 16:42:56
Kontaktdaten:

Auto-Vervollständigungs-Skripte generieren mit crazy-complete

Beitrag von CrazyComplete » 25.10.2024 18:57:31

Hallo allerseits.

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.
Hier ein kurzes Beispiel für ein fiktives Programm:

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
Selbst wenn man sich dagegen entscheidet die generierten Skripte zu nutzen, können sie als Inspiration dienen.

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.)

Benutzeravatar
whisper
Beiträge: 3379
Registriert: 23.09.2002 14:32:21
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Re: Auto-Vervollständigungs-Skripte generieren mit crazy-complete

Beitrag von whisper » 25.10.2024 19:17:21

CrazyComplete hat geschrieben: ↑ zum Beitrag ↑
25.10.2024 18:57:31

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.

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.)
Alter Falter!
die bash-completion für eigene (mini)Projekte erweitern hatte ich schon mal angedacht, aber ob der Komplexität wieder verworfen.
Ich werde mir das mal in den nächsten Tagen sicherlich ansehen.
:hail:
Alter ist übrigens keine Ausrede, nur Erfahrung, die sich stapelt. 😉

Antworten