Chamando a função de conclusão do zsh e obtendo seus resultados

6

Estou tentando usar os widgets de conclusão do zsh em meus próprios scripts. Em um ponto gostaria de ter acesso ao resultado de cada conclusão que está ativa em zsh, ou melhor, eu quero obter o resultado final da cadeia de conclusão.

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
}

Já pensei em criar uma função de conclusão personalizada que apenas chama _main_complete (ou qualquer função apropriada) e armazena os resultados em uma variável exportada para torná-la acessível a outras funções. No entanto, isso também implicaria em chamar a função de conclusão personalizada de alguma forma - e eu não sei como. É possível obter resultados de conclusão "intermediários" sem realizar a conclusão real?

    
por Sonny O'Rullivan 07.02.2016 / 12:36

1 resposta

2

Não sei por que o zsh não oferece essa funcionalidade ... Felizmente, alguém fez um hack para usar o sistema de completação de forma pragmática / não interativa: link

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

Isso só dá acesso à lista de conclusão finalizada. Ie. não os objetos zsh internos (descrições, etc.)

(Uma pergunta semelhante: É possível invocar manualmente uma função de conclusão do zsh? )

    
por 20.09.2016 / 05:00