Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: completion within a function



On 2020-12-29 1:48 p.m., Bart Schaefer wrote:

func ()
{
code
      cd $1 [TAB]
code
code
}

... so that I can automatically execute a completion within a function.
Where does the TAB come from?

That's what I'm asking.  How could I simulate the effect of completing on $1 within the function automatically?  Or perhaps:

    new_var=$( complete_it $1 )

where 'complete _it' is a function that does just what TAB would do on the command line.




I think what you're actually asking is how to apply the contextual
completion "rules" defined for a command ("cd" in this case) to a
parameter expansion.  There really is not any way to do that
"automatically" because completion is tightly bound to having the ZLE
line editor active.  It could be done the way that the test suite
emulates completion, but that's exceptionally convoluted, especially
error handling.
Geez, I'd have thought that it would just be a question of digging up the right completer.  But as you say.
'vared' is a variable editor no?  Does it do more than I think?
If you were to write

func()
{
   code
     vared 1
     cd $1
   code
   code
}

Then at the point vared is invoked, func would pause, wait for the
user to press TAB or whatever, and then after accept-line is executed,
continue with whatever result.
Cool.  That's bound to be useful even if not right now.  I had no idea it could be used within a function like that.

NEXT MSG:

  local dirs=( $1*(-/N) )

Marvelous.  If I was 20 I'd devote the next 10 years to reading the manual and have the health to survive it.  The thing is that zsh code is so terse that you can't go searching for answers unless you already know where to look. Anyway, that line of yours does it all exactly as I want.  Thanks Bart.






Messages sorted by: Reverse Date, Date, Thread, Author