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

Re: completion help?

On Nov 16,  8:11pm, Timothy J Luoma wrote:
} Subject: completion help?
} I've never really understood completions functions.

You aren't alone.

} compctl -K allapps 'S[-]' -- run

That assigns the completion `-K allapps' to the three commands S[-], --,
and run.  I'm pretty sure that's not what you mean.  Normally you'd only
use things that look like 'S[-]' and '--' when the -x option is present.

} I can get the names of the applications using this:
} sed 's/.*\///g' ~/.AppInfo/LaunchBar/Setup|sed 's/\.app$//g'

That's the same as

    sed 's/.*\/\(.*\)\.app$/\1/' ~/.AppInfo/LaunchBar/Setup

The \1 in the replacement refers to the stuff inside \( \) in the pattern.

You could write a cryptic-looking variable replacement that's equivalent,
using $(<...), but I wouldn't bother.

} How can I make a function that will allow me to do:
} run [tab]
} run S[tab]

If you can do the former, you can do the latter; zsh takes care of that
part itself, so nothing special is necessary.

function allapps()
    reply=( $(sed 's/.*\/\(.*\)\.app$/\1/' ~/.AppInfo/LaunchBar/Setup) )
compctl -K allapps run
compctl -x 'c[-1,-a]' -K allapps -- open

} Clues for the clueless?

The first compctl should be pretty obvious.

The second one says:
 -x	we're going to use extended completion to
 c[,]	match a string in some other word relative to the "c"urrent one
 -1	and that word is the word immediately preceding the current one
 -a	and if that word matches "-a"
 -K	then run the function
 --	now we're done defining the completion, so
 open	is the command to which this completion applies.

Hence `allapps' will generate the completions for `run' and `open -a'.

More clueful?

Bart Schaefer                                 Brass Lantern Enterprises
http://www.well.com/user/barts              http://www.brasslantern.com

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