내 스크립트에서 zsh의 완성 위젯을 사용하려고 합니다. 어떤 시점에서는 zsh에서 각 활동 완료 결과에 액세스할 수 있기를 원합니다. 또는 오히려 완료 체인의 최종 결과를 얻고 싶습니다.
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
}
_main_complete
나는 다른 함수가 액세스할 수 있도록 (또는 적절한 함수) 호출하고 결과를 내보낸 변수에 저장하는 사용자 정의 완료 함수를 만드는 것을 고려했습니다 . 그러나 이는 어떻게든 사용자 정의 완성 함수를 호출하는 것을 의미하기도 합니다. 방법은 모르겠습니다. 실제 완료를 수행하지 않고 "중간" 완료 결과를 얻을 수 있습니까?
답변1
zsh가 왜 이 기능을 제공하지 않는지 모르겠습니다... 운 좋게도 누군가 완성 시스템을 실용적으로/비대화식으로 사용하도록 해킹했습니다.https://github.com/Valodim/zsh-capture-completion
$ capture.zsh 'man gr'
grep
<snip>
groff
<snip>
이렇게 하면 완료된 완성 목록에만 액세스할 수 있습니다. 즉. 내부 zsh 객체가 아님(설명 등)