Como posso encontrar a função zsh associada a um widget zle?

Como posso encontrar a função zsh associada a um widget zle?

Estou mexendo no accept-linewidget e não obtendo os resultados desejados. Quero inspecionar (e registrar) o que está acontecendo com a linha de aceitação, encontrando a função zsh subjacente.

Meu entendimento é que os widgets zle existem em seu próprio namespace separado com as zle -Nchaves de mapeamento da operação para valor neste namespace e os zle -Amapeamentos de duplicação da operação.

Eu fiz uma pesquisa bastante detalhada dozshzlepágina de manual e pesquisei no Google, mas o melhor que consegui encontrar é o seguinte que faz uso da zle -loperação.

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

Existe algo que não dependa tão diretamente do formato da saída do arquivo zle -l.

Responder1

Existe um array especial chamado widgetsque contém os nomes de todos os widgets e funções associadas a eles, então tente

echo $widgets[accept-line]

Esteja ciente, entretanto, que alguns widgets são definidos internamente e tudo que você obterá é uma palavraconstruídas em, mas a julgar pelo seugrepcomande algum script originado em.zshrcsubstituiu esse widget, então você deve obter um resultado significativo.

Aliás, se você quiser listar todos os widgets disponíveis e suas funções, use (kv)o sinalizador:

echo ${(kv)widgets}

informação relacionada