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

3

Estou mexendo no widget accept-line e não obtendo os resultados desejados. Eu quero inspecionar (e registrar) o que está acontecendo com o accept-line encontrando a função zsh subjacente.

Meu entendimento é que os widgets zle existem em seu próprio namespace separado com a operação zle -N mapeando chaves para valor nesse namespace e a operação zle -A duplicando mapeamentos.

Eu fiz uma pesquisa bastante detalhada sobre a página de manual zshzle e pesquisei o googling, mas o melhor que consegui criar foi o seguinte, que usa a operação zle -l .

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

Existe alguma coisa que não depende diretamente do formato da saída de zle -l .

    
por Att Righ 12.04.2017 / 18:28

1 resposta

3

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

echo $widgets[accept-line]

Entretanto, esteja ciente de que alguns widgets são definidos internamente e tudo que você obterá é uma palavra builtin , mas a julgar pelo seu comando grep , alguns scripts são originados em . zshrc sobrescreveu esse widget, então você deve obter um resultado significativo.

BTW, se você quiser listar todos os widgets disponíveis e suas funções, use (kv) flag:

echo ${(kv)widgets}
    
por 12.04.2017 / 19:01

Tags