8

I'm trying to make use of zsh's completion widgets in my own scripts. At one point I'd like have access to the result of every completion that is active in zsh, or rather I want to obtain the final result of the completion chain.

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 } 

I already thought of creating a custom completion function that just calls _main_complete (or whichever function is appropriate) and stores the results in an exported variable to make it accessible to other functions. However, this would also imply calling the custom completion function somehow - and I don't know how. Is it even possible to get "intermediate" completion results without performing the actual completion?

1 Answer 1

5

I'm not sure why zsh doesn't provide this functionality... Luckily someone made a hack to use the completion system pragmatically/non-interactively: https://github.com/Valodim/zsh-capture-completion

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

This only give access to the finished completion list. Ie. not the internal zsh objects (descriptions, etc.)

(A similar question: Is it possible to manually invoke a zsh completion function?)

1
  • 1
    If you wish to install this using zplug you can use: zplug Valodim/zsh-capture-completion, as:command, use:capture.zsh, rename-to:capture.zsh Commented Apr 18, 2017 at 16:33

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.