web-dev-qa-db-ja.com

zleウィジェットに関連付けられているzsh関数を見つけるにはどうすればよいですか?

accept-lineウィジェットをいじっていて、希望する結果が得られません。基になるzsh関数を見つけることによって、accept-lineで何が起こっているのかを調べ(そしてログに記録)したいと思います。

私の理解では、zleウィジェットは、この名前空間の値にキーをマッピングする操作zle -Nとマッピングを複製する操作zle -Aを使用して、独自の個別の名前空間に存在します。

zshzleのマニュアルページをかなり詳細に検索し、グーグルを実行しましたが、zle -l操作を使用する次の方法を思い付くことができました。

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

zle -lの出力のフォーマットに直接依存しないものはありますか。

5
Att Righ

widgetsという特別な配列があり、それに関連付けられているすべてのウィジェットと関数の名前を保持しているので、試してみてください

echo $widgets[accept-line]

ただし、一部のウィジェットは内部で定義されており、取得できるのはWord builtinだけですが、grepコマンドから判断すると注意してください。 。zshrcをソースとする一部のスクリプトがそのウィジェットを上書きしたため、意味のある結果が得られるはずです。

ところで、利用可能なすべてのウィジェットとその機能を一覧表示する場合は、(kv)フラグを使用します。

echo ${(kv)widgets}
4
jimmij