Wie finde ich die mit einem ZLE-Widget verknüpfte ZSH-Funktion?

Wie finde ich die mit einem ZLE-Widget verknüpfte ZSH-Funktion?

Ich spiele mit dem accept-lineWidget herum und bekomme nicht die gewünschten Ergebnisse. Ich möchte überprüfen (und protokollieren), was mit der Akzeptanzzeile geschieht, indem ich die zugrunde liegende Zsh-Funktion finde.

Nach meinem Verständnis existieren ZLE-Widgets in ihrem eigenen separaten Namespace mit der Operation, die zle -NSchlüssel den Werten in diesem Namespace zuordnet, und der Operation, zle -Adie Zuordnungen dupliziert.

Ich habe eine ziemlich detaillierte Suche nach derAbonnierenIch habe die Manualpage durchsucht und ein bisschen gegoogelt, aber das Beste, was mir eingefallen ist, ist das Folgende, das die zle -lOperation erklärt.

zle -l  | grep '^accept-line ' | grep -Eo '\(.*\)' | tr -d '()'

Gibt es irgendetwas, das nicht so direkt vom Ausgabeformat abhängt zle -l?

Antwort1

Es gibt ein spezielles Array namens widgets, das die Namen aller Widgets und der ihnen zugeordneten Funktionen enthält. Versuchen Sie also

echo $widgets[accept-line]

Beachten Sie jedoch, dass einige Widgets intern definiert sind und Sie nur ein Wort erhalteneingebautaber nach IhrergrepBefehl ein Skript aus.zshrchat dieses Widget überschrieben, sodass Sie ein sinnvolles Ergebnis erhalten sollten.

Übrigens, wenn Sie alle verfügbaren Widgets und ihre Funktionen auflisten möchten, verwenden Sie (kv)das Flag:

echo ${(kv)widgets}

verwandte Informationen