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

Re: comptctl help



Will Yardley wrote:

> i was wondering if someone could give me a little help with a couple of my
> compctls.  i'd prefer not to use the menu configuration for these - i like
> having it in a file, and i don't have a recent version of zsh on all of the
> machines i use.

Hm.

> this works great for me, but if i try to cd into a hidden directory (say
> .ssh / .netscape whatever) it won't autocomplete.  presumably i need to add
> .??*(-/) somehow but i haven't been able to figure out how to do 'or' for
> this particular expression.  i tried adding both separately with -g for each,
> and i tried putting them between parenthesis with a pipe in between.  sorry
> for the dumb question.
> 
> here's what i currently have.
> 
> # cd, rmdir etc. only accept dirs as arguments
> compctl -g '*(-/)' cd chdir dirs pushd rmdir

Depending on your preference, use either:

  compctl -g '*(D-/)' cd ...

or

  compctl -g '*(-/)' + -g '.*(-/)' cd ...


> also, i have this for scp:
> 
> # for scp or rcp we look for filenames or hostnames
> 
> filehosts() {
>    local argc argv pref filenames hostnames
>    read -nc argc
>    read -Ac argv
> 
>    pref=$argv[$argc]
>    setopt nullglob

If you set an option in a function, you'll also setopt localoptions on
zsh version that support it.  But in this case you could just use the
glob qualifier `(N)', so...

>    filenames=( ${pref}* )

you could use (and this should also solve the other problem you have
with this function):

  filenames=( ${pref}*(N-^/) ${pref}*/ )

>    hostnames=( ${(M@)hosts:#${pref}*} )
>    if [[ ${#filenames} -eq 0 && ${#hostnames} -eq 1 ]]; then
>        reply=

  reply=()

would be nicer

>    else
>       reply=( $filenames $hostnames )
>    fi
>    return
> }
> 
> compctl -K filehosts + -k hosts -S ':' + -u -S '@' \
>        -x 'n[1,@]' -k hosts -S ':' - 'W[1,*:*]' -f -- rcp scp scp2
> 
> this works, but if i'm trying to copy a file that is in a different
> directory, it completes the directory as if it's a file; ie if i'm trying to
> copy:
> junk/rfc2317.txt
> and i type scp ju<tab>
> it will complete to scp junk[space]
> instead of junk/
> so that i can then tab complete the filename.
> 
> it also doesn't work so well on older versions of zsh - sometimes it will
> complete the username wrong or only give me some of the usernames as options.

This isn't enough information to enable to help you.  No way to get
newer versions running there?


Bye
  Sven


-- 
Sven Wischnowsky                         wischnow@xxxxxxxxxxxxxxxxxxxxxxx



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