/ / Custom Bash Autocomplete mit Dateipfadvervollständigung - bash, macos, bash-completion

Benutzerdefinierte Bash-Autovervollständigung mit Dateipfadvervollständigung - bash, macos, bash-completion

Ich arbeite an Bash Auto-Vervollständigung für ein Projekt, das ich der Betreuer von bin. Sie können finde das Skript hier. Ich habe dies zusammen mit etwas Hacking selbst gemacht, und mit der Hilfe von einigen Mitwirkenden, die verstehen, dass Abschluss-APIs besser sind als ich.

Was wir haben, funktioniert super - mit einer Ausnahme. Wir können einen Abschluss wie diesen verwalten

//type
pestle.phar som[TAB]

//completes to
pestle.phar some-command-name

Aber sobald wir hier sind, wir verlieren Dateipfad / Name-Vervollständigung, die ein Teil der Aktien-Bash-Shell ist. Das heißt, das vorherige Beispiel abarbeiten, wenn ein Benutzer tippt

//type
pestle.phar some-command-name /va[TAB]

wir möchten es zu vervollständigen

//completes to the following, because var exists
pestle.phar some-command-name /var

Gibt es eine Möglichkeit, das einfach zu sagen? complete befehle etwas wie

Hey, zusätzlich zu allem, was wir dir mit unserer Custom-Bash-Funktion sagen, behalte auch deinen normalen Dateipfad bei

Wenn nicht, gibt es eine bekannte Wissenschaft / Musterplatte, um den Dateipfad-Abschluss in Ihren eigenen benutzerdefinierten Basisvervollständigungsfunktionen neu zu implementieren?

Etwas Andere Antwort und die Dokumente scheinen um anzuzeigen, dass die -o filenames oder -o bashdefault Optionen sollten dafür sorgen - aber es scheint nicht zu funktionieren OS X 10.11. Ich bin mir nicht sicher, ob ich falsch verstehe -ooder wenn der Code in meinen Completion - Dateien den -o Verhalten, oder wenn OS X macht es "s Ich bin nur ein meist gut erzogenes Unix Ding.

Auch - wenn es nicht offensichtlich ist - das ist mein erstes Deep Bash Completion Rodeo. Wenn ich etwas scheinbar dumm / naiv oben gesagt habe, lass es mich wissen. Ich suche jetzt vielleicht nach einem Fisch, aber ich würde gerne lernen zu Fisch in der Bashvollendung Fluss selbst.

Antworten:

2 für die Antwort № 1

Ich denke -o default (ohne -o filenames) sollte für Sie arbeiten. Laut dem Handbuch:

  • Bashdefault
    Führen Sie den Rest der Standard-Bash-Vervollständigungen wenn die compspec keine Übereinstimmungen erzeugt.
  • Standard
    Benutzen Readline "s Standard-Dateinamen abgeschlossen wenn die compspec keine Übereinstimmungen erzeugt.
  • Dateinamen
    Erzähle readline, dass die compspec erzeugtDateinamen, so dass es jede dateiname-spezifische Verarbeitung ausführen kann (wie das Hinzufügen eines Schrägstrichs zum Verzeichnis) Namen, Sonderzeichen zitieren oder nachfolgende Leerzeichen unterdrücken). Vorgesehen für die Verwendung mit Shell-Funktionen.

(Siehe auch "complete -d -o Standard-CD" Problem für den Unterschied zwischen -o default und -o bashdefault.)