Aufruf der zsh-Vervollständigungsfunktion und Abrufen der Ergebnisse

7

Ich versuche, die Abschluss-Widgets von zsh in meinen eigenen Skripten zu verwenden. An einem Punkt möchte ich Zugriff auf das Ergebnis jeder in zsh aktiven Fertigstellung haben, oder vielmehr möchte ich das Endergebnis der Abschlusskette erhalten.

function foo() {
  do_unrelated_stuff()

  # call zsh completion
  comp_results=_main_complete_() # won't work like this, can only be called from within a completion function

  if [[ "$#comp_results" -gt "0" ]]; then
    # do something
    echo "results:"
  else
    # do something else
    echo "no results"
  fi
}

Ich habe bereits darüber nachgedacht, eine benutzerdefinierte Abschlussfunktion zu erstellen, die nur aufruft _main_complete(oder welche Funktion auch immer geeignet ist) und die Ergebnisse in einer exportierten Variablen speichert, um sie anderen Funktionen zugänglich zu machen. Dies würde jedoch auch bedeuten, dass die benutzerdefinierte Vervollständigungsfunktion irgendwie aufgerufen wird - und ich weiß nicht wie. Ist es überhaupt möglich, "Zwischenergebnisse" zu erzielen, ohne die eigentliche Fertigstellung durchzuführen?

Sonny O'Rullivan
quelle

Antworten:

3

Ich bin mir nicht sicher, warum zsh diese Funktionalität nicht bietet ... Glücklicherweise hat jemand einen Hack gemacht, um das Vervollständigungssystem pragmatisch / nicht interaktiv zu verwenden: https://github.com/Valodim/zsh-capture-completion

$ capture.zsh 'man gr'
grep
<snip>
groff
<snip>

Dies gibt nur Zugriff auf die fertige Abschlussliste. Dh. nicht die internen zsh-Objekte (Beschreibungen usw.)

(Eine ähnliche Frage: Ist es möglich, eine zsh-Vervollständigungsfunktion manuell aufzurufen? )

olejorgenb
quelle
1
Wenn Sie dies mit zplug installieren möchten, können Sie verwenden: zplugValodim/zsh-capture-completion, as:command, use:capture.zsh, rename-to:capture.zsh
Att Righ